¶Ô±ÈÐÂÎļþ |
| | |
| | | import md5 from 'js-md5' |
| | | const buildCacheImpl = impl => { |
| | | return { |
| | | __check () { |
| | | if (!impl) { |
| | | throw new Error('missing cache impl') |
| | | } |
| | | }, |
| | | __get (key) { |
| | | this.__check(key) |
| | | if (key == null) { |
| | | return null |
| | | } |
| | | const value = impl.getItem(key) |
| | | if (value == null) { |
| | | return null |
| | | } |
| | | try { |
| | | const valueObj = JSON.parse(value) |
| | | // å·²è¿æå¤ç |
| | | if (valueObj.expiredTime != null && new Date().getTime() > valueObj.expiredTime) { |
| | | this.remove(key) |
| | | return null |
| | | } |
| | | return valueObj |
| | | } catch (e) { |
| | | return { value } |
| | | } |
| | | }, |
| | | /** |
| | | * åå
¥ç¼å |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param timeout è¶
æ¶æ¶é´ï¼å使¯«ç§ï¼-1表示ä¸è¶
æ¶ |
| | | */ |
| | | set (key, value, timeout = -1) { |
| | | if (key == null) { |
| | | return |
| | | } |
| | | if (value == null) { |
| | | return |
| | | } |
| | | let type = typeof value |
| | | if (value instanceof Date) { |
| | | type = 'date' |
| | | } |
| | | let actualValue = value |
| | | if (type === 'object') { |
| | | actualValue = JSON.stringify(value) |
| | | } |
| | | if (type === 'date') { |
| | | actualValue = value.getTime() |
| | | } |
| | | const birthtime = new Date().getTime() |
| | | const valueObj = { |
| | | type, |
| | | value: actualValue, |
| | | birthtime, |
| | | expiredTime: timeout === -1 ? null : birthtime + timeout |
| | | } |
| | | impl.setItem(key, JSON.stringify(valueObj)) |
| | | }, |
| | | /** |
| | | * è·åç¼åå¼ |
| | | * |
| | | * @param key é® |
| | | * @returns {SVGPoint | SVGNumber | string | SVGTransform | SVGLength | SVGPathSeg | T|*|any|{value}|null|any} |
| | | */ |
| | | get (key) { |
| | | const valueObj = this.__get(key) |
| | | if (valueObj == null) { |
| | | return null |
| | | } |
| | | if (typeof valueObj !== 'object') { |
| | | return valueObj |
| | | } |
| | | if (valueObj.value == null) { |
| | | return null |
| | | } |
| | | if (valueObj.type === 'date') { |
| | | return new Date(valueObj.value) |
| | | } |
| | | if (valueObj.type === 'object') { |
| | | return JSON.parse(valueObj.value) |
| | | } |
| | | return valueObj.value |
| | | }, |
| | | /** |
| | | * å é¤ç¼åå¼ |
| | | * |
| | | * @param key é® |
| | | */ |
| | | remove (key) { |
| | | impl.removeItem(key) |
| | | } |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | /** |
| | | * é»è®¤ä½¿ç¨localStorageæ¥è®°å½ç¼å |
| | | */ |
| | | ...buildCacheImpl(window.localStorage), |
| | | /** |
| | | * ä¼è¯çº§ç¼å |
| | | */ |
| | | session: buildCacheImpl(window.sessionStorage), |
| | | /** |
| | | * æ¬å°ç¼å |
| | | */ |
| | | local: buildCacheImpl(window.localStorage), |
| | | /** |
| | | * 2FAç¼å |
| | | */ |
| | | twoFA: { |
| | | ...buildCacheImpl(window.sessionStorage), |
| | | /** |
| | | * 设置认è¯å¯ç |
| | | * |
| | | * @param value å¯ç |
| | | * @param rememberPwd æ¯å¦è®°ä½å¯ç |
| | | */ |
| | | setPassword (value, rememberPwd = false) { |
| | | value = md5(value) |
| | | // è®°ä½å¯ç æ¶ï¼é»è®¤è®°ä½5åé |
| | | const timeout = 5 * 60 * 1000 |
| | | this.set('eva-2fa-password', value, rememberPwd ? timeout : -1) |
| | | }, |
| | | /** |
| | | * è·å认è¯å¯ç |
| | | * @returns {*} |
| | | */ |
| | | getPassword () { |
| | | return this.get('eva-2fa-password') |
| | | }, |
| | | /** |
| | | * å é¤è®¤è¯å¯ç |
| | | */ |
| | | removePassword () { |
| | | this.remove('eva-2fa-password') |
| | | } |
| | | } |
| | | } |