mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-20 22:52:39 +02:00
initial commit
This commit is contained in:
+262
@@ -0,0 +1,262 @@
|
||||
/* --Description :cloud function to add or attach user in given role */
|
||||
|
||||
//-- Export Modules
|
||||
import 'dotenv/config.js';
|
||||
import axios from 'axios';
|
||||
|
||||
export async function addUserToGroups(request) {
|
||||
try {
|
||||
var roleName = request.params.roleName;
|
||||
if (roleName == undefined) {
|
||||
return Promise.reject('Error:roleName not found!');
|
||||
}
|
||||
var appName = request.params.appName;
|
||||
if (appName == undefined) {
|
||||
return Promise.reject('Error:appName not found!');
|
||||
}
|
||||
var chkappName = appName + '_';
|
||||
//console.log("roleName " + roleName);
|
||||
var userId = request.params.userId;
|
||||
//console.log("userId " + userId);
|
||||
console.log('addUserToGroups');
|
||||
var response = {};
|
||||
var rolelist = {};
|
||||
var user = {
|
||||
users: {
|
||||
__op: 'AddRelation',
|
||||
objects: [{ __type: 'Pointer', className: '_User', objectId: userId }],
|
||||
},
|
||||
};
|
||||
var Role = roleName;
|
||||
var chkappnam = Role.split('_')[0];
|
||||
chkappnam = chkappnam + '_';
|
||||
// if (!chkappnam == chkappName) {
|
||||
// return Promise.reject("Error:Please check role it should belong to current appllication");
|
||||
// }
|
||||
function getAccessType(request) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
const options = {
|
||||
url: process.env.SERVER_URL + '/classes/w_appinfo?where={"appname":"' + appName + '"}',
|
||||
method: 'get',
|
||||
headers: {
|
||||
'X-Parse-Application-Id': process.env.APP_ID,
|
||||
'X-Parse-Master-Key': process.env.MASTER_KEY,
|
||||
},
|
||||
};
|
||||
|
||||
axios(options)
|
||||
.then(x => {
|
||||
const body = x.data;
|
||||
var accessType;
|
||||
if (body['results'].length !== 0) {
|
||||
accessType = body['results'][0]['accessType'];
|
||||
} else {
|
||||
reject('Error:app not found!');
|
||||
}
|
||||
var error = accessType == '' ? true : false;
|
||||
if (error) {
|
||||
reject('result not found!');
|
||||
} else {
|
||||
resolve(accessType);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
var role = appName + 'appeditor';
|
||||
var appaccessType = await getAccessType(request);
|
||||
//console.log("appaccessType");
|
||||
//console.log(appaccessType);
|
||||
if (appaccessType == 'public') {
|
||||
adduserToRole();
|
||||
} else {
|
||||
//--function to get the userid from session token
|
||||
function getuserid(request) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
const options = {
|
||||
url: process.env.SERVER_URL + '/users/me',
|
||||
method: 'get',
|
||||
headers: {
|
||||
'X-Parse-Application-Id': process.env.APP_ID,
|
||||
'X-Parse-Session-Token': request.headers['sessiontoken'],
|
||||
},
|
||||
};
|
||||
|
||||
axios(options)
|
||||
.then(x => {
|
||||
const body = x.data;
|
||||
var error = body == '' ? true : false;
|
||||
if (error) {
|
||||
reject('result not found!');
|
||||
} else {
|
||||
resolve(body);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
var userData = await getuserid(request);
|
||||
if (userData.objectId == undefined) {
|
||||
return Promise.reject('Error:user not found!');
|
||||
}
|
||||
var chkuserid = userData.objectId;
|
||||
//console.log("chkuserid "+chkuserid);
|
||||
var url =
|
||||
process.env.SERVER_URL +
|
||||
'/roles?where={"users":{"__type":"Pointer","className":"_User","objectId":"' +
|
||||
chkuserid +
|
||||
'"},"name": {"$regex": "' +
|
||||
chkappName +
|
||||
'"}}';
|
||||
|
||||
//-- check user role
|
||||
function getRoleList(chkuserid) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
const options = {
|
||||
url: url,
|
||||
method: 'get',
|
||||
headers: {
|
||||
'X-Parse-Application-Id': process.env.APP_ID,
|
||||
},
|
||||
};
|
||||
|
||||
axios(options)
|
||||
.then(x => {
|
||||
const body = x.data;
|
||||
if (body['results'].length == 0) {
|
||||
reject('Error:user not found');
|
||||
}
|
||||
var error = body == '' ? true : false;
|
||||
if (error) {
|
||||
reject('result not found!');
|
||||
} else {
|
||||
resolve(body);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
rolelist = await getRoleList(chkuserid);
|
||||
//console.log("rolelist");
|
||||
// console.log(rolelist);
|
||||
var roleres = [];
|
||||
var result;
|
||||
for (var i = 0; i < rolelist['results'].length; i++) {
|
||||
var rolenum = rolelist['results'][i]['name'];
|
||||
var appnam = rolenum.split('_')[0];
|
||||
appnam = appnam + '_';
|
||||
if (appnam == chkappName) {
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == true) {
|
||||
adduserToRole();
|
||||
} else {
|
||||
return Promise.reject('Error:user of this app can only add user to Role');
|
||||
}
|
||||
}
|
||||
|
||||
//--after validation call adduserToRole function
|
||||
async function adduserToRole() {
|
||||
var roleNam = roleName;
|
||||
var roleid = await getroleobjId(roleNam);
|
||||
console.log('roleid');
|
||||
console.log(roleid);
|
||||
var response = await adduserid(roleid);
|
||||
/*process.stdin.resume();
|
||||
// listen to the event
|
||||
process.on('SIGTERM', () => {
|
||||
process.emit('cleanup');
|
||||
})*/
|
||||
return response;
|
||||
}
|
||||
//--function to get the role objId
|
||||
function getroleobjId(roleNam) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
const options = {
|
||||
url: process.env.SERVER_URL + '/roles?where={"name":"' + roleNam + '"}',
|
||||
method: 'get',
|
||||
headers: {
|
||||
'X-Parse-Application-Id': process.env.APP_ID,
|
||||
},
|
||||
};
|
||||
axios(options)
|
||||
.then(x => {
|
||||
const body = x.data;
|
||||
var roleid;
|
||||
if (body['results'].length !== 0) {
|
||||
roleid = body['results'][0]['objectId'];
|
||||
} else {
|
||||
reject('Error:Role not found!');
|
||||
}
|
||||
var error = roleid == '' ? true : false;
|
||||
if (error) {
|
||||
reject('result not found!');
|
||||
} else {
|
||||
resolve(roleid);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//--function to add the userid to role
|
||||
function adduserid(roleid) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
const options = {
|
||||
url: process.env.SERVER_URL + '/roles/' + roleid,
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'X-Parse-Application-Id': process.env.APP_ID,
|
||||
'X-Parse-Master-Key': process.env.MASTER_KEY,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: user,
|
||||
};
|
||||
|
||||
axios(options)
|
||||
.then(x => {
|
||||
const body = x.data;
|
||||
var error = body == '' ? true : false;
|
||||
if (error) {
|
||||
reject('result not found!');
|
||||
} else {
|
||||
console.log('user added to role');
|
||||
resolve(body);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('err in AddUserToRole');
|
||||
console.log(err);
|
||||
return Promise.reject('Error:exception in query,Result not Found');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user