Skip to content

Commit e75c448

Browse files
added accesscontrol utility functions
Signed-off-by: NeelParihar <[email protected]>
1 parent 5009f36 commit e75c448

File tree

3 files changed

+123
-0
lines changed

3 files changed

+123
-0
lines changed

index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,8 @@ module.exports = {
3131
* @type {typeof import('./lib/axiosInstance')}
3232
*/
3333
axiosInstance: require('./lib/axiosInstance'),
34+
/**
35+
* @type {typeof import('./lib/accessControl')}
36+
*/
37+
AccessControl: require('./lib/accessControl'),
3438
}

lib/accessControl.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
2+
const DispatchRequest = require('./dispatchRequest');
3+
const ErrorMessage = require('./errorMessage');
4+
const CONST = require('./const');
5+
6+
/**
7+
* @license Apache Version 2
8+
* @module AccessControl
9+
* @constructor AccessControl
10+
* @description The AccessControl object has various methods to control the access for users.
11+
*/
12+
13+
function AccessControl(cloudAPIUrl, params) {
14+
15+
this.baseURL = cloudAPIUrl + 'api';
16+
this.apiToken = this.getAPIToken(params);
17+
18+
}
19+
20+
AccessControl.prototype.getAPIToken = function(params) {
21+
if(params) {
22+
if(!params.token) throw new Error('TerminusX Access token required');
23+
24+
return params.token;
25+
} else {
26+
if(!process.env.TERMINUSDB_ACCESS_TOKEN) throw new Error('TerminusX Access token required');
27+
28+
return process.env.TERMINUSDB_ACCESS_TOKEN;
29+
}
30+
}
31+
32+
AccessControl.prototype.dispatch = function(requestUrl, action, payload) {
33+
if (!requestUrl) {
34+
return Promise.reject(
35+
new Error(
36+
ErrorMessage.getInvalidParameterMessage(
37+
action,
38+
'Invalid request URL'
39+
),
40+
),
41+
);
42+
}
43+
44+
return DispatchRequest(
45+
requestUrl,
46+
action,
47+
payload,
48+
{ type: 'jwt', key: this.apiToken }
49+
);
50+
}
51+
52+
AccessControl.prototype.getUserRoles = function() {
53+
return this.dispatch(this.baseURL + "/roles", CONST.GET);
54+
};
55+
56+
AccessControl.prototype.createOrganization = function(orgName) {
57+
return this.dispatch(this.baseURL + "/organizations", CONST.POST,{
58+
organization: orgName
59+
});
60+
};
61+
62+
AccessControl.prototype.ifOrganizationExists = function (orgName) {
63+
return this.dispatch(`${this.baseURL}/organizations/${orgName}`, CONST.HEAD);
64+
};
65+
66+
AccessControl.prototype.removeUserFromOrg = function (orgName, userId) {
67+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/users/${userId}`, CONST.DELETE);
68+
};
69+
70+
AccessControl.prototype.getPendingOrgInvites = function (orgName) {
71+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/invites`, CONST.GET);
72+
};
73+
74+
AccessControl.prototype.sendOrgInvite = function (orgName, userEmail, role, note = '') {
75+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/invites`, CONST.POST, {
76+
email_to: userEmail,
77+
role,
78+
note,
79+
});
80+
};
81+
82+
AccessControl.prototype.getOrgInvite = function (orgName, inviteId) {
83+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/invites/${inviteId}`, CONST.GET);
84+
};
85+
86+
AccessControl.prototype.deleteOrgInvite = function (orgName, inviteId) {
87+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/invites/${inviteId}`, CONST.DELETE);
88+
};
89+
90+
AccessControl.prototype.updateOrgInviteStatus = function (orgName, inviteId, accepted) {
91+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/invites/${inviteId}`, CONST.PUT, {
92+
accepted
93+
});
94+
};
95+
96+
AccessControl.prototype.getOrgUsers = function (orgName) {
97+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/users`, CONST.GET);
98+
};
99+
100+
AccessControl.prototype.getDatabaseRolesOfUser = function (orgName, userId) {
101+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/users/${userId}/databases`, CONST.GET);
102+
};
103+
104+
AccessControl.prototype.assignUserRole = function (orgName, userId, scope, role) {
105+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/users/${userId}/capabilities`, CONST.POST, {
106+
scope,
107+
role,
108+
});
109+
};
110+
111+
AccessControl.prototype.updateUserRole = function (orgName, userId, capabilityId, scope, role) {
112+
return this.dispatch(`${this.baseURL}/organizations/${orgName}/users/${userId}/capabilities/${capabilityId}`, CONST.PUT, {
113+
scope,
114+
role,
115+
});
116+
};
117+
118+
module.exports = AccessControl;

lib/const.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module.exports = Object.freeze({
99
GET:'GET',
1010
DELETE:'DELETE',
1111
PUT:'PUT',
12+
HEAD:'HEAD',
1213
QUERY_DOCUMENT:'QUERY_DOCUMENT',
1314
SQUASH_BRANCH: 'SQUASH_BRANCH',
1415
UPDATE_SCHEMA: 'UPDATE_SCHEMA',

0 commit comments

Comments
 (0)