Newer
Older
taehui / taehui-fe / src / app / www / media / validateTotem.ts
@Taehui Taehui on 17 Mar 1 KB 2024-03-18 오전 12:51
import DB from "@/app/www/system/DB";
import dayjs from "dayjs";
import { NextRequest } from "next/server";
import { getDatetime } from "taehui-ts/date";

export default function validateTotem(
  route: (
    req: NextRequest,
    params: { params: Record<string, string> },
  ) => Promise<Response>,
) {
  return async (
    req: NextRequest,
    params: { params: Record<string, string> },
  ) => {
    const totem = req.headers.get("totem");
    if (!totem) {
      return new Response(undefined, { status: 400 });
    }

    const data = await DB.ta(async (db) => {
      const data = await DB.getAvatarAsTotem(db, totem);

      if (data) {
        const datetime = getDatetime();
        if (dayjs(data.date).add(1, "hour").isAfter(datetime)) {
          await DB.setTotemDate(db, totem, datetime);
          return DB.getAvatarAsAvatarID(db, data.avatarID);
        } else {
          await DB.wipeTotem(db, totem);
        }
      }
    });

    if (data) {
      req.headers.set("avatarID", encodeURIComponent(data.avatarID));
      req.headers.set("avatarName", encodeURIComponent(data.avatarName));
      req.headers.set("level", data.level.toString());
      req.headers.set("fax", encodeURIComponent(data.fax));
      req.headers.set("avatarIntro", encodeURIComponent(data.avatarIntro));
      return route(req, params);
    } else {
      return new Response(undefined, { status: 401 });
    }
  };
}