1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coderd-repos-eva

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
cache.js 3.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Caesar Отправлено 3 лет назад e492eae
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')
}
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/coderd-repos-eva.git
git@gitlife.ru:oschina-mirror/coderd-repos-eva.git
oschina-mirror
coderd-repos-eva
coderd-repos-eva
master