Logout API and implementation

This commit is contained in:
2024-08-12 16:00:29 +02:00
parent 1a60ecb48a
commit 1bd323bdd6
4 changed files with 68 additions and 13 deletions

View File

@@ -1,8 +1,9 @@
import { Schema as S } from "@effect/schema";
import { SessionId } from "common";
import { Login, Me } from "common/api";
import { Login, Logout, Me } from "common/api";
import { AccessLog, SessionData } from "common/db";
import { DateTime, Duration, Either as E, Effect, Match, Option as O, pipe } from "effect";
import { constant } from "effect/Function";
import { Api } from "make-api";
import { brotliCompress } from "node:zlib";
import { RequestError } from "./RequestError";
@@ -170,6 +171,26 @@ export const app = pipe(
}
});
}
} else if (yield* match(Logout)) {
const sessionId = yield* pipe(
getCookie("sessionId"),
Effect.flatten,
Effect.flatMap(S.decodeUnknown(SessionId)),
Effect.catchAll(constant(Effect.succeed(null))),
);
if (sessionId !== null) {
db.deleteSession(sessionId);
}
const setCookie = `sessionId=; Expires=${new Date(0).toUTCString()}; HttpOnly; SameSite=None; Secure`;
return new Response(null, {
status: 204,
headers: {
"Set-Cookie": setCookie,
},
});
} else if (yield* match(Me)) {
const sessionId = yield* pipe(