44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import * as React from "react";
|
|
|
|
import { redirect } from "next/navigation";
|
|
import { cookies } from "next/headers";
|
|
|
|
import { AuthorizeContainer } from "@/components/core/authorize";
|
|
|
|
export interface AuthorizeParams {
|
|
client_id?: string,
|
|
response_type?: string,
|
|
redirect_uri?: string,
|
|
scope?: string,
|
|
state?: string,
|
|
}
|
|
|
|
export default async function AuthorizePage({ searchParams }: { searchParams: Promise<AuthorizeParams> }) {
|
|
const params = await searchParams;
|
|
|
|
const cookieStore = await cookies();
|
|
const token = cookieStore.get("token");
|
|
|
|
|
|
const queryString = new URLSearchParams(
|
|
Object.entries(params).filter(([, v]) => v !== undefined) as [string, string][]
|
|
).toString();
|
|
|
|
if (!token) {
|
|
redirect(`/?returnTo=/authorize?${queryString}`);
|
|
}
|
|
|
|
return (
|
|
<div className="flex justify-center items-center h-screen">
|
|
<AuthorizeContainer
|
|
applicationName="SecNex"
|
|
applicationUrl="https://secnex.io"
|
|
client_id={params.client_id || ""}
|
|
redirect_uri={params.redirect_uri || ""}
|
|
response_type={params.response_type || "code"}
|
|
scope={params.scope || "profile email"}
|
|
returnTo={`/authorize?${queryString}`}
|
|
/>
|
|
</div>
|
|
)
|
|
} |