diff --git a/backend/src/controllers/auth.controller.ts b/backend/src/controllers/auth.controller.ts index 6b38cad..81749d7 100644 --- a/backend/src/controllers/auth.controller.ts +++ b/backend/src/controllers/auth.controller.ts @@ -5,11 +5,14 @@ import { TokenService } from '../services/token.service.js'; import { LoggerService } from '../services/logger.service.js'; import { ACCESS_TOKEN_COOKIE_NAME, + MEET_ACCESS_TOKEN_EXPIRATION, MEET_ADMIN_USER, MEET_API_BASE_PATH_V1, + MEET_REFRESH_TOKEN_EXPIRATION, REFRESH_TOKEN_COOKIE_NAME } from '../environment.js'; import { ClaimGrants } from 'livekit-server-sdk'; +import { getCookieOptions } from '../utils/cookie-utils.js'; export const login = (req: Request, res: Response) => { const logger = container.get(LoggerService); @@ -53,8 +56,12 @@ export const adminLogin = async (req: Request, res: Response) => { const tokenService = container.get(TokenService); const accessToken = await tokenService.generateAccessToken(username); const refreshToken = await tokenService.generateRefreshToken(username); - res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, tokenService.getAccessTokenCookieOptions()); - res.cookie(REFRESH_TOKEN_COOKIE_NAME, refreshToken, tokenService.getRefreshTokenCookieOptions()); + res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)); + res.cookie( + REFRESH_TOKEN_COOKIE_NAME, + refreshToken, + getCookieOptions(`${MEET_API_BASE_PATH_V1}/auth/admin`, MEET_REFRESH_TOKEN_EXPIRATION) + ); logger.info(`Admin login succeeded for username: ${username}`); return res.status(200).json({ message: 'Admin login succeeded' }); } catch (error) { @@ -98,7 +105,7 @@ export const adminRefresh = async (req: Request, res: Response) => { try { const accessToken = await tokenService.generateAccessToken(MEET_ADMIN_USER); - res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, tokenService.getAccessTokenCookieOptions()); + res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)); logger.info(`Admin refresh succeeded for username: ${MEET_ADMIN_USER}`); return res.status(200).json({ message: 'Admin refresh succeeded' }); } catch (error) { diff --git a/backend/src/services/token.service.ts b/backend/src/services/token.service.ts index c098b69..f29f94c 100644 --- a/backend/src/services/token.service.ts +++ b/backend/src/services/token.service.ts @@ -1,14 +1,11 @@ import { MEET_ACCESS_TOKEN_EXPIRATION, MEET_REFRESH_TOKEN_EXPIRATION, - MEET_API_BASE_PATH_V1, LIVEKIT_API_KEY, LIVEKIT_API_SECRET } from '../environment.js'; import { injectable } from '../config/dependency-injector.config.js'; -import { CookieOptions } from 'express'; import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier } from 'livekit-server-sdk'; -import ms, { StringValue } from 'ms'; @injectable() export class TokenService { @@ -36,22 +33,4 @@ export class TokenService { const verifyer = new TokenVerifier(LIVEKIT_API_KEY, LIVEKIT_API_SECRET); return await verifyer.verify(token); } - - getAccessTokenCookieOptions(): CookieOptions { - return this.getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION); - } - - getRefreshTokenCookieOptions(): CookieOptions { - return this.getCookieOptions(`${MEET_API_BASE_PATH_V1}/auth/admin`, MEET_REFRESH_TOKEN_EXPIRATION); - } - - private getCookieOptions(path: string, expiration: string): CookieOptions { - return { - httpOnly: true, - secure: process.env.NODE_ENV === 'production', - sameSite: 'strict', - maxAge: ms(expiration as StringValue), - path - }; - } } diff --git a/backend/src/utils/cookie-utils.ts b/backend/src/utils/cookie-utils.ts new file mode 100644 index 0000000..bf49c63 --- /dev/null +++ b/backend/src/utils/cookie-utils.ts @@ -0,0 +1,12 @@ +import { CookieOptions } from 'express'; +import ms, { StringValue } from 'ms'; + +export const getCookieOptions = (path: string, expiration: string): CookieOptions => { + return { + httpOnly: true, + secure: process.env.NODE_ENV === 'production', + sameSite: 'strict', + maxAge: ms(expiration as StringValue), + path + }; +};