boredgame/src/lib/server/api/controllers/iam.controller.ts

42 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-07-21 19:05:48 +00:00
import { Hono } from 'hono';
2024-08-15 23:46:58 +00:00
import { inject, injectable } from 'tsyringe';
import { setCookie } from 'hono/cookie';
import type { HonoTypes } from '../types';
2024-07-21 19:05:48 +00:00
import { requireAuth } from "../middleware/auth.middleware";
import type { Controller } from '../interfaces/controller.interface';
2024-08-15 23:46:58 +00:00
import {IamService} from "$lib/server/api/services/iam.service";
import {LuciaProvider} from "$lib/server/api/providers";
2024-07-21 19:05:48 +00:00
@injectable()
export class IamController implements Controller {
controller = new Hono<HonoTypes>();
2024-07-21 19:05:48 +00:00
constructor(
2024-08-15 23:46:58 +00:00
@inject(IamService) private readonly iamService: IamService,
@inject(LuciaProvider) private lucia: LuciaProvider
) { }
routes() {
return this.controller
.get('/me', requireAuth, async (c) => {
const user = c.var.user;
return c.json({ user });
2024-08-15 23:46:58 +00:00
})
.post('/logout', requireAuth, async (c) => {
const sessionId = c.var.session.id;
await this.iamService.logout(sessionId);
const sessionCookie = this.lucia.createBlankSessionCookie();
setCookie(c, sessionCookie.name, sessionCookie.value, {
path: sessionCookie.attributes.path,
maxAge: sessionCookie.attributes.maxAge,
domain: sessionCookie.attributes.domain,
sameSite: sessionCookie.attributes.sameSite as any,
secure: sessionCookie.attributes.secure,
httpOnly: sessionCookie.attributes.httpOnly,
expires: sessionCookie.attributes.expires
});
return c.json({ status: 'success' });
});
}
}