Spaces:
Running
Running
File size: 1,640 Bytes
13ae717 09515ea 13ae717 09515ea 13ae717 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import { User } from "@/types";
import { NextResponse } from "next/server";
import { cookies, headers } from "next/headers";
import MY_TOKEN_KEY from "./get-cookie-name";
// UserResponse = type User & { token: string };
type UserResponse = User & { token: string };
export const isAuthenticated = async (): // req: NextRequest
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 ", ""),
};
};
|