globular_admin
Version:
Administration panel for a Globular server.
1,811 lines (1,640 loc) • 61.4 kB
text/typescript
import * as GlobularWebClient from "globular-web-client";
import {
GetConfigRequest,
SaveConfigRequest,
InstallServiceRequest,
InstallServiceResponse,
StopServiceRequest,
StartServiceRequest,
SaveConfigResponse,
SetEmailRequest,
SetPasswordRequest,
UninstallServiceRequest,
UninstallServiceResponse
} from "globular-web-client/lib/admin/admin_pb";
import {
QueryRangeRequest,
QueryRequest
} from "globular-web-client/lib/monitoring/monitoringpb/monitoring_pb";
import { randomUUID, includeJavascript } from "./utility";
import {
RegisterAccountRqst,
AuthenticateRqst,
Account,
GetAllActionsRqst,
GetAllActionsRsp,
AddRoleActionRqst,
AddRoleActionRsp,
RemoveRoleActionRqst,
CreateRoleRqst,
Role,
CreateRoleRsp,
DeleteRoleRqst,
RefreshTokenRqst,
RefreshTokenRsp,
GetAllFilesInfoRqst,
GetAllFilesInfoRsp,
GetAllApplicationsInfoRqst,
GetAllApplicationsInfoRsp,
AddApplicationActionRqst,
AddApplicationActionRsp,
RemoveApplicationActionRqst,
DeleteApplicationRqst,
DeleteAccountRqst,
AddAccountRoleRqst,
RemoveAccountRoleRqst,
GetPermissionsRqst,
GetPermissionsRsp,
DeletePermissionsRqst,
DeletePermissionsRsp,
SetPermissionRqst,
RessourcePermission,
SetPermissionRsp,
SynchronizeLdapRqst,
LdapSyncInfos,
SynchronizeLdapRsp,
UserSyncInfos,
GroupSyncInfos,
GetRessourceOwnersRqst,
GetRessourceOwnersRsp,
SetRessourceOwnerRqst,
DeleteRessourceOwnerRqst,
GetLogRqst,
LogInfo,
ClearAllLogRqst,
LogType,
SetActionPermissionRqst,
Ressource,
RemoveActionPermissionRqst,
GetRessourcesRqst,
RemoveRessourceRqst,
DeleteLogRqst,
GetPeersRqst,
GetPeersRsp,
Peer,
AddPeerActionRqst,
AddPeerActionRsp,
RemovePeerActionRqst,
DeletePeerRqst
} from "globular-web-client/lib/ressource/ressource_pb";
import * as jwt from "jwt-decode";
import {
InsertOneRqst,
FindOneRqst,
FindRqst,
FindResp,
FindOneResp,
AggregateRqst,
PingConnectionRqst,
PingConnectionRsp,
ReplaceOneRqst,
ReplaceOneRsp
} from "globular-web-client/lib/persistence/persistencepb/persistence_pb";
import {
FindServicesDescriptorRequest,
FindServicesDescriptorResponse,
ServiceDescriptor,
GetServiceDescriptorRequest,
GetServiceDescriptorResponse,
GetServicesDescriptorRequest,
GetServicesDescriptorResponse,
SetServiceDescriptorRequest
} from "globular-web-client/lib/services/services_pb";
import {
RenameRequest,
RenameResponse,
DeleteFileRequest,
DeleteDirRequest,
CreateArchiveRequest,
CreateArchiveResponse,
CreateDirRequest,
ReadDirRequest,
} from "globular-web-client/lib/file/filepb/file_pb";
import { TagType, ReadTagRqst } from "globular-web-client/lib/plc/plcpb/plc_pb";
// Create a new connection with the backend.
export let globular: GlobularWebClient.Globular;
export let eventHub: GlobularWebClient.EventHub;
// The name of the application
let application = "admin";
let domain = window.location.hostname;
let config: any;
/**
* Display the error message to the end user.
* @param err The error message can be a simple string or a json stringnify object
*/
export function getErrorMessage(err: any): string {
try {
let errObj = JSON.parse(err);
if (errObj.ErrorMsg != undefined) {
console.log(errObj)
return errObj.ErrorMsg
}
} catch{
console.log(err)
return err;
}
}
export async function initServices(callback: () => void, errorCallback: (err: any) => void) {
config = {
Protocol: window.location.protocol.replace(":", ""),
Domain: window.location.hostname,
PortHttps: window.location.port,
AdminPort: 10001,
AdminProxy: 10002,
Services: {} // empty for start.
};
// Create a new connection with the backend.
globular = new GlobularWebClient.Globular(config);
let rqst = new GetConfigRequest();
if (globular.adminService !== undefined) {
globular.adminService
.getConfig(rqst, { domain: domain, applicaiton: application })
.then(rsp => {
let config = JSON.parse(rsp.getResult());
// init the services from the configuration retreived.
globular = new GlobularWebClient.Globular(config);
// create the event hub and set globular.eventService to enable
// network events.
eventHub = new GlobularWebClient.EventHub(globular.eventService);
callback();
})
.catch(err => {
errorCallback(err);
});
}
}
// let config = globular.adminService.GetConfig()
export function readFullConfig(
callback: (config: GlobularWebClient.IConfig) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetConfigRequest();
if (globular.adminService !== undefined) {
globular.adminService
.getFullConfig(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then(rsp => {
globular.config = JSON.parse(rsp.getResult());; // set the globular config with the full config.
callback(globular.config);
})
.catch(err => {
errorCallback(err);
});
}
}
export function pingSql(connectionId: string, callback: (pong: string) => {}, errorCallback: (err: any) => void) {
let rqst = new PingConnectionRqst
rqst.setId(connectionId)
globular.sqlService.ping(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then((rsp: PingConnectionRsp) => {
callback(rsp.getResult());
})
.catch((err: any) => {
errorCallback(err);
})
}
// Save the configuration.
export function saveConfig(
config: GlobularWebClient.IConfig,
callback: (config: GlobularWebClient.IConfig) => void
, errorCallback: (err: any) => void
) {
let rqst = new SaveConfigRequest();
rqst.setConfig(JSON.stringify(config));
if (globular.adminService !== undefined) {
globular.adminService
.saveConfig(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then(rsp => {
config = JSON.parse(rsp.getResult());
callback(config);
})
.catch(err => {
errorCallback(err);
});
}
}
/**
* Synchronize LDAP and Globular/MongoDB user and roles.
* @param info The synchronisations informations.
* @param callback success callback.
*/
export function syncLdapInfos(info: any, timeout: number, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new SynchronizeLdapRqst
let syncInfos = new LdapSyncInfos
syncInfos.setConnectionid(info.connectionId)
syncInfos.setLdapseriveid(info.ldapSeriveId)
syncInfos.setRefresh(info.refresh)
let userSyncInfos = new UserSyncInfos
userSyncInfos.setBase(info.userSyncInfos.base)
userSyncInfos.setQuery(info.userSyncInfos.query)
userSyncInfos.setId(info.userSyncInfos.id)
userSyncInfos.setEmail(info.userSyncInfos.email)
syncInfos.setUsersyncinfos(userSyncInfos)
let groupSyncInfos = new GroupSyncInfos
groupSyncInfos.setBase(info.groupSyncInfos.base)
groupSyncInfos.setQuery(info.groupSyncInfos.query)
groupSyncInfos.setId(info.groupSyncInfos.id)
syncInfos.setGroupsyncinfos(groupSyncInfos)
rqst.setSyncinfo(syncInfos)
// Try to synchronyze the ldap service.
globular.ressourceService.synchronizeLdap(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then((rsp: SynchronizeLdapRsp) => {
}).catch((err: any) => {
errorCallback(err);
})
}
///////////////////////////////////// Permissions /////////////////////////////////////
/**
* Retreive the list of ressource owner.
* @param path
* @param callback
* @param errorCallback
*/
export function getRessourceOwners(
path: string,
callback: (infos: Array<any>) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetRessourceOwnersRqst
path = path.replace("/webroot", "");
rqst.setPath(path);
globular.ressourceService.getRessourceOwners(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then((rsp: GetRessourceOwnersRsp) => {
callback(rsp.getOwnersList())
}).catch((err: any) => {
errorCallback(err);
});
}
/**
* The ressource owner to be set.
* @param path The path of the ressource
* @param owner The owner of the ressource
* @param callback The success callback
* @param errorCallback The error callback
*/
export function setRessourceOwners(
path: string,
owner: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new SetRessourceOwnerRqst
path = path.replace("/webroot", ""); // remove the /webroot part.
rqst.setPath(path);
rqst.setOwner(owner);
globular.ressourceService.setRessourceOwner(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(() => {
callback()
}).catch((err: any) => {
errorCallback(err);
});
}
/**
* Delete a given ressource owner
* @param path The path of the ressource.
* @param owner The owner to be remove
* @param callback The sucess callback
* @param errorCallback The error callback
*/
export function deleteRessourceOwners(
path: string,
owner: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeleteRessourceOwnerRqst
path = path.replace("/webroot", ""); // remove the /webroot part.
rqst.setPath(path);
rqst.setOwner(owner);
globular.ressourceService.deleteRessourceOwner(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(() => {
callback()
}).catch((err: any) => {
errorCallback(err);
});
}
/**
* Retreive the permission for a given file.
* @param path
* @param callback
* @param errorCallback
*/
export function getRessourcePermissions(
path: string,
callback: (infos: Array<any>) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetPermissionsRqst
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path);
globular.ressourceService
.getPermissions(rqst, {
application: application, domain: domain
})
.then((rsp: GetPermissionsRsp) => {
let permissions = JSON.parse(rsp.getPermissions())
callback(permissions);
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
* The permission can be assigned to
* a User, a Role or an Application.
*/
export enum OwnerType {
User = 1,
Role = 2,
Application = 3
}
/**
* Create a file permission.
* @param path The path on the server from the root.
* @param owner The owner of the permission
* @param ownerType The owner type
* @param number The (unix) permission number.
* @param callback The success callback
* @param errorCallback The error callback
*/
export function setRessourcePermission(
path: string,
owner: string,
ownerType: OwnerType,
number: number,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new SetPermissionRqst
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
let permission = new RessourcePermission
permission.setPath(path)
permission.setNumber(number)
if (ownerType == OwnerType.User) {
permission.setUser(owner)
} else if (ownerType == OwnerType.Role) {
permission.setRole(owner)
} else if (ownerType == OwnerType.Application) {
permission.setApplication(owner)
}
rqst.setPermission(permission)
globular.ressourceService
.setPermission(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: SetPermissionRsp) => {
callback();
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
* Delete a file permission for a give user.
* @param path The path of the file on the server.
* @param owner The owner of the file
* @param callback The success callback.
* @param errorCallback The error callback.
*/
export function deleteRessourcePermissions(
path: string,
owner: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeletePermissionsRqst
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path);
rqst.setOwner(owner);
globular.ressourceService
.deletePermissions(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: DeletePermissionsRsp) => {
callback();
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
///////////////////////////////////// File operations /////////////////////////////////
/**
* Rename a file or a directorie with given name.
* @param path The path inside webroot
* @param newName The new file name
* @param oldName The old file name
* @param callback The success callback.
* @param errorCallback The error callback.
*/
export function renameFile(
path: string,
newName: string,
oldName: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new RenameRequest();
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path);
rqst.setOldName(oldName);
rqst.setNewName(newName);
globular.fileService
.rename(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: RenameResponse) => {
callback();
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
* Delete a file with a given path.
* @param path The path of the file to be deleted.
* @param callback The success callback.
* @param errorCallback The error callback.
*/
export function deleteFile(
path: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeleteFileRequest();
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path);
globular.fileService
.deleteFile(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: RenameResponse) => {
callback();
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
*
* @param path The path of the directory to be deleted.
* @param callback The success callback
* @param errorCallback The error callback.
*/
export function deleteDir(
path: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeleteDirRequest();
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path);
globular.fileService
.deleteDir(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: RenameResponse) => {
callback();
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
* Create a dir archive.
* @param path
* @param name
* @param callback
* @param errorCallback
*/
export function createArchive(path: string, name: string, callback: (path: string) => void, errorCallback: (err: any) => void) {
let rqst = new CreateArchiveRequest;
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
rqst.setPath(path)
rqst.setName(name)
globular.fileService.createAchive(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(
(rsp: CreateArchiveResponse) => {
callback(rsp.getResult())
}
).catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
*
* @param urlToSend
*/
export function downloadFileHttp(urlToSend: string, fileName: string, callback: () => void) {
var req = new XMLHttpRequest();
req.open("GET", urlToSend, true);
// Set the token to manage downlaod access.
req.setRequestHeader("token", localStorage.getItem("user_token"))
req.setRequestHeader("application", "admin")
req.setRequestHeader("domain", domain)
req.responseType = "blob";
req.onload = function (event) {
var blob = req.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
callback();
};
req.send();
}
/**
* Download a directory as archive file. (.tar.gz)
* @param path The path of the directory to dowload.
* @param callback The success callback.
* @param errorCallback The error callback.
*/
export function downloadDir(path: string, callback: () => void, errorCallback: (err: any) => void) {
let name = path.split("/")[path.split("/").length - 1]
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
// Create an archive-> download it-> delete it...
createArchive(path, name, (path: string) => {
let name = path.split("/")[path.split("/").length - 1]
// display the archive path...
downloadFileHttp(window.location.origin + path, name, () => {
// Here the file was downloaded I will now delete it.
setTimeout(() => {
// wait a little and remove the archive from the server.
let rqst = new DeleteFileRequest
rqst.setPath(path)
globular.fileService.deleteFile(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(callback)
.catch(errorCallback)
}, 5000); // wait 5 second, arbritary...
});
}, errorCallback)
}
// Merge tow array together.
function mergeTypedArraysUnsafe(a: any, b: any) {
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
/**
* Read the content of a dir from a given path.
* @param path The parent path of the dir to be read.
* @param callback Return the path of the dir with more information.
* @param errorCallback Return a error if the file those not contain the value.
*/
export function readDir(path: string, callback: (dir: any) => void, errorCallback: (err: any) => void) {
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
let rqst = new ReadDirRequest
rqst.setPath(path)
rqst.setRecursive(true)
rqst.setThumnailheight(256)
rqst.setThumnailwidth(256)
var uint8array = new Uint8Array();
var stream = globular.fileService.readDir(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
});
stream.on("data", rsp => {
uint8array = mergeTypedArraysUnsafe(uint8array, rsp.getData())
});
stream.on("status", function (status) {
if (status.code == 0) {
var jsonStr = new TextDecoder("utf-8").decode(uint8array);
var content = JSON.parse(jsonStr)
callback(content)
} else {
// error here...
errorCallback({ "message": status.details })
}
});
}
/**
*
* @param files
*/
function fileExist(fileName: string, files: Array<any>): boolean {
if (files != null) {
for (var i = 0; i < files.length; i++) {
if (files[i].Name == fileName) {
return true;
}
}
}
return false
}
/**
* Create a new directory inside existing one.
* @param path The path of the directory
* @param callback The callback
* @param errorCallback The error callback
*/
export function createDir(path: string, callback: (dirName: string) => void, errorCallback: (err: any) => void) {
path = path.replace("/webroot", ""); // remove the /webroot part.
if (path.length == 0) {
path = "/";
}
// first of all I will read the directory content...
readDir(path, (dir: any) => {
let newDirName = "New Folder"
for (var i = 0; i < 1024; i++) {
if (!fileExist(newDirName, dir.Files)) {
break
}
newDirName = "New Folder (" + i + ")"
}
// Set the request.
let rqst = new CreateDirRequest
rqst.setPath(path)
rqst.setName(newDirName)
// Create a directory at the given path.
globular.fileService.createDir(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(() => {
// The new directory was created.
callback(newDirName)
})
.catch(
(err: any) => {
errorCallback(err)
}
)
}, errorCallback)
}
///////////////////////////////////// Monitoring //////////////////////////////////////
// Run a query.
export function query(
connectionId: string,
query: string,
ts: number,
callback: (value: any) => void,
errorCallback: (error: any) => void
) {
// Create a new request.
var request = new QueryRequest();
request.setConnectionid(connectionId);
request.setQuery(query);
request.setTs(ts);
// Now I will test with promise
globular.monitoringService
.query(request, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then(resp => {
if (callback != undefined) {
callback(JSON.parse(resp.getValue()));
}
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
// Run Query with a given range.
export function queryRange(
connectionId: string,
query: string,
startTime: number,
endTime: number,
step: number,
callback: (values: any) => void,
errorCallback: (err: any) => void
) {
// Create a new request.
var request = new QueryRangeRequest();
request.setConnectionid(connectionId);
request.setQuery(query);
request.setStarttime(startTime);
request.setEndtime(endTime);
request.setStep(step);
let buffer = { value: "", warning: "" };
var stream = globular.monitoringService.queryRange(request, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
});
stream.on("data", rsp => {
buffer.value += rsp.getValue();
buffer.warning = rsp.getWarnings();
});
stream.on("status", function (status) {
if (status.code == 0) {
callback(JSON.parse(buffer.value));
} else {
errorCallback({ "message": status.details })
}
});
stream.on("end", () => {
// stream end signal
});
}
///////////////////////////////////// Account //////////////////////////////////////
/**
* Register a new user.
* @param userName The name of the account
* @param email The email
* @param password The password
* @param confirmPassword
* @param callback
* @param errorCallback
*/
export function registerAccount(
userName: string,
email: string,
password: string,
confirmPassword: string,
callback: (value: any) => void,
errorCallback: (err: any) => void
) {
var request = new RegisterAccountRqst();
var account = new Account();
account.setName(userName);
account.setEmail(email);
request.setAccount(account);
request.setPassword(password);
request.setConfirmPassword(confirmPassword);
// Create the user account.
globular.ressourceService
.registerAccount(request, { application: application, domain: domain })
.then(rsp => {
callback(rsp.getResult());
})
.catch(err => {
errorCallback(err);
});
}
/**
* Remove an account from the server.
* @param name The _id of the account.
* @param callback The callback when the action succed
* @param errorCallback The error callback.
*/
export function DeleteAccount(
id: string,
callback: (value: any) => void,
errorCallback: (err: any) => void) {
let rqst = new DeleteAccountRqst
rqst.setId(id)
// Remove the account from the database.
globular.ressourceService
.deleteAccount(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then(rsp => {
callback(rsp.getResult());
})
.catch(err => {
errorCallback(err);
});
}
/**
* Remove a role from an account.
* @param accountId The account id
* @param roleId The role name (id)
* @param callback The success callback
* @param errorCallback The error callback
*/
export function RemoveRoleFromAccount(
accountId: string,
roleId: string,
callback: (value: any) => void,
errorCallback: (err: any) => void
) {
let rqst = new RemoveAccountRoleRqst
rqst.setAccountid(accountId)
rqst.setRoleid(roleId)
globular.ressourceService
.removeAccountRole(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then(rsp => {
callback(rsp.getResult());
})
.catch(err => {
errorCallback(err);
});
}
/**
* Append a role to an account.
* @param accountId The account id
* @param roleId The role name (id)
* @param callback The success callback
* @param errorCallback The error callback.
*/
export function AppendRoleToAccount(
accountId: string,
roleId: string,
callback: (value: any) => void,
errorCallback: (err: any) => void
) {
let rqst = new AddAccountRoleRqst
rqst.setAccountid(accountId)
rqst.setRoleid(roleId)
globular.ressourceService
.addAccountRole(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then(rsp => {
callback(rsp.getResult());
})
.catch(err => {
errorCallback(err);
});
}
/**
* Update the account email
* @param accountId The account id
* @param old_email the old email
* @param new_email the new email
* @param callback the callback when success
* @param errorCallback the error callback in case of error
*/
export function updateAccountEmail(accountId: string, old_email: string, new_email: string, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new SetEmailRequest
rqst.setAccountid(accountId)
rqst.setOldemail(old_email)
rqst.setNewemail(new_email)
globular.adminService.setEmail(rqst,
{
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(rsp => {
callback()
})
.catch(err => {
console.log("fail to save config ", err);
});
}
/**
* The update account password
* @param accountId The account id
* @param old_password The old password
* @param new_password The new password
* @param confirm_password The new password confirmation
* @param callback The success callback
* @param errorCallback The error callback.
*/
export function updateAccountPassword(accountId: string, old_password: string, new_password: string, confirm_password: string, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new SetPasswordRequest
rqst.setAccountid(accountId)
rqst.setOldpassword(old_password)
rqst.setNewpassword(new_password)
if (confirm_password != new_password) {
errorCallback("password not match!")
return
}
globular.adminService.setPassword(rqst,
{
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(rsp => {
callback()
})
.catch(error => {
if (errorCallback != undefined) {
errorCallback(error);
}
});
}
/**
* Authenticate the user and get the token
* @param userName The account name or email
* @param password The user password
* @param callback
* @param errorCallback
*/
export function authenticate(
userName: string,
password: string,
callback: (value: any) => void,
errorCallback: (err: any) => void
) {
var rqst = new AuthenticateRqst();
rqst.setName(userName);
rqst.setPassword(password);
// Create the user account.
globular.ressourceService
.authenticate(rqst, { application: application, domain: domain })
.then(rsp => {
// Here I will set the token in the localstorage.
let token = rsp.getToken();
let decoded = jwt(token);
// here I will save the user token and user_name in the local storage.
localStorage.setItem("user_token", token);
localStorage.setItem("user_name", (<any>decoded).username);
readFullConfig((config: any) => {
// Publish local login event.
eventHub.publish("onlogin", config, true); // return the full config...
callback(decoded);
}, (err: any) => {
errorCallback(err)
})
})
.catch(err => {
console.log(err)
errorCallback(err);
});
}
/**
* Function to be use to refresh token or full configuration.
* @param callback On success callback
* @param errorCallback On error callback
*/
export function refreshToken(callback: (token: any) => void, errorCallback: (err: any) => void) {
let rqst = new RefreshTokenRqst();
rqst.setToken(localStorage.getItem("user_token"));
globular.ressourceService
.refreshToken(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: RefreshTokenRsp) => {
// Here I will set the token in the localstorage.
let token = rsp.getToken();
let decoded = jwt(token);
// here I will save the user token and user_name in the local storage.
localStorage.setItem("user_token", token);
localStorage.setItem("user_name", (<any>decoded).username);
readFullConfig((config: any) => {
// Publish local login event.
eventHub.publish("onlogin", config, true); // return the full config...
callback(decoded);
}, (err: any) => {
errorCallback(err)
})
})
.catch((err: any) => {
onerror(err);
});
}
/**
* Save user data into the user_data collection.
*/
export function appendUserData(data: any, callback: (id: string) => void) {
let userName = localStorage.getItem("user_name");
let database = userName + "_db";
let collection = "user_data";
let rqst = new InsertOneRqst();
rqst.setId(database);
rqst.setDatabase(database);
rqst.setCollection(collection);
rqst.setJsonstr(JSON.stringify(data));
rqst.setOptions("");
// call persist data
globular.persistenceService
.insertOne(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: any) => {
callback(rsp.getId());
})
.catch((err: any) => {
console.log(err);
});
}
/**
* Read user data one result at time.
*/
export function readOneUserData(
query: string,
callback: (results: any) => void
) {
let userName = localStorage.getItem("user_name");
let database = userName + "_db";
let collection = "user_data";
let rqst = new FindOneRqst();
rqst.setId(database);
rqst.setDatabase(database);
rqst.setCollection(collection);
rqst.setQuery(query);
rqst.setOptions("");
// call persist data
globular.persistenceService
.findOne(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: any) => {
callback(JSON.parse(rsp.getJsonstr()));
})
.catch((err: any) => {
console.log(err);
});
}
///////////////////////////////////////////////////////////////////////////////////////////////
// Roles
///////////////////////////////////////////////////////////////////////////////////////////////
/**
* Return the list of all account on the server, guest and admin are new account...
* @param callback
*/
export function GetAllAccountsInfo(callback: (
accounts: Array<any>) => void,
errorCallback: (err: any) => void
) {
let rqst = new FindRqst();
rqst.setCollection("Accounts");
rqst.setDatabase("local_ressource");
rqst.setId("local_ressource");
rqst.setQuery("{}"); // means all values.
var stream = globular.persistenceService.find(rqst, {
application: application, domain: domain
});
let accounts = new Array<any>()
stream.on("data", (rsp: FindResp) => {
accounts = accounts.concat(JSON.parse(rsp.getJsonstr()))
});
stream.on("status", function (status) {
if (status.code == 0) {
callback(accounts);
} else {
errorCallback({ "message": status.details })
}
});
}
/**
* Retreive all available actions on the server.
* @param callback That function is call in case of success.
* @param errorCallback That function is call in case error.
*/
export function getAllActions(
callback: (ations: Array<string>) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetAllActionsRqst();
globular.ressourceService
.getAllActions(rqst, { application: application, domain: domain })
.then((rsp: GetAllActionsRsp) => {
callback(rsp.getActionsList());
})
.catch((err: any) => {
errorCallback(err);
});
}
/**
* Retreive the list of all available roles on the server.
* @param callback That function is call in case of success.
* @param errorCallback That function is call in case error.
*/
export function getAllRoles(
callback: (roles: Array<any>) => void,
errorCallback: (err: any) => void
) {
let rqst = new FindRqst();
rqst.setCollection("Roles");
rqst.setDatabase("local_ressource");
rqst.setId("local_ressource");
rqst.setQuery("{}"); // means all values.
var stream = globular.persistenceService.find(rqst, {
application: application, domain: domain
});
var roles = new Array<any>();
stream.on("data", (rsp: FindResp) => {
roles = roles.concat(JSON.parse(rsp.getJsonstr()));
});
stream.on("status", function (status) {
if (status.code == 0) {
callback(roles);
} else {
errorCallback({ "message": status.details })
}
});
}
/**
* Append Action to a given role.
* @param action The action name.
* @param role The role.
* @param callback The success callback
* @param errorCallback The error callback.
*/
export function AppendActionToRole(
role: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new AddRoleActionRqst();
rqst.setRoleid(role);
rqst.setAction(action);
globular.ressourceService
.addRoleAction(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: AddRoleActionRsp) => {
callback();
})
.catch((err: any) => {
errorCallback(err);
});
}
/**
* Remove the action from a given role.
* @param action The action id
* @param role The role id
* @param callback success callback
* @param errorCallback error callback
*/
export function RemoveActionFromRole(
role: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new RemoveRoleActionRqst();
rqst.setRoleid(role);
rqst.setAction(action);
globular.ressourceService
.removeRoleAction(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: AddRoleActionRsp) => {
callback();
})
.catch((err: any) => {
errorCallback(err);
});
}
export function CreateRole(
id: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new CreateRoleRqst();
let role = new Role();
role.setId(id);
role.setName(id);
rqst.setRole(role);
globular.ressourceService
.createRole(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: CreateRoleRsp) => {
callback();
})
.catch((err: any) => {
errorCallback(err);
});
}
export function DeleteRole(
id: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeleteRoleRqst();
rqst.setRoleid(id);
globular.ressourceService
.deleteRole(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: CreateRoleRsp) => {
callback();
})
.catch((err: any) => {
errorCallback(err);
});
}
///////////////////////////////////////////////////////////////////////////////////////////////
// Files and directories management.
///////////////////////////////////////////////////////////////////////////////////////////////
export function GetAllFilesInfo(
callbak: (filesInfo: any) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetAllFilesInfoRqst();
globular.ressourceService
.getAllFilesInfo(rqst, { application: application, domain: domain })
.then((rsp: GetAllFilesInfoRsp) => {
let filesInfo = JSON.parse(rsp.getResult());
callbak(filesInfo);
})
.catch((err: any) => {
errorCallback(err);
});
}
export function GetAllApplicationsInfo(
callback: (infos: any) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetAllApplicationsInfoRqst();
globular.ressourceService
.getAllApplicationsInfo(rqst)
.then((rsp: GetAllApplicationsInfoRsp) => {
let infos = JSON.parse(rsp.getResult());
callback(infos);
})
.catch((err: any) => {
errorCallback(err);
});
}
export function AppendActionToApplication(
applicationId: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new AddApplicationActionRqst;
rqst.setApplicationid(applicationId)
rqst.setAction(action)
globular.ressourceService.addApplicationAction(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddApplicationActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
export function RemoveActionFromApplication(
applicationId: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new RemoveApplicationActionRqst;
rqst.setApplicationid(applicationId)
rqst.setAction(action)
globular.ressourceService.removeApplicationAction(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddApplicationActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
export function DeleteApplication(
applicationId: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeleteApplicationRqst;
rqst.setApplicationid(applicationId)
globular.ressourceService.deleteApplication(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddApplicationActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
export function SaveApplication(
application: any,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new ReplaceOneRqst;
rqst.setCollection("Applications");
rqst.setDatabase("local_ressource");
rqst.setId("local_ressource");
rqst.setValue(JSON.stringify(application))
rqst.setQuery(`{"_id":"${application._id}"}`); // means all values.
globular.persistenceService.replaceOne(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: ReplaceOneRsp) => {
eventHub.publish("update_application_info_event", JSON.stringify(application), false);
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
///////////////////////////////////////////////////////////////////////////////////////////////
// Peers
///////////////////////////////////////////////////////////////////////////////////////////////
export function GetAllPeersInfo(
query: string,
callback: (peers: Peer[]) => void,
errorCallback: (err: any) => void
) {
let rqst = new GetPeersRqst();
rqst.setQuery(query)
let peers = new Array<Peer>();
let stream = globular.ressourceService.getPeers(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
});
// Get the stream and set event on it...
stream.on("data", (rsp: GetPeersRsp) => {
peers = peers.concat(rsp.getPeersList());
});
stream.on("status", status => {
if (status.code == 0) {
callback(peers);
} else {
errorCallback({ "message": status.details })
}
});
}
export function AppendActionToPeer(
id: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new AddPeerActionRqst;
rqst.setPeerid(id)
rqst.setAction(action)
globular.ressourceService.addPeerAction(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddPeerActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
export function RemoveActionFromPeer(
id: string,
action: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new RemovePeerActionRqst;
rqst.setPeerid(id)
rqst.setAction(action)
globular.ressourceService.removePeerAction(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddApplicationActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
export function DeletePeer(
peer: Peer,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new DeletePeerRqst;
rqst.setPeer(peer)
globular.ressourceService.deletePeer(rqst, { token: localStorage.getItem("user_token"), application: application, domain: domain })
.then((rsp: AddApplicationActionRsp) => {
callback()
})
.catch((err: any) => {
console.log(err)
errorCallback(err);
});
}
///////////////////////////////////////////////////////////////////////////////////////////////
// Services
///////////////////////////////////////////////////////////////////////////////////////////////
export function GetServiceDescriptor(serviceId: string, publisherId: string, callback: (descriptors: Array<ServiceDescriptor>) => void, errorCallback: (err: any) => void) {
let rqst = new GetServiceDescriptorRequest
rqst.setServiceid(serviceId);
rqst.setPublisherid(publisherId);
globular.servicesDicovery.getServiceDescriptor(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: GetServiceDescriptorResponse) => {
callback(rsp.getResultsList())
}).catch(
(err: any) => {
errorCallback(err);
}
);
}
export function GetServicesDescriptor(callback: (descriptors: Array<ServiceDescriptor>) => void, errorCallback: (err: any) => void) {
let rqst = new GetServicesDescriptorRequest
var stream = globular.servicesDicovery.getServicesDescriptor(rqst, {
application: application, domain: domain
});
let descriptors = new Array<ServiceDescriptor>()
stream.on("data", (rsp: GetServicesDescriptorResponse) => {
descriptors = descriptors.concat(rsp.getResultsList())
});
stream.on("status", function (status) {
if (status.code == 0) {
callback(descriptors);
} else {
errorCallback({ "message": status.details })
}
});
}
export function SetServicesDescriptor(descriptor: ServiceDescriptor, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new SetServiceDescriptorRequest
rqst.setDescriptor(descriptor);
globular.servicesDicovery.setServiceDescriptor(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
}).then(callback)
.catch(
(err: any) => {
errorCallback(err);
}
);
}
/**
* Find services by keywords.
* @param query
* @param callback
*/
export function findServices(
keywords: Array<string>,
callback: (results: Array<ServiceDescriptor>) => void,
errorCallback: (err: any) => void
) {
let rqst = new FindServicesDescriptorRequest();
rqst.setKeywordsList(keywords);
// Find services by keywords.
globular.servicesDicovery
.findServices(rqst, { application: application, domain: domain })
.then((rsp: FindServicesDescriptorResponse) => {
let results = rsp.getResultsList()
callback(results);
})
.catch(
(err: any) => {
errorCallback(err);
}
);
}
export function installService(
discoveryId: string,
serviceId: string,
publisherId: string,
version: string,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new InstallServiceRequest();
rqst.setPublisherid(publisherId);
rqst.setDicorveryid(discoveryId);
rqst.setServiceid(serviceId);
rqst.setVersion(version);
// Install the service.
globular.adminService
.installService(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: InstallServiceResponse) => {
readFullConfig(callback, errorCallback)
}).catch(
(err: any) => {
errorCallback(err);
}
);
}
/**
* Stop a service.
*/
export function stopService(serviceId: string, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new StopServiceRequest();
rqst.setServiceId(serviceId);
globular.adminService
.stopService(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then(() => {
callback();
})
.catch((err: any) => {
errorCallback(err);
});
}
/**
* Start a service
* @param serviceId The id of the service to start.
* @param callback The callback on success.
*/
export function startService(serviceId: string, callback: () => void, errorCallback: (err: any) => void) {
let rqst = new StartServiceRequest();
rqst.setServiceId(serviceId);
globular.adminService
.startService(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then(() => {
callback();
})
.catch((err: any) => {
errorCallback(err)
});
}
/**
* Here I will save the service configuration.
* @param service The configuration to save.
*/
export function saveService(
service: GlobularWebClient.IServiceConfig,
callback: (config: any) => void,
errorCallback: (err: any) => void
) {
let rqst = new SaveConfigRequest();
rqst.setConfig(JSON.stringify(service));
globular.adminService
.saveConfig(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: SaveConfigResponse) => {
// The service with updated values...
let service = JSON.parse(rsp.getResult());
callback(service);
})
.catch((err: any) => {
errorCallback(err)
});
}
export function uninstallService(
service: GlobularWebClient.IServiceConfig,
deletePermissions: boolean,
callback: () => void,
errorCallback: (err: any) => void
) {
let rqst = new UninstallServiceRequest
rqst.setServiceid(service.Id)
rqst.setPublisherid(service.PublisherId)
rqst.setVersion(service.Version)
rqst.setDeletepermissions(deletePermissions)
globular.adminService
.uninstallService(rqst, {
token: localStorage.getItem("user_token"),
application: application, domain: domain
})
.then((rsp: UninstallServiceResponse) => {
delete globular.config.Services[service.Id]
// The service with updated values...
callback();
})
.catch((err: any) => {
errorCallback(err)
});
}
/**
* Return the list of service bundles.
* @param callback
*/
export function GetServiceBundles(publisherId: string, serviceId: string, version: string, callback: (
bundles: Array<any>) => void,
errorCallback: (err: any)