diff --git a/README.md b/README.md index 4f26095ba1..d554d99125 100644 --- a/README.md +++ b/README.md @@ -370,6 +370,20 @@ When `ENABLE_EXTERNAL_NATIONAL_ID_SYSTEM` is set to `true`, the following fields The user types the External ID value, and if it matches the configured regex, the system calls the external API to retrieve and auto-fill client information. +#### External Email Validation Configuration + +The email validation regex can be customized using the `EXTERNAL_EMAIL_REGEX` environment variable. + +If not provided, the application falls back to the default built-in validation pattern. + +This allows deployments to enforce stricter or region-specific email validation rules without modifying source code. + +Example: + +```bash +EXTERNAL_EMAIL_REGEX=^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ +``` + **Docker Compose with External National ID:** ```bash diff --git a/src/app/clients/client-stepper/client-general-step/client-general-step.component.html b/src/app/clients/client-stepper/client-general-step/client-general-step.component.html index ba69c7b133..91c389ca81 100644 --- a/src/app/clients/client-stepper/client-general-step/client-general-step.component.html +++ b/src/app/clients/client-stepper/client-general-step/client-general-step.component.html @@ -230,9 +230,10 @@ {{ 'labels.inputs.Email Address' | translate }} - @if (createClientForm.controls.emailAddress.errors?.email) { + + @if (createClientForm.controls.emailAddress.hasError('pattern') && createClientForm.controls.emailAddress.value) { - {{ 'error.Email not valid' | translate }} + {{ 'errors.Email not valid' | translate }} } diff --git a/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts b/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts index d607e414c6..b0c0175022 100644 --- a/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts +++ b/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts @@ -7,6 +7,7 @@ */ /** Angular Imports */ +import { environment } from '../../../../environments/environment'; import { Component, OnInit, OnDestroy, Input, Output, EventEmitter, inject } from '@angular/core'; import { UntypedFormBuilder, @@ -114,6 +115,7 @@ export class ClientGeneralStepComponent implements OnInit, OnDestroy { * Creates the client form. */ setClientForm() { + const emailRegex = environment.EXTERNAL_EMAIL_REGEX?.trim(); this.createClientForm = this.formBuilder.group({ officeId: [ '', @@ -133,7 +135,7 @@ export class ClientGeneralStepComponent implements OnInit, OnDestroy { mobileNo: [''], emailAddress: [ '', - Validators.email + [Validators.pattern(emailRegex)] ], dateOfBirth: [''], clientTypeId: [''], diff --git a/src/assets/env.js b/src/assets/env.js index e27da5a4b9..0189aecb19 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -111,4 +111,7 @@ window['env']['oidcApiUrl'] = ''; window['env']['oidcFrontUrl'] = ''; + // External Email Validation Regex (optional override) + window['env']['EXTERNAL_EMAIL_REGEX'] = ''; + })(this); diff --git a/src/assets/env.template.js b/src/assets/env.template.js index ba01b2de00..27c068ced7 100644 --- a/src/assets/env.template.js +++ b/src/assets/env.template.js @@ -120,4 +120,7 @@ window['env']['oidcClientId'] = '$FINERACT_PLUGIN_OIDC_CLIENT_ID'; window['env']['oidcApiUrl'] = '$FINERACT_PLUGIN_OIDC_API_URL'; window['env']['oidcFrontUrl'] = '$FINERACT_PLUGIN_OIDC_FRONTEND_URL'; + + // External Email Validation Regex (optional override) + window['env']['EXTERNAL_EMAIL_REGEX'] = '$EXTERNAL_EMAIL_REGEX'; })(this); diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 0df9b90edb..60cb97c956 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -16,6 +16,7 @@ const provider = loadedEnv['apiProvider']; export const environment = { production: true, + EXTERNAL_EMAIL_REGEX: loadedEnv.EXTERNAL_EMAIL_REGEX || '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', version: env.mifos_x.version, hash: env.mifos_x.hash, // For connecting to server running elsewhere update the tenant identifier diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 9833603420..0aca532b98 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -19,6 +19,7 @@ const loadedEnv = window.env || {}; export const environment = { production: false, + EXTERNAL_EMAIL_REGEX: loadedEnv.EXTERNAL_EMAIL_REGEX || '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', version: env.mifos_x.version, hash: env.mifos_x.hash, // For connecting to server running elsewhere update the tenant identifier