| import { User } from "@/types";
|
| import { NextResponse } from "next/server";
|
| import { cookies, headers } from "next/headers";
|
| import MY_TOKEN_KEY from "./get-cookie-name";
|
|
|
|
|
| type UserResponse = User & { token: string };
|
|
|
| export const isAuthenticated = async ():
|
| Promise<UserResponse | NextResponse<unknown> | undefined> => {
|
| const authHeaders = await headers();
|
| const cookieStore = await cookies();
|
| const token = cookieStore.get(MY_TOKEN_KEY())?.value
|
| ? `Bearer ${cookieStore.get(MY_TOKEN_KEY())?.value}`
|
| : authHeaders.get("Authorization");
|
|
|
| if (!token) {
|
| return NextResponse.json(
|
| {
|
| ok: false,
|
| message: "Wrong castle fam :(",
|
| },
|
| {
|
| status: 401,
|
| headers: {
|
| "Content-Type": "application/json",
|
| },
|
| }
|
| );
|
| }
|
|
|
| const user = await fetch("https://huggingface.co/api/whoami-v2", {
|
| headers: {
|
| Authorization: token,
|
| },
|
| method: "GET",
|
| })
|
| .then((res) => res.json())
|
| .catch(() => {
|
| return NextResponse.json(
|
| {
|
| ok: false,
|
| message: "Invalid token",
|
| },
|
| {
|
| status: 401,
|
| headers: {
|
| "Content-Type": "application/json",
|
| },
|
| }
|
| );
|
| });
|
| if (!user || !user.id) {
|
| return NextResponse.json(
|
| {
|
| ok: false,
|
| message: "Invalid token",
|
| },
|
| {
|
| status: 401,
|
| headers: {
|
| "Content-Type": "application/json",
|
| },
|
| }
|
| );
|
| }
|
|
|
| return {
|
| ...user,
|
| token: token.replace("Bearer ", ""),
|
| };
|
| };
|
|
|