UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

47 lines (46 loc) 1.66 kB
import { Session } from "studiocms:auth/lib"; import { StudioCMSRoutes } from "studiocms:lib"; import { AuthSessionCookieName } from "../../../../consts.js"; import { AllResponse, createEffectAPIRoutes, createJsonResponse, Effect, genLogger, OptionsResponse } from "../../../../effect.js"; const { POST, OPTIONS, ALL } = createEffectAPIRoutes( { POST: (ctx) => genLogger("studiocms/routes/api/auth/logout/POST")(function* () { const { validateSessionToken, deleteSessionTokenCookie, invalidateSession } = yield* Session; const { cookies, redirect } = ctx; const sessionToken = cookies.get(AuthSessionCookieName)?.value ?? null; if (!sessionToken) return redirect(StudioCMSRoutes.authLinks.loginURL); const { session, user } = yield* validateSessionToken(sessionToken); if (session === null) { yield* deleteSessionTokenCookie(ctx); return redirect(StudioCMSRoutes.authLinks.loginURL); } if (!user || user === null) { yield* deleteSessionTokenCookie(ctx); return redirect(StudioCMSRoutes.authLinks.loginURL); } yield* Effect.all([invalidateSession(session.id), deleteSessionTokenCookie(ctx)]); return redirect(StudioCMSRoutes.mainLinks.baseSiteURL); }), OPTIONS: () => Effect.try(() => OptionsResponse({ allowedMethods: ["POST"] })), ALL: () => Effect.try(() => AllResponse()) }, { cors: { methods: ["POST", "OPTIONS"] }, onError: (error) => { console.error("API Error:", error); return createJsonResponse({ error: "Internal Server Error" }, { status: 500 }); } } ); export { ALL, OPTIONS, POST };