3v324v23's picture
初始化:2FA/TOTP 全闭环(中文)
1034ef4
Raw
History Blame Contribute Delete
823 Bytes
import type { Request, Response } from 'express'
export type ApiOk<T> = { ok: true; data: T }
export type ApiErr = { ok: false; error: string }
export type ApiResponse<T> = ApiOk<T> | ApiErr
export function ok<T>(res: Response, data: T, status = 200) {
res.status(status).json({ ok: true, data } satisfies ApiOk<T>)
}
export function err(res: Response, message: string, status = 400) {
res.status(status).json({ ok: false, error: message } satisfies ApiErr)
}
export function getClientIp(req: Request) {
const xff = req.headers['x-forwarded-for']
if (typeof xff === 'string' && xff.length > 0) return xff.split(',')[0]?.trim() || null
return req.socket.remoteAddress || null
}
export function getUserAgent(req: Request) {
const ua = req.headers['user-agent']
return typeof ua === 'string' ? ua : null
}