Browse Source

fix: env var resolution

Sv443 4 months ago
parent
commit
24632336e8
3 changed files with 15 additions and 17 deletions
  1. 13 15
      src/env.ts
  2. 1 1
      src/routes/index.ts
  3. 1 1
      src/server.ts

+ 13 - 15
src/env.ts

@@ -4,21 +4,21 @@ import type { Stringifiable } from "svcorelib";
 export type EnvVarConvType = "string" | "number" | "boolean" | "stringArray" | "numberArray";
 
 /** Resolves the env var with the given {@linkcode name} as a string */
-export function getEnvVar(name: string, type?: "string"): string
+export function getEnvVar(name: string, type?: "string", defaultVal?: string): string
 /** Resolves the env var with the given {@linkcode name} as a number */
-export function getEnvVar(name: string, type: "number"): number
+export function getEnvVar(name: string, type: "number", defaultVal?: number): number
 /** Resolves the env var with the given {@linkcode name} as a boolean */
-export function getEnvVar(name: string, type: "boolean"): boolean
+export function getEnvVar(name: string, type: "boolean", defaultVal?: boolean): boolean
 /** Resolves the env var with the given {@linkcode name} as a string array by splitting the string at commas and semicolons */
-export function getEnvVar(name: string, type: "stringArray"): string[]
+export function getEnvVar(name: string, type: "stringArray", defaultVal?: string[]): string[]
 /** Resolves the env var with the given {@linkcode name} as a number array by splitting the string at commas and semicolons and converting each element to a number */
-export function getEnvVar(name: string, type: "numberArray"): number[]
+export function getEnvVar(name: string, type: "numberArray", defaultVal?: number[]): number[]
 /** Resolves the env var with the given {@linkcode name} as a string, number, boolean, string array or number array - string by default */
-export function getEnvVar(name: string, type: EnvVarConvType = "string"): string | number | boolean | string[] | number[] {
-  const v = process.env[name];
-  if(v === undefined)
-    throw new Error(`Environment variable "${name}" not set`);
-  const val = String(v).trim();
+export function getEnvVar(name: string, type: EnvVarConvType = "string", defaultVal?: string | number | boolean | string[] | number[]): string | number | boolean | string[] | number[] {
+  const envVal = process.env[name];
+  if(envVal === undefined && typeof defaultVal === "undefined")
+    throw new Error(`Environment variable "${name}" is not set`);
+  const val = String(envVal ?? defaultVal).trim();
 
   switch(type) {
   default:
@@ -35,9 +35,7 @@ export function getEnvVar(name: string, type: EnvVarConvType = "string"): string
 }
 
 /** Checks if the env var with the given {@linkcode name} equals the given {@linkcode value}, converted to a string */
-export function envVarEquals(name: string, value: Stringifiable): boolean {
-  return (typeof value === "boolean"
-    ? getEnvVar(name).toLowerCase()
-    : getEnvVar(name)
-  ) === String(value);
+export function envVarEquals(name: string, value: Stringifiable, defaultVal = true): boolean {
+  const val = getEnvVar(name, "string", String(defaultVal));
+  return (typeof value === "boolean" ? val.toLowerCase() : val) === String(value);
 }

+ 1 - 1
src/routes/index.ts

@@ -7,7 +7,7 @@ import { initSearchRoutes } from "@routes/search.js";
 import { initTranslationsRoutes } from "@routes/translations.js";
 import { initAlbumRoutes } from "@routes/album.js";
 
-const hostHomepage = !envVarEquals("HOST_HOMEPAGE", false);
+const hostHomepage = !envVarEquals("HOST_HOMEPAGE", false, false);
 
 const routeFuncs: ((router: Router) => unknown)[] = [
   initSearchRoutes,

+ 1 - 1
src/server.ts

@@ -31,7 +31,7 @@ app.use(compression({
 
 app.use(express.json());
 
-if(envVarEquals("TRUST_PROXY", true))
+if(envVarEquals("TRUST_PROXY", true, false))
   app.enable("trust proxy");
 
 app.disable("x-powered-by");