| 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 ", ""), |
| }; |
| }; |
|
|