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
JavaScript
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);
}