diff --git a/index.html b/index.html index ad0d5fa78..b6fbf0889 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@
diff --git a/jest.config.ts b/jest.config.ts index 72150bd1a..0a5c3e7ff 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -27,4 +27,7 @@ export default { moduleNameMapper: { '\\.(gif|ttf|eot|svg|png)$': '/test/__ mocks __/fileMock.js', }, + globals: { + ENV: true, + }, } diff --git a/scripts/inject-dynamic-env.sh b/scripts/inject-dynamic-env.sh index 0d85d2b66..99017910f 100644 --- a/scripts/inject-dynamic-env.sh +++ b/scripts/inject-dynamic-env.sh @@ -20,9 +20,9 @@ ############################################################### # Define custom variable -custom_env_vars='{PORTAL_ASSETS_URL:"'$PORTAL_ASSETS_URL'",PORTAL_BACKEND_URL:"'$PORTAL_BACKEND_URL'",CENTRALIDP_URL:"'$CENTRALIDP_URL'",SSI_CREDENTIAL_URL:"'$SSI_CREDENTIAL_URL'",BPDM_API_URL:"'$BPDM_API_URL'",SEMANTICS_URL:"'$SEMANTICS_URL'",MANAGED_IDENTITY_WALLETS_NEW_URL:"'$MANAGED_IDENTITY_WALLETS_NEW_URL'",REALM:"'$REALM'",CLIENT_ID:"'$CLIENT_ID'",CLIENT_ID_SEMANTIC:"'$CLIENT_ID_SEMANTIC'",CLIENT_ID_MIW:"'$CLIENT_ID_MIW'",CLIENT_ID_SSI_CREDENTIAL:"'$CLIENT_ID_SSI_CREDENTIAL'"}' +custom_env_vars='{REQUIRE_HTTPS_URL_PATTERN:"'$REQUIRE_HTTPS_URL_PATTERN'",PORTAL_ASSETS_URL:"'$PORTAL_ASSETS_URL'",PORTAL_BACKEND_URL:"'$PORTAL_BACKEND_URL'",CENTRALIDP_URL:"'$CENTRALIDP_URL'",SSI_CREDENTIAL_URL:"'$SSI_CREDENTIAL_URL'",BPDM_API_URL:"'$BPDM_API_URL'",SEMANTICS_URL:"'$SEMANTICS_URL'",MANAGED_IDENTITY_WALLETS_NEW_URL:"'$MANAGED_IDENTITY_WALLETS_NEW_URL'",REALM:"'$REALM'",CLIENT_ID:"'$CLIENT_ID'",CLIENT_ID_SEMANTIC:"'$CLIENT_ID_SEMANTIC'",CLIENT_ID_MIW:"'$CLIENT_ID_MIW'",CLIENT_ID_SSI_CREDENTIAL:"'$CLIENT_ID_SSI_CREDENTIAL'"}' # Define anchor variable -custom_env_vars_anchor='{PORTAL_ASSETS_URL:"http://localhost:3000/assets",PORTAL_BACKEND_URL:"https://portal-backend.example.org",CENTRALIDP_URL:"https://centralidp.example.org/auth",SSI_CREDENTIAL_URL:"https://ssi-credential-issuer.example.org",BPDM_API_URL:"https://business-partners.example.org/pool/v6",SEMANTICS_URL:"https://semantics.example.org",MANAGED_IDENTITY_WALLETS_NEW_URL:"https://managed-identity-wallets-new.example.org",REALM:"CX-Central",CLIENT_ID:"Cl2-CX-Portal",CLIENT_ID_SEMANTIC:"Cl3-CX-Semantic",CLIENT_ID_MIW:"Cl5-CX-Custodian",CLIENT_ID_SSI_CREDENTIAL:"Cl24-CX-SSI-CredentialIssuer"}' +custom_env_vars_anchor='{REQUIRE_HTTPS_URL_PATTERN:"true",PORTAL_ASSETS_URL:"http://localhost:3000/assets",PORTAL_BACKEND_URL:"https://portal-backend.example.org",CENTRALIDP_URL:"https://centralidp.example.org/auth",SSI_CREDENTIAL_URL:"https://ssi-credential-issuer.example.org",BPDM_API_URL:"https://business-partners.example.org/pool/v6",SEMANTICS_URL:"https://semantics.example.org",MANAGED_IDENTITY_WALLETS_NEW_URL:"https://managed-identity-wallets-new.example.org",REALM:"CX-Central",CLIENT_ID:"Cl2-CX-Portal",CLIENT_ID_SEMANTIC:"Cl3-CX-Semantic",CLIENT_ID_MIW:"Cl5-CX-Custodian",CLIENT_ID_SSI_CREDENTIAL:"Cl24-CX-SSI-CredentialIssuer"}' # Read content of the reference index.html file into the index_html_reference variable index_html_reference=`cat /usr/share/nginx/html/index.html.reference` # Replace the anchor variable with the custom variable in the index.html file diff --git a/src/services/EnvironmentService.ts b/src/services/EnvironmentService.ts index f940fc800..b504b06af 100644 --- a/src/services/EnvironmentService.ts +++ b/src/services/EnvironmentService.ts @@ -19,6 +19,10 @@ declare const ENV: Record +// get the value of REQUIRE_HTTPS_URL_PATTERN environment variable, defaulting to 'true' if not set +export const getRequireHttpsUrlPattern = () => + ENV.REQUIRE_HTTPS_URL_PATTERN ?? 'true' + export const getRealm = () => ENV.REALM ?? '' export const getClientId = () => ENV.CLIENT_ID ?? '' @@ -46,6 +50,7 @@ export const getMiwBase = () => ENV.MANAGED_IDENTITY_WALLETS_NEW_URL ?? '' export const getSSICredentialBase = () => ENV.SSI_CREDENTIAL_URL ?? '' const EnvironmentService = { + getRequireHttpsUrlPattern, getRealm, getClientId, getClientIdSemantic, diff --git a/src/types/Patterns.ts b/src/types/Patterns.ts index 3bc13d37f..70a290aab 100644 --- a/src/types/Patterns.ts +++ b/src/types/Patterns.ts @@ -18,9 +18,21 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ +import { getRequireHttpsUrlPattern } from '../services/EnvironmentService' + +// check the REQUIRE_HTTPS_URL_PATTERN environment variable, defaulting to !== 'false' if not set +const requireHttpsUrlPattern = getRequireHttpsUrlPattern() !== 'false' + const DOMAIN = /([a-z0-9]|[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(\.([a-z0-9]|[a-z0-9][a-z0-9-]{0,61}[a-z0-9])){1,10}/i const URLPATH = /(\/[a-z0-9-._~:/?#[\]@!$&'()*+,;=%]{0,500}){0,20}/ +// construct regex patterns for URL based on the REQUIRE_HTTPS_URL_PATTERN environment variable +const urlProtocol = requireHttpsUrlPattern ? 'https' : 'https?' +const urlPattern = new RegExp( + `^(${urlProtocol})://(${DOMAIN.source})(:\\d{1,5})?(${URLPATH.source})?$`, + 'i' +) +const prefixUrlPattern = new RegExp(`^${urlProtocol}:`, 'i') export const Patterns = { ID: /^[a-z0-9_.@-]{1,80}$/i, @@ -29,10 +41,7 @@ export const Patterns = { MAIL: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*))@(([a-z0-9-]+\.)+[a-z]{2,})$/, DOMAIN: new RegExp(`^${DOMAIN.source}$`, 'i'), PATH: new RegExp(`^${URLPATH.source}$`, 'i'), - URL: new RegExp( - `^(https)://(${DOMAIN.source})(:\\d{1,5})?(${URLPATH.source})?$`, - 'i' - ), + URL: urlPattern, UUID: /^[a-f0-9]{8}(-[a-f0-9]{4}){4}[a-f0-9]{8}$/i, EXTID: /^[a-z0-9]{6,36}$/i, COMPANY_NAME: @@ -43,7 +52,7 @@ export const Patterns = { regionName: /^[0-9A-Za-z- ]{2,20}$/, prefix: { BPN: /^BPNL/i, - URL: /^https:/i, + URL: prefixUrlPattern, MAIL: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@/, }, SEARCH: /^[a-zA-ZÀ-ÿ0-9 !?@&_\-.]{3,80}$/,