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 { LoggerService } from '../services/logger.service.js';
|
||||||
import {
|
import {
|
||||||
ACCESS_TOKEN_COOKIE_NAME,
|
ACCESS_TOKEN_COOKIE_NAME,
|
||||||
|
MEET_ACCESS_TOKEN_EXPIRATION,
|
||||||
MEET_ADMIN_USER,
|
MEET_ADMIN_USER,
|
||||||
MEET_API_BASE_PATH_V1,
|
MEET_API_BASE_PATH_V1,
|
||||||
|
MEET_REFRESH_TOKEN_EXPIRATION,
|
||||||
REFRESH_TOKEN_COOKIE_NAME
|
REFRESH_TOKEN_COOKIE_NAME
|
||||||
} from '../environment.js';
|
} from '../environment.js';
|
||||||
import { ClaimGrants } from 'livekit-server-sdk';
|
import { ClaimGrants } from 'livekit-server-sdk';
|
||||||
|
import { getCookieOptions } from '../utils/cookie-utils.js';
|
||||||
|
|
||||||
export const login = (req: Request, res: Response) => {
|
export const login = (req: Request, res: Response) => {
|
||||||
const logger = container.get(LoggerService);
|
const logger = container.get(LoggerService);
|
||||||
@ -53,8 +56,12 @@ export const adminLogin = async (req: Request, res: Response) => {
|
|||||||
const tokenService = container.get(TokenService);
|
const tokenService = container.get(TokenService);
|
||||||
const accessToken = await tokenService.generateAccessToken(username);
|
const accessToken = await tokenService.generateAccessToken(username);
|
||||||
const refreshToken = await tokenService.generateRefreshToken(username);
|
const refreshToken = await tokenService.generateRefreshToken(username);
|
||||||
res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, tokenService.getAccessTokenCookieOptions());
|
res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION));
|
||||||
res.cookie(REFRESH_TOKEN_COOKIE_NAME, refreshToken, tokenService.getRefreshTokenCookieOptions());
|
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}`);
|
logger.info(`Admin login succeeded for username: ${username}`);
|
||||||
return res.status(200).json({ message: 'Admin login succeeded' });
|
return res.status(200).json({ message: 'Admin login succeeded' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -98,7 +105,7 @@ export const adminRefresh = async (req: Request, res: Response) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const accessToken = await tokenService.generateAccessToken(MEET_ADMIN_USER);
|
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}`);
|
logger.info(`Admin refresh succeeded for username: ${MEET_ADMIN_USER}`);
|
||||||
return res.status(200).json({ message: 'Admin refresh succeeded' });
|
return res.status(200).json({ message: 'Admin refresh succeeded' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import {
|
import {
|
||||||
MEET_ACCESS_TOKEN_EXPIRATION,
|
MEET_ACCESS_TOKEN_EXPIRATION,
|
||||||
MEET_REFRESH_TOKEN_EXPIRATION,
|
MEET_REFRESH_TOKEN_EXPIRATION,
|
||||||
MEET_API_BASE_PATH_V1,
|
|
||||||
LIVEKIT_API_KEY,
|
LIVEKIT_API_KEY,
|
||||||
LIVEKIT_API_SECRET
|
LIVEKIT_API_SECRET
|
||||||
} from '../environment.js';
|
} from '../environment.js';
|
||||||
import { injectable } from '../config/dependency-injector.config.js';
|
import { injectable } from '../config/dependency-injector.config.js';
|
||||||
import { CookieOptions } from 'express';
|
|
||||||
import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier } from 'livekit-server-sdk';
|
import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier } from 'livekit-server-sdk';
|
||||||
import ms, { StringValue } from 'ms';
|
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export class TokenService {
|
export class TokenService {
|
||||||
@ -36,22 +33,4 @@ export class TokenService {
|
|||||||
const verifyer = new TokenVerifier(LIVEKIT_API_KEY, LIVEKIT_API_SECRET);
|
const verifyer = new TokenVerifier(LIVEKIT_API_KEY, LIVEKIT_API_SECRET);
|
||||||
return await verifyer.verify(token);
|
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