Login page design

This commit is contained in:
2024-08-04 13:43:09 +02:00
parent 903168a565
commit c30d10e67a
16 changed files with 408 additions and 78 deletions

View File

@@ -4,7 +4,8 @@ import { RequestError } from "./RequestError";
import { Database } from "./services/database";
import { Request } from "./services/request";
import { brotliCompress } from "node:zlib";
import { AccessLog } from "common";
import { AccessLog } from "common/db";
import { LoginRequest, LoginResponse } from "common/api";
const match = (method: string, ...pattern: readonly string[]) => Effect.gen(function* () {
@@ -82,10 +83,7 @@ export const app = pipe(
if (yield* match("POST", "login")) {
const body = yield* requestJson(S.Struct({
username: S.NonEmptyString,
password: S.NonEmptyString,
}));
const body = yield* requestJson(LoginRequest);
const user = yield* pipe(
db.getUserByUsername(body.username),
@@ -99,12 +97,17 @@ export const app = pipe(
const sessionId = yield* db.createSession(user.userId);
const responseData = {
const responseData = LoginResponse.make({
userId: user.userId,
username: user.username,
admin: user.admin,
};
const responseJson = JSON.stringify(responseData);
});
const responseJson = yield* pipe(
responseData,
S.encode(LoginResponse),
Effect.map(JSON.stringify),
);
const responseArray = new TextEncoder().encode(responseJson);
const expiresAt = DateTime.addDuration(yield* DateTime.now, Duration.days(7));