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