chore: offload retrieval of environment variables from jwt.ts to env.ts

This commit is contained in:
2026-01-02 22:57:03 +01:00
parent f86630c51e
commit 4bf39c7fdf
5 changed files with 48 additions and 47 deletions

View File

@@ -1,10 +1,8 @@
// Heavily based on:
// https://github.com/TomDoesTech/REST-API-Tutorial-Updated/blob/7b5f040e1acd94d267df585516b33ee7e3b75f70/src/utils/jwt.utils.ts
import * as dotenv from 'dotenv';
dotenv.config({ quiet: true });
import jwt from 'jsonwebtoken';
import { DEFAULT_TOKEN_LIFETIME } from '../schemas/authSchema';
import * as env from './env';
type JwtStatus = {
valid: boolean;
@@ -12,40 +10,6 @@ type JwtStatus = {
decoded: string | jwt.JwtPayload | null;
};
/**
* Get the environmental string from .env.
* Supports rewriting names to UPPER_SNAKE_CASE if isGlobal is set.
*
* @param {string} key The key
* @param {boolean} [isGlobal=true] Indicates if global
* @return {(string|undefined)} The environment string.
*/
export function getEnvString(
key: string,
isGlobal: boolean = true
): string | undefined {
let keyName: string = '';
if (isGlobal) {
// Global values are DECLARED_LIKE_THIS=...
for (let i: number = 0; i < key.length; i++) {
if (key[i].toLowerCase() === key[i]) {
// If is lowercase, skip.
keyName += key[i];
} else {
// If is uppercase, convert to snake case.
keyName += `_${key[i].toLowerCase()}`;
}
}
keyName = keyName.toUpperCase();
} else {
// Non-global keys are parsed as passed
keyName = key;
}
return process.env[keyName];
}
/**
* Sign a JWT containing sub (number), role (number, 0/1), iat/exp (unix timestamp) claims.
*
@@ -66,7 +30,7 @@ export function signJwt(
// 'base64'
// ).toString('utf8');
const secret: string = getEnvString(keyName, true)!;
const secret: string = env.getString(keyName, true)!;
// Use the default expiration time of 24 hours.
if (options === undefined)
@@ -97,7 +61,7 @@ export function verifyJwt(
// 'base64'
// ).toString('utf8');
const secret: string = getEnvString(keyName, true)!;
const secret: string = env.getString(keyName, true)!;
try {
const decoded: string | jwt.JwtPayload = jwt.verify(token, secret);