backend: Refactor code to centralize cookie options handling in new utility function
This commit is contained in:
parent
b7453f3271
commit
e9882c19dc
@ -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) {
|
||||
|
||||
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
12
backend/src/utils/cookie-utils.ts
Normal file
12
backend/src/utils/cookie-utils.ts
Normal 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
|
||||
};
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user