2026-01-20 09:02:26 -06:00

56 lines
1.5 KiB
TypeScript
Executable File

// routes/auth/logout.ts
import { deleteCookie, getCookies } from "$std/http/cookie.ts";
import { getUserTokens } from "../../services/userService.ts";
import { define } from "../../utils.ts";
const redirectHome = Deno.env.get("REDIRECT_HOME")!;
export const handler = define.handlers({
async GET(ctx) {
const sessionData = ctx.state.data;
const userId = sessionData?.user_id;
if (userId) {
const tokens = await getUserTokens(userId);
if (tokens && tokens.access_token) {
try {
const response = await fetch(
"https://graph.microsoft.com/v1.0/me/revokeSignInSessions",
{
method: "POST",
headers: {
"Authorization": `Bearer ${tokens.access_token}`,
},
},
);
//const data = await response.text();
} catch (e) {
console.error("Failed to revoke Graph sessions:", e);
}
}
}
const response = new Response("", {
status: 302,
headers: {
"Location": "/",
},
});
deleteCookie(response.headers, "xx_state_id", { path: "/" });
deleteCookie(response.headers, "session", { path: "/" });
return response;
},
async POST(ctx) {
const logoutUrl =
`https://cyberhybridhub.ciamlogin.com/6ce6a7c9-9909-47b6-b459-bf607fa4d198/oauth2/v2.0/logout?post_logout_redirect_uri=${redirectHome}/auth/logout`;
return new Response("", {
status: 302,
headers: {
"Location": logoutUrl,
},
});
},
});