UNPKG

node-red-contrib-powerbi

Version:

A PowerBI API interaction node-red module which allows to interact with PowerBI service.

129 lines (105 loc) 3.36 kB
var request = require('request'); module.exports = function(RED) { function PowerBIGroups(config) { RED.nodes.createNode(this,config); // Retrieve the connection node. this.connection = RED.nodes.getNode(config.connection); var node = this; function IsInvalidParameter(p) { return (p === undefined || p.id === undefined || p.id.length === 0); } node.on('input', function(msg) { function ProcessResponse(error, response, body) { msg.status = response.statusCode; msg.headers = response.headers; msg.payload = body; response !== undefined && response.statusCode !== undefined && response.statusCode === 200 ? node.send(msg) : node.send([null, msg]); } if (config.operation !== 'getgroups') { if (IsInvalidParameter(msg.workspace)) { msg.payload = "Missing target workspace id"; node.send([null, msg]); return; } } switch (config.operation) { case 'addgroup': request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups', body: { 'name': msg.workspace.name }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; case 'addgroupuser': if (msg.workspace.userEmail === undefined || msg.workspace.userEmail.length === 0) { msg.payload = 'Missing user email'; node.send([null, msg]); return; } request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/users', body: { 'groupUserAccessRight': 'Admin', 'emailAddress': msg.workspace.userEmail }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; case 'deletegroup': request({ method:'DELETE', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; case 'deletegroupuser': if (msg.workspace.userEmail === undefined || msg.workspace.userEmail.length === 0) { msg.payload = 'Missing user email'; node.send([null, msg]); return; } request({ method:'DELETE', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/users/' + msg.workspace.userEmail, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; case 'getgroups': request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; case 'getgroupusers': request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/users', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); break; }; }); } RED.nodes.registerType('powerbi-groups', PowerBIGroups); }