@resk/core
Version:
An innovative TypeScript framework that empowers developers to build applications with a fully decorator-based architecture for efficient resource management. By combining the power of decorators with a resource-oriented design, DecorRes enhances code cla
1 lines • 4.75 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});var R=require('../i18n'),f=require('../session'),utils=require('../utils'),observable=require('../observable'),types=require('./types'),g=require('crypto-js'),A=require('../logger');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var R__default=/*#__PURE__*/_interopDefault(R);var f__default=/*#__PURE__*/_interopDefault(f);var g__default=/*#__PURE__*/_interopDefault(g);var A__default=/*#__PURE__*/_interopDefault(A);const U=g__default.default.AES.encrypt,N=g__default.default.AES.decrypt,I="auth-decrypted-key",m="user-session";class a{static get(e,t){if(utils.isNonNullString(t))return a.getData(e)[t]}static set(e,t,s){let i=a.getData(e);return utils.isNonNullString(t)?i[t]=s:utils.isObj(t)&&(i=t),f__default.default.set(a.getKey(e),i),i}static getKey(e){var t;return `auth-${utils.stringify((t=u.getSignedUser())==null?void 0:t.id)}-${e||""}`}static getData(e){if(!utils.isNonNullString(e))return {};const t=a.getKey(e);return Object.assign({},f__default.default.get(t))}static getToken(){var e;return (e=u.getSignedUser())==null?void 0:e.token}static setToken(e){u.setSignedUser(Object.assign({},u.getSignedUser(),{token:e}));}static getStorage(e){return {sessionName:e,get:t=>a.get(e,t),set:(t,s)=>a.set(e,t,s),getData:()=>a.getData(e),getKey:()=>a.getKey(e)}}}const r=class r{static _isMasterAdmin(e){return e=utils.isObj(e)?e:r.getSignedUser(),typeof r.isMasterAdmin=="function"?r.isMasterAdmin(e):false}static getSignedUser(){if(utils.isObj(r.localUserRef.current))return r.localUserRef.current;const e=f__default.default.get(m);if(e)try{const t=N(e,I);if(t&&typeof(t==null?void 0:t.toString)=="function"){const s=t.toString(g__default.default.enc.Utf8);return r.localUserRef.current=utils.JsonHelper.parse(s),r.localUserRef.current}}catch(t){A__default.default.log("getting local user ",t);}return null}static setSignedUser(e,t){r.localUserRef.current=e;const s=e;let i=null;try{utils.isObj(s)&&(s.authSessionCreatedAt=new Date().getTime()),i=s?U(JSON.stringify(s),I).toString():null;}catch(n){r.localUserRef.current=null,A__default.default.log(n," setting local user");}if(t){const n=utils.isObj(s)&&utils.isObj(i)?"SIGN_IN":"SIGN_OUT";r.events.trigger(n,s);}return f__default.default.set(m,i)}static signIn(e,t=true){return new Promise((s,i)=>{if(!utils.isObj(e)){i(new Error(R__default.default.t("auth.invalidSignInUser")));return}r.setSignedUser(e,t),s(e);})}static signOut(e=true){return new Promise((t,s)=>{r.setSignedUser(null,e),t();})}static isResourceActionTupleArray(e){return Array.isArray(e)&&e.length===2&&utils.isNonNullString(e[0])&&utils.isNonNullString(e[1])}static isResourceActionTupleObject(e){return !Array.isArray(e)&&typeof e=="object"&&utils.isObj(e)&&utils.isNonNullString(e.resourceName)&&utils.isNonNullString(e.action)}static isAllowed(e,t){if(t=Object.assign({},t||r.getSignedUser()),typeof e=="boolean")return e;if(r._isMasterAdmin(t)||!e)return true;if(typeof e=="function")return !!e(t);if(r.isResourceActionTupleObject(e)){if(r.checkUserPermission(t,e.resourceName,e.action))return true}else if(r.isResourceActionTupleArray(e)){if(r.checkUserPermission(t,e[0],e[1]))return true}else if(Array.isArray(e))for(let s in e){const i=e[s];if(r.isResourceActionTupleArray(i)){if(r.checkUserPermission(t,i[0],i[1]))return true}else if(r.isResourceActionTupleObject(i)&&r.checkUserPermission(t,i.resourceName,i.action))return true}return false}static checkUserPermission(e,t,s="read"){if(!utils.isObj(e)||!e)return false;if(utils.isObj(e.perms)&&e.perms&&r.checkPermission(e.perms,t,s))return true;if(Array.isArray(e==null?void 0:e.roles)){for(let i in e.roles){const n=e.roles[i];if(utils.isObj(n)&&utils.isObj(n.perms)&&r.checkPermission(n.perms,t,s))return true}return false}return false}static checkPermission(e,t,s="read"){if(e=Object.assign({},e),t=utils.isNonNullString(t)?t:"",!utils.isObj(e)||!t)return false;const i=String(t).trim().toLowerCase();s=utils.isNonNullString(s)?s:"read";let n=[];for(let l in e)if(String(l).toLowerCase().trim()===i&&Array.isArray(e[l])){n=e[l];break}if(!Array.isArray(n)||!n.length)return false;if(n.includes("all"))return true;for(let l in n)if(r.isAllowedForAction(n[l],s))return true;return false}static isAllowedForAction(e,t){return !utils.isNonNullString(t)||!utils.isNonNullString(e)?false:String(t).trim().toLowerCase()===String(e).trim().toLowerCase()}static get Session(){return a}};r.events=observable.observable({}),r.localUserRef={current:null};let u=r;exports.default=u;Object.keys(types).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return types[k]}})});