mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-24 22:03:54 +00:00
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
import type { NextApiResponse, NextApiHandler, NextApiRequest } from 'next';
|
|
import NextCors from 'nextjs-cors';
|
|
import crypto from 'crypto';
|
|
import jwt from 'jsonwebtoken';
|
|
import { generateQA } from '../events/generateQA';
|
|
import { generateVector } from '../events/generateVector';
|
|
import { ERROR_ENUM } from '../errorCode';
|
|
|
|
/* 密码加密 */
|
|
export const hashPassword = (psw: string) => {
|
|
return crypto.createHash('sha256').update(psw).digest('hex');
|
|
};
|
|
|
|
/* 生成 token */
|
|
export const generateToken = (userId: string) => {
|
|
const key = process.env.TOKEN_KEY as string;
|
|
const token = jwt.sign(
|
|
{
|
|
userId,
|
|
exp: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7
|
|
},
|
|
key
|
|
);
|
|
return token;
|
|
};
|
|
// auth token
|
|
export const authJWT = (token: string) =>
|
|
new Promise<string>((resolve, reject) => {
|
|
const key = process.env.TOKEN_KEY as string;
|
|
|
|
jwt.verify(token, key, function (err, decoded: any) {
|
|
if (err || !decoded?.userId) {
|
|
reject(ERROR_ENUM.unAuthorization);
|
|
return;
|
|
}
|
|
resolve(decoded.userId);
|
|
});
|
|
});
|
|
/* set cookie */
|
|
export const setCookie = (res: NextApiResponse, token: string) => {
|
|
res.setHeader(
|
|
'Set-Cookie',
|
|
`token=${token}; Path=/; HttpOnly; Max-Age=604800; Samesite=None; Secure;`
|
|
);
|
|
};
|
|
/* clear cookie */
|
|
export const clearCookie = (res: NextApiResponse) => {
|
|
res.setHeader('Set-Cookie', 'token=; Path=/; Max-Age=0');
|
|
};
|
|
|
|
export function withNextCors(handler: NextApiHandler): NextApiHandler {
|
|
return async function nextApiHandlerWrappedWithNextCors(
|
|
req: NextApiRequest,
|
|
res: NextApiResponse
|
|
) {
|
|
const methods = ['GET', 'eHEAD', 'PUT', 'PATCH', 'POST', 'DELETE'];
|
|
const origin = req.headers.origin;
|
|
await NextCors(req, res, {
|
|
methods,
|
|
origin: origin,
|
|
optionsSuccessStatus: 200
|
|
});
|
|
|
|
return handler(req, res);
|
|
};
|
|
}
|
|
|
|
export const startQueue = () => {
|
|
for (let i = 0; i < global.systemEnv.qaMaxProcess; i++) {
|
|
generateQA();
|
|
}
|
|
for (let i = 0; i < global.systemEnv.vectorMaxProcess; i++) {
|
|
generateVector();
|
|
}
|
|
};
|
|
|
|
export const sseResponse = ({
|
|
res,
|
|
event,
|
|
data
|
|
}: {
|
|
res: NextApiResponse;
|
|
event?: string;
|
|
data: string;
|
|
}) => {
|
|
event && res.write(`event: ${event}\n`);
|
|
res.write(`data: ${data}\n\n`);
|
|
};
|