middleware.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { getServerSideConfig } from "./app/config/server";
  3. import md5 from "spark-md5";
  4. export const config = {
  5. matcher: ["/api/openai", "/api/chat-stream"],
  6. };
  7. const serverConfig = getServerSideConfig();
  8. export function middleware(req: NextRequest) {
  9. const accessCode = req.headers.get("access-code");
  10. const token = req.headers.get("token");
  11. const hashedCode = md5.hash(accessCode ?? "").trim();
  12. console.log("[Auth] allowed hashed codes: ", [...serverConfig.codes]);
  13. console.log("[Auth] got access code:", accessCode);
  14. console.log("[Auth] hashed access code:", hashedCode);
  15. if (serverConfig.needCode && !serverConfig.codes.has(hashedCode) && !token) {
  16. return NextResponse.json(
  17. {
  18. error: true,
  19. needAccessCode: true,
  20. msg: "Please go settings page and fill your access code.",
  21. },
  22. {
  23. status: 401,
  24. },
  25. );
  26. }
  27. // inject api key
  28. if (!token) {
  29. const apiKey = serverConfig.apiKey;
  30. if (apiKey) {
  31. console.log("[Auth] set system token");
  32. req.headers.set("token", apiKey);
  33. } else {
  34. return NextResponse.json(
  35. {
  36. error: true,
  37. msg: "Empty Api Key",
  38. },
  39. {
  40. status: 401,
  41. },
  42. );
  43. }
  44. } else {
  45. console.log("[Auth] set user token");
  46. }
  47. return NextResponse.next({
  48. request: {
  49. headers: req.headers,
  50. },
  51. });
  52. }