Files
easynode/server/app/controller/sessionLog.js
2026-03-15 22:15:58 +08:00

59 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const { KeyDB, SessionDB } = require('../utils/db-class')
const keyDB = new KeyDB().getInstance()
const sessionDB = new SessionDB().getInstance()
async function getLog({ res }) {
let sessionList = await sessionDB.findAsync({})
let { ipWhiteList } = await keyDB.findOneAsync({})
ipWhiteList = ipWhiteList.filter(ip => Boolean(ip))
sessionList = sessionList.map(item => {
// eslint-disable-next-line no-unused-vars
const { session, ...otherInfo } = item
return { ...otherInfo, id: item._id }
})
sessionList?.sort((a, b) => Number(b.create) - Number(a.create))
res.success({ data: { list: sessionList, ipWhiteList } })
}
const saveIpWhiteList = async ({ res, request }) => {
const { body: { ipWhiteList } } = request
if (!Array.isArray(ipWhiteList)) return res.fail({ msg: 'ip list输入非法' })
let { _id } = await keyDB.findOneAsync({})
await keyDB.updateAsync({ _id }, { $set: { ipWhiteList } })
global.ALLOWED_IPS = ipWhiteList
res.success({ msg: 'success' })
}
const removeSomeLoginRecords = async ({ res }) => {
const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000
const result = await sessionDB.removeAsync({ create: { $lt: sevenDaysAgo } }, { multi: true })
if (result === 0) return res.success({ msg: '没有符合条件的登录日志' })
res.success({ msg: `已成功移除 ${ result } 条登录日志` })
}
const revokeLoginSid = async (ctx) => {
const { res, request, cookies } = ctx
let { params: { id } } = request
const session = cookies.get('session')
const { _id: curId, deviceId: curDeviceId } = await sessionDB.findOneAsync({ session })
let result = await sessionDB.updateAsync({
$or: [
{ _id: id },
{ deviceId: id }
]
}, { $set: { revoked: true } })
if (id === curId || id === curDeviceId) {
logger.warn('注销当前登录凭证清除cookie')
ctx.cookies.set('session', '', { expires: new Date(0) })
}
if (!result || !result.numAffected) return res.fail({ msg: '注销凭证失败' })
res.success({ msg: '注销凭证成功' })
}
module.exports = {
getLog,
saveIpWhiteList,
removeSomeLoginRecords,
revokeLoginSid
}