import * as UI from './ui.js'; import { langPack } from './langpack.js'; export function loadModule(modPath) { import(modPath).then(function(mod) { mod.load(); }) } // errDict export function exec(requestType, method , data, onSuccess,noblank,onError,version) { if (typeof(requestType)=='object') { var ref=requestType; requestType=ref.requestType; method=ref.method; data=ref.data; onSuccess=ref.onSuccess; noblank=ref.noblank; onError=ref.onError; version=ref.version; var xoss=true; } else { var xoss=false; var ref={}; } if (noblank==undefined || noblank==false) { UI.blankerShow(); } if (requestType==undefined) { requestType="GET" } if (requestType=="GET") { data=undefined; } if (version==undefined) { version=2; } if (!isset(method)) { throw("Empty method not allowed"); } let headers={}; let token=localStorage.getItem("token"); if (token!==null) { headers.Authorization="Token "+token; } var transationStamp=(new Date()).getTime(); return $.ajax({ url: "/api/v"+String(version)+"/"+method, data: JSON.stringify(data), type: requestType, headers: headers, async: ref.async==undefined?true:ref.async, complete: function(data,textStatus,request) { if (data.getResponseHeader('X-Fox-Token-Renew') !=null) { session.updateToken(data.getResponseHeader('X-Fox-Token-Renew')); } let rcode=data.status; let rtext=data.statusText; let rdata=data.responseText; try { var jdata=JSON.parse(rdata); } catch(err) { console.log("Unable to parce reply",rdata); rcode=599; rtext="Reply parce failure"; jdata=undefined; } var rv={status: {success: (rcode>=200 && rcode <300), code: rcode, message: rtext} , data: jdata}; if (rv.status.success) { UI.blankerHide(); let ossrv=undefined; if (typeof(onSuccess) == 'function') { ossrv=onSuccess(rv, rtext); } if (xoss && (ossrv!==false)) { UI.showInfoDialog(langPack.core.iface.ok0); } } else { UI.blankerHide(); if (typeof(onError) == 'function') { onError(rv, rtext); } else { if (isset(jdata) && isset(jdata.error) && isset(jdata.error.xCode)) { var xCode=jdata.error.xCode; if (isset(ref.errDict) && isset(ref.errDict[xCode])) { rtext=ref.errDict[jdata.error.xCode]; } else { rtext=xCode+" "+rtext; } } else { var xCode=rcode; rtext=xCode+" "+rtext; } UI.showInfoDialog({message: rtext, title: langPack.core.iface.err0,dialogName: "apiExecStatus"+transationStamp, closeCallback: ref.onFinal}); } } }, dataType: "html" }); } export function getFileByToken(token, fileName) { let url='/api/v2/core/file/'+token; const a = document.createElement('a') a.href = url if (fileName != undefined) { a.download=fileName; } document.body.appendChild(a) a.click() document.body.removeChild(a); } export class settings { static async load() { if (sessionStorage.getItem("baseSettings")==undefined) { await exec("GET","meta/settings",{},function(json) { sessionStorage.setItem("baseSettings",JSON.stringify(json.data)); },true) } } static get(key) { let settings={}; let userSettings={}; if (sessionStorage.getItem("baseSettings")!=undefined) { settings=JSON.parse(sessionStorage.getItem("baseSettings")); } if (sessionStorage.getItem("userSettings")!=undefined) { settings=JSON.parse(sessionStorage.getItem("userSettings")); } if (userSettings["key"] != undefined) { return userSettings[key] } else { return settings[key] } } } export class auth { static async login(login, password, callback, meta) { if (login==undefined || password==undefined) { throw "Empty credentials not allowed here"; } let payload={}; if (meta!=undefined) { payload=meta; } payload.login=login; payload.password=password; payload.type="WEB"; API.exec("POST", "auth/login",payload, function onSuccess(json) { session.open(json.data) if (typeof(callback) == 'function') { callback(json.status.code); } },false,function(json) { if (typeof(callback) == 'function') { callback(json.status.code); } }); } } export class session { static getConfigItem(item) { let user=this.get("user"); if (user && user.config && user.config[item]) { return user.config[item]; } else { return settings.get(item); } } static getLang() { return this.getConfigItem("language"); } static close() { localStorage.removeItem("token"); localStorage.removeItem("tokenExpire"); sessionStorage.removeItem("session"); } static open(data) { localStorage.setItem("token",data.token); localStorage.setItem("tokenExpire",data.expire.stamp); sessionStorage.setItem("session",data.session); } static updateToken(token) { localStorage.setItem("token",token); } static get(key) { if (sessionStorage.getItem("session")==undefined) { return undefined; } return JSON.parse(sessionStorage.getItem("session"))[key]; } static getMenu() { if (session.get("menu") == undefined) { let menu={}; $.each(session.get("modules"),function(mkey,mod) { $.each(mod.menu,function(nkey,nmenu) { nmenu.xmodkey=mod.name; menu[mod.name+"_"+nkey]=nmenu; }); }); return menu; } else { return session.get("menu"); } } static checkAccess(rule, module) { let acls=this.get("acls"); if (module==undefined) { module="core"; } if (acls[module]!=undefined && Object.values(acls[module]).includes(rule)) { return true; } else if (acls[""]!=undefined && acls[""].includes(rule)) { return true; } else if (acls[""]!=undefined && acls[""].includes("isRoot")) { return true; } else { return false; } } static getModInstances() { if (session.get("modInstances") == undefined) { let instances={}; $.each(session.get("modules"),function(key,val) { instances[val.name]=val.instanceOf; }); session.set("modInstances",instances); return instances; } else { return session.get("modInstances"); } } static getModuleByInstance(instance) { return session.getModInstances()[instance]; } static set(key,val) { if (sessionStorage.getItem("session")==undefined) { var xsession={}; } else { var xsession=JSON.parse(sessionStorage.getItem("session")); } xsession[key]=val; sessionStorage.setItem("session",JSON.stringify(xsession)); } static async load(callback) { let token=localStorage.getItem("token"); if (token===null) { // session not found session.close(); console.log("Session token not found"); return; } let stamp=new Date(); if ((sessionStorage.getItem("session")!=undefined) && (((stamp.getTime()/1000)-this.get("updated"))