backend: Refactor code to centralize cookie options handling in new utility function

This commit is contained in:
juancarmore 2025-03-13 15:03:02 +01:00
parent b7453f3271
commit e9882c19dc
3 changed files with 22 additions and 24 deletions

View File

@ -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) {

View File

@ -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
};
}
}

View File

@ -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
};
};