dvc890's picture
[feat]add project files
41af422
import { createHash } from 'crypto'
import * as dotenv from 'dotenv'
import { getCacheConfig } from '../storage/config'
dotenv.config()
export function md5(input: string) {
input = input + process.env.PASSWORD_MD5_SALT
const md5 = createHash('md5')
md5.update(input)
return md5.digest('hex')
}
// 可以换 aes 等方式
export async function getUserVerifyUrl(username: string) {
const sign = getUserVerify(username)
const config = await getCacheConfig()
return `${config.siteConfig.siteDomain}/#/chat/?verifytoken=${sign}`
}
function getUserVerify(username: string) {
return getVerify(username, '')
}
function getVerify(username: string, key: string) {
const expired = new Date().getTime() + (12 * 60 * 60 * 1000)
const sign = `${username}${key}-${expired}`
return `${sign}-${md5(sign)}`
}
function checkVerify(verify: string) {
const vs = verify.split('-')
const sign = vs[vs.length - 1]
const expired = vs[vs.length - 2]
vs.splice(vs.length - 2, 2)
const prefix = vs.join('-')
// 简单点没校验有效期
if (sign === md5(`${prefix}-${expired}`))
return prefix.split('|')[0]
throw new Error('Verify failed')
}
export function checkUserVerify(verify: string) {
return checkVerify(verify)
}
// 可以换 aes 等方式
export async function getUserVerifyUrlAdmin(username: string) {
const sign = getUserVerifyAdmin(username)
const config = await getCacheConfig()
return `${config.siteConfig.siteDomain}/#/chat/?verifytokenadmin=${sign}`
}
function getUserVerifyAdmin(username: string) {
return getVerify(username, `|${process.env.ROOT_USER}`)
}
export function checkUserVerifyAdmin(verify: string) {
return checkVerify(verify)
}
export async function getUserResetPasswordUrl(username: string) {
const sign = getUserResetPassword(username)
const config = await getCacheConfig()
return `${config.siteConfig.siteDomain}/#/chat/?verifyresetpassword=${sign}`
}
function getUserResetPassword(username: string) {
return getVerify(username, '|rp')
}
export function checkUserResetPassword(verify: string, username: string) {
const name = checkVerify(verify)
if (name === username)
return name
throw new Error('Verify failed')
}