draupnir4all-web

git clone git://archive.git.mtrnord.blog/MTRNord/draupnir4all-web.git
Log | Files | Refs | README | LICENSE

route.ts (1588B)


      1 import { User } from "@/lib/auth";
      2 import { cookies } from "next/headers";
      3 import { NextResponse } from "next/server";
      4 
      5 export async function POST(req: Request) {
      6     const { openidToken, homeserverUrl, matrixId, openidExpiration } = await req.json();
      7 
      8     if (!openidToken) {
      9         return NextResponse.json({ error: "OpenID token is required" }, { status: 400 });
     10     }
     11     if (!homeserverUrl) {
     12         return NextResponse.json({ error: "Homeserver URL is required" }, { status: 400 });
     13     }
     14     if (!matrixId) {
     15         return NextResponse.json({ error: "Matrix ID is required" }, { status: 400 });
     16     }
     17     if (!openidExpiration) {
     18         return NextResponse.json({ error: "OpenID expiration is required" }, { status: 400 });
     19     }
     20 
     21     const user: User = {
     22         matrixId: matrixId,
     23         token: openidToken,
     24         homeserverUrl: homeserverUrl,
     25         openidExpiration: openidExpiration,
     26     };
     27 
     28     const response = NextResponse.json(user);
     29     response.cookies.set("d4all_session", JSON.stringify(user), { httpOnly: true, path: "/" });
     30     return response;
     31 }
     32 
     33 export async function GET() {
     34     const session = (await cookies()).get("d4all_session")?.value;
     35 
     36     if (!session) {
     37         return NextResponse.json({ error: "No active session" }, { status: 401 });
     38     }
     39 
     40     return NextResponse.json(JSON.parse(session));
     41 }
     42 
     43 export async function DELETE(req: Request) {
     44     const url = new URL(req.url);
     45     const response = NextResponse.redirect(url.origin);
     46     response.cookies.set("d4all_session", "", { httpOnly: true, path: "/", maxAge: 0 });
     47 
     48     return response;
     49 }