| ¶Ô±ÈÐÂÎļþ | 
 |  |  | 
 |  |  | 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') | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } |