diff --git a/PostFundManagement.ConsoleUI/.env.example b/PostFundManagement.ConsoleUI/.env.example index 2f34f97..43cabd7 100644 --- a/PostFundManagement.ConsoleUI/.env.example +++ b/PostFundManagement.ConsoleUI/.env.example @@ -24,4 +24,3 @@ VITE_ENABLE_HTTPS="true" # HasherSettings for HashIds compatibility with backend pfm-api VITE_HASHER_MIN_LENGTH="11" -VITE_HASHER_SALT="TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==" diff --git a/PostFundManagement.ConsoleUI/docker-entrypoint.sh b/PostFundManagement.ConsoleUI/docker-entrypoint.sh index 1fafebd..a0defa4 100644 --- a/PostFundManagement.ConsoleUI/docker-entrypoint.sh +++ b/PostFundManagement.ConsoleUI/docker-entrypoint.sh @@ -30,17 +30,16 @@ OIDC_CLIENT_ID="${VITE_OIDC_CLIENT_ID:-${OIDC_CLIENT_ID:-${SecuritySettings__Cli OIDC_SCOPE="${VITE_OIDC_SCOPE:-${OIDC_SCOPE:-${SecuritySettings__Scope:-${SecuritySettings_Scope:-${SCOPE:-}}}}}" # 6. Hasher Settings -HASHER_SALT="${VITE_HASHER_SALT:-${HASHER_SALT:-${HasherSettings__Salt:-${HasherSettings_Salt:-}}}}}" HASHER_MIN_LENGTH="${VITE_HASHER_MIN_LENGTH:-${HASHER_MIN_LENGTH:-${HasherSettings__MinLength:-${HasherSettings_MinLength:-}}}}}" if [ -d "$TARGET_DIR" ]; then echo "[docker-entrypoint] Generating runtime configuration files in $TARGET_DIR..." # Generate env-config.js for instant, synchronous window.__RUNTIME_CONFIG__ initialization - # Public SPA clients use Authorization Code flow with PKCE; client secrets must NEVER be injected or exposed here. + # Public SPA clients use Authorization Code flow with PKCE; client secrets and hasher salts must NEVER be injected or exposed here. cat < "$TARGET_DIR/env-config.js" // Generated dynamically at container startup from deployment environment variables -// Note: Secrets such as client secrets or private keys must NEVER be exposed here. +// Note: Secrets such as client secrets, private keys, or hashing salts must NEVER be exposed here. window.__RUNTIME_CONFIG__ = { API_BASE_URL: "${API_BASE_URL}", VITE_API_BASE_URL: "${API_BASE_URL}", @@ -52,8 +51,6 @@ window.__RUNTIME_CONFIG__ = { VITE_OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}", OIDC_SCOPE: "${OIDC_SCOPE}", VITE_OIDC_SCOPE: "${OIDC_SCOPE}", - HASHER_SALT: "${HASHER_SALT}", - VITE_HASHER_SALT: "${HASHER_SALT}", HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}", VITE_HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}", ApiSettings: { @@ -66,7 +63,6 @@ window.__RUNTIME_CONFIG__ = { Scope: "${OIDC_SCOPE}" }, HasherSettings: { - Salt: "${HASHER_SALT}", MinHashLength: "${HASHER_MIN_LENGTH}" } }; @@ -85,7 +81,6 @@ EOF "Scope": "${OIDC_SCOPE}" }, "HasherSettings": { - "Salt": "${HASHER_SALT}", "MinHashLength": "${HASHER_MIN_LENGTH}" } } diff --git a/PostFundManagement.ConsoleUI/public/config.json b/PostFundManagement.ConsoleUI/public/config.json index 068597f..acd80d2 100644 --- a/PostFundManagement.ConsoleUI/public/config.json +++ b/PostFundManagement.ConsoleUI/public/config.json @@ -9,7 +9,6 @@ "Scope": "" }, "HasherSettings": { - "Salt": "", "MinHashLength": "" } } diff --git a/PostFundManagement.ConsoleUI/src/config.ts b/PostFundManagement.ConsoleUI/src/config.ts index 062cb94..e450cce 100644 --- a/PostFundManagement.ConsoleUI/src/config.ts +++ b/PostFundManagement.ConsoleUI/src/config.ts @@ -13,7 +13,7 @@ export interface ApiSettings { } export interface HasherSettings { - Salt: string; + Salt?: string; MinHashLength: number; } @@ -44,7 +44,7 @@ export const defaultApiSettings: ApiSettings = { }; export const defaultHasherSettings: HasherSettings = { - Salt: 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + Salt: '', MinHashLength: 11, }; @@ -276,7 +276,7 @@ function resolveConfig(fetchedJson?: Record): AppConfig { fetchedConfig.hasherSalt, buildEnvConfig.hasherSalt, defaultHasherSettings.Salt - )!; + ); const minHashLength = windowConfig.hasherMinLength || @@ -296,7 +296,7 @@ function resolveConfig(fetchedJson?: Record): AppConfig { BaseUrl: normalizeBaseUrl(baseUrl), }, HasherSettings: { - Salt: salt, + Salt: salt || '', MinHashLength: minHashLength, }, ConfigSource: source, diff --git a/PostFundManagement.ConsoleUI/src/services/toolsService.ts b/PostFundManagement.ConsoleUI/src/services/toolsService.ts index 0bbc4b0..b0aa4a6 100644 --- a/PostFundManagement.ConsoleUI/src/services/toolsService.ts +++ b/PostFundManagement.ConsoleUI/src/services/toolsService.ts @@ -11,9 +11,7 @@ const env = (typeof import.meta !== 'undefined' && import.meta.env */ export const HASHER_SETTINGS = { minHashLength: Number(env.VITE_HASHER_MIN_LENGTH) || 11, - salt: - (env.VITE_HASHER_SALT as string) || - 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + salt: (env.VITE_HASHER_SALT as string) || '', }; // Singleton Hashids instance initialized with salt & minHashLength diff --git a/PostFundManagement.ConsoleUI/src/utils/hashids.ts b/PostFundManagement.ConsoleUI/src/utils/hashids.ts index 17a59e8..cebe5b2 100644 --- a/PostFundManagement.ConsoleUI/src/utils/hashids.ts +++ b/PostFundManagement.ConsoleUI/src/utils/hashids.ts @@ -6,9 +6,7 @@ const env = (typeof import.meta !== 'undefined' && import.meta.env export const HASHER_SETTINGS = { minHashLength: Number(env.VITE_HASHER_MIN_LENGTH) || 11, - salt: - (env.VITE_HASHER_SALT as string) || - 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + salt: (env.VITE_HASHER_SALT as string) || '', }; let hasher = new Hashids(HASHER_SETTINGS.salt, HASHER_SETTINGS.minHashLength); diff --git a/PostFundManagement.PartnerUI/docker-entrypoint.sh b/PostFundManagement.PartnerUI/docker-entrypoint.sh index 1fafebd..a0defa4 100644 --- a/PostFundManagement.PartnerUI/docker-entrypoint.sh +++ b/PostFundManagement.PartnerUI/docker-entrypoint.sh @@ -30,17 +30,16 @@ OIDC_CLIENT_ID="${VITE_OIDC_CLIENT_ID:-${OIDC_CLIENT_ID:-${SecuritySettings__Cli OIDC_SCOPE="${VITE_OIDC_SCOPE:-${OIDC_SCOPE:-${SecuritySettings__Scope:-${SecuritySettings_Scope:-${SCOPE:-}}}}}" # 6. Hasher Settings -HASHER_SALT="${VITE_HASHER_SALT:-${HASHER_SALT:-${HasherSettings__Salt:-${HasherSettings_Salt:-}}}}}" HASHER_MIN_LENGTH="${VITE_HASHER_MIN_LENGTH:-${HASHER_MIN_LENGTH:-${HasherSettings__MinLength:-${HasherSettings_MinLength:-}}}}}" if [ -d "$TARGET_DIR" ]; then echo "[docker-entrypoint] Generating runtime configuration files in $TARGET_DIR..." # Generate env-config.js for instant, synchronous window.__RUNTIME_CONFIG__ initialization - # Public SPA clients use Authorization Code flow with PKCE; client secrets must NEVER be injected or exposed here. + # Public SPA clients use Authorization Code flow with PKCE; client secrets and hasher salts must NEVER be injected or exposed here. cat < "$TARGET_DIR/env-config.js" // Generated dynamically at container startup from deployment environment variables -// Note: Secrets such as client secrets or private keys must NEVER be exposed here. +// Note: Secrets such as client secrets, private keys, or hashing salts must NEVER be exposed here. window.__RUNTIME_CONFIG__ = { API_BASE_URL: "${API_BASE_URL}", VITE_API_BASE_URL: "${API_BASE_URL}", @@ -52,8 +51,6 @@ window.__RUNTIME_CONFIG__ = { VITE_OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}", OIDC_SCOPE: "${OIDC_SCOPE}", VITE_OIDC_SCOPE: "${OIDC_SCOPE}", - HASHER_SALT: "${HASHER_SALT}", - VITE_HASHER_SALT: "${HASHER_SALT}", HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}", VITE_HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}", ApiSettings: { @@ -66,7 +63,6 @@ window.__RUNTIME_CONFIG__ = { Scope: "${OIDC_SCOPE}" }, HasherSettings: { - Salt: "${HASHER_SALT}", MinHashLength: "${HASHER_MIN_LENGTH}" } }; @@ -85,7 +81,6 @@ EOF "Scope": "${OIDC_SCOPE}" }, "HasherSettings": { - "Salt": "${HASHER_SALT}", "MinHashLength": "${HASHER_MIN_LENGTH}" } } diff --git a/PostFundManagement.PartnerUI/public/config.json b/PostFundManagement.PartnerUI/public/config.json index 64de53d..a03ad0a 100644 --- a/PostFundManagement.PartnerUI/public/config.json +++ b/PostFundManagement.PartnerUI/public/config.json @@ -10,7 +10,6 @@ "BaseUrl": "" }, "HasherSettings": { - "Salt": "", "MinHashLength": "" } } diff --git a/PostFundManagement.PartnerUI/src/config.ts b/PostFundManagement.PartnerUI/src/config.ts index eac650e..579a7a6 100644 --- a/PostFundManagement.PartnerUI/src/config.ts +++ b/PostFundManagement.PartnerUI/src/config.ts @@ -14,7 +14,7 @@ export interface ApiSettings { } export interface HasherSettings { - Salt: string; + Salt?: string; MinHashLength: number; } @@ -40,11 +40,11 @@ export const defaultApiSettings: ApiSettings = { }; export const defaultHasherSettings: HasherSettings = { - Salt: 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + Salt: '', MinHashLength: 11, }; -function syncAllHasherSettings(salt: string, minHashLength: number): void { +function syncAllHasherSettings(salt: string | undefined, minHashLength: number): void { updateToolsHasherSettings(salt, minHashLength); updateUtilsHasherSettings(salt, minHashLength); } @@ -233,7 +233,7 @@ function resolveConfig(fetchedJson?: Record): AppConfig { fetchCfg.hasherSalt, envCfg.hasherSalt, defaultHasherSettings.Salt - )!; + ); const hasherMinLength = winCfg.hasherMinLength || fetchCfg.hasherMinLength || @@ -252,7 +252,7 @@ function resolveConfig(fetchedJson?: Record): AppConfig { BaseUrl: baseUrl, }, HasherSettings: { - Salt: hasherSalt, + Salt: hasherSalt || '', MinHashLength: hasherMinLength, }, ConfigSource: source, diff --git a/PostFundManagement.PartnerUI/src/services/toolsService.ts b/PostFundManagement.PartnerUI/src/services/toolsService.ts index 273b332..ca96b5f 100644 --- a/PostFundManagement.PartnerUI/src/services/toolsService.ts +++ b/PostFundManagement.PartnerUI/src/services/toolsService.ts @@ -11,9 +11,7 @@ const env = (typeof import.meta !== 'undefined' && import.meta.env */ export const HASHER_SETTINGS = { minHashLength: Number(env.VITE_HASHER_MIN_LENGTH) || 11, - salt: - (env.VITE_HASHER_SALT as string) || - 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + salt: (env.VITE_HASHER_SALT as string) || '', }; let hasher = new Hashids(HASHER_SETTINGS.salt, HASHER_SETTINGS.minHashLength); diff --git a/PostFundManagement.PartnerUI/src/utils/hashids.ts b/PostFundManagement.PartnerUI/src/utils/hashids.ts index 2535e0a..03fdd01 100644 --- a/PostFundManagement.PartnerUI/src/utils/hashids.ts +++ b/PostFundManagement.PartnerUI/src/utils/hashids.ts @@ -6,9 +6,7 @@ const env = (typeof import.meta !== 'undefined' && import.meta.env export const HASHER_SETTINGS = { minHashLength: Number(env.VITE_HASHER_MIN_LENGTH) || 11, - salt: - (env.VITE_HASHER_SALT as string) || - 'TGlnaHQgQ2hhcm1zLCBNaWRyYW5kQm9va3MgbWFrZSBsb3RzIG9mIG1vbmV5IGFuZCBhcmUgYSBzdWNjZXNzZnVsIHZpcmFsIHN0b3J5IGluIFNvdXRoIEFmcmljYQ==', + salt: (env.VITE_HASHER_SALT as string) || '', }; let hasher = new Hashids(HASHER_SETTINGS.salt, HASHER_SETTINGS.minHashLength);