110 lines
3.7 KiB
JavaScript
110 lines
3.7 KiB
JavaScript
class BypassUsersModel extends EICPluralModel {
|
|
|
|
constructor(privileges) {
|
|
|
|
super('users', privileges);
|
|
|
|
this.singletonClass = class {
|
|
itemData = {
|
|
uuid: null,
|
|
firstname: null,
|
|
lastname: null,
|
|
role: null
|
|
}
|
|
}
|
|
}
|
|
|
|
getUid(uid) {
|
|
return(this.collection.find(x=>(x.uid == uid)));
|
|
}
|
|
|
|
create(payload) {
|
|
if(!this.hasPrivilege('create')) return( new Promise((resolve, reject) => reject()))
|
|
let endpoint = this.getApiEndpoint('create');
|
|
return ( this.request(endpoint.uri, endpoint.method, payload) );
|
|
}
|
|
|
|
revoke(uid) {
|
|
if(!this.hasPrivilege('revoke')) return( new Promise((resolve, reject) => reject()))
|
|
|
|
let endpoint = this.getApiEndpoint('revoke');
|
|
let uri = endpoint.uri.replace('{id}', uid);
|
|
|
|
return this.request(uri, endpoint.method, null);
|
|
}
|
|
|
|
search(hint) {
|
|
// This is publicly avail, don't check until ML understand what anonymous means
|
|
// if(!this.hasPrivilege('search')) return( new Promise((resolve, reject) => reject()))
|
|
let endpoint = this.getApiEndpoint('search');
|
|
let uri = endpoint.uri.replace('{id}', hint);
|
|
|
|
return (
|
|
this.request(uri, endpoint.method, {'hint': hint })
|
|
.then( async serverData => {
|
|
let users = serverData.payload.map(x=> { // Cleanup keys starting with https://
|
|
for(let k in x){
|
|
if(k.substring(0,4)=='http') { x[k.substring(k.lastIndexOf('/')+1)]=x[k]; delete(x[k]);}
|
|
} return(x);
|
|
} )
|
|
return(users);
|
|
})
|
|
)
|
|
}
|
|
|
|
sanitize(item) {
|
|
//TODO what if several BP_ roles...
|
|
item.BProle = item.roles.filter(r => (r.substring(0,3)=='BP_'))[0];
|
|
let trackTree = null;
|
|
if(item.track) {
|
|
trackTree = app.meta.getItem('accelerator-tracks',item.track);
|
|
item.track = { id: item.track, label: trackTree.label };
|
|
} else {
|
|
item.track = { id: null, label: '(n/a)' };
|
|
}
|
|
|
|
if((item.domain) && (trackTree)){
|
|
item.domain = { id: item.domain, label: app.meta.getItemRecurse(trackTree, item.domain).label };
|
|
} else {
|
|
item.domain = { id: null, label: '(n/a)' };
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
list(filters) {
|
|
if(!this.hasPrivilege('list')) return( new Promise((resolve, reject) => reject()))
|
|
|
|
let endpoint = this.getApiEndpoint('list');
|
|
return (
|
|
this.request(endpoint.uri, endpoint.method, filters)
|
|
.then( async serverData => {
|
|
const payload = serverData.payload;
|
|
this.fill(payload);
|
|
})
|
|
)
|
|
}
|
|
|
|
// Not sure why / when / where they think I'll need it, but it exists (and takes 2.5 seconds to get 5 strings)
|
|
// If someday the response-time is decent, and if we have the delegationRules the payload...maybe...
|
|
getRoles() {
|
|
if(!this.hasPrivilege('getRoles')) return( new Promise((resolve, reject) => reject()))
|
|
|
|
let endpoint = app.config.api.roles.list;
|
|
return (
|
|
this.request(endpoint.uri, endpoint.method, {})
|
|
.then( async serverData => {
|
|
this.existingRoles = serverData.payload;
|
|
})
|
|
)
|
|
}
|
|
|
|
fill(serverData) {
|
|
if(serverData && serverData.length) {
|
|
this.collection = [];
|
|
for(let singletonData of serverData) this.collection.push(this.sanitize(singletonData));
|
|
}
|
|
}
|
|
}
|
|
|
|
app.registerClass('BypassUsersModel', BypassUsersModel); |