56 lines
1.5 KiB
TypeScript
Executable File
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,
|
|
},
|
|
});
|
|
},
|
|
});
|