Files
code-center/src/modules/auth.ts
2026-01-17 23:11:08 +08:00

74 lines
2.0 KiB
TypeScript

import { User } from '@/models/user.ts';
import http from 'http';
import * as cookie from '@kevisual/router/src/server/cookie.ts';
import { logger } from './logger.ts';
export const error = (msg: string, code = 500) => {
return JSON.stringify({ code, message: msg });
};
export const getTokenFromRequest = (req: http.IncomingMessage) => {
let token = (req.headers?.['authorization'] as string) || (req.headers?.['Authorization'] as string) || '';
const url = new URL(req.url || '', 'http://localhost');
if (!token) {
token = url.searchParams.get('token') || '';
}
if (!token) {
const parsedCookies = cookie.parse(req.headers.cookie || '');
token = parsedCookies.token || '';
}
if (token) {
token = token.replace('Bearer ', '');
}
return token;
}
// export const checkAuth = async (req: http.IncomingMessage, res: http.ServerResponse) => {
// const token = getTokenFromRequest(req);
// const resNoPermission = () => {
// res.statusCode = 401;
// res.end(error('Invalid authorization'));
// return { tokenUser: null, token: null };
// };
// if (!token) {
// return resNoPermission();
// }
// let tokenUser;
// try {
// tokenUser = await User.verifyToken(token);
// } catch (e) {
// console.log('checkAuth error', e);
// res.statusCode = 401;
// res.end(error('Invalid token'));
// return { tokenUser: null, token: null };
// }
// return { tokenUser, token };
// };
export const getLoginUserByToken = async (token: string) => {
if (token) {
token = token.replace('Bearer ', '');
}
if (!token) {
return null;
}
let tokenUser;
try {
tokenUser = await User.verifyToken(token);
return { tokenUser, token };
} catch (e) {
return null;
}
}
export const getLoginUser = async (req: http.IncomingMessage) => {
let token = getTokenFromRequest(req);
if (!token) {
return null;
}
let tokenUser;
logger.debug('getLoginUser', token);
try {
tokenUser = await User.verifyToken(token);
return { tokenUser, token };
} catch (e) {
return null;
}
};