From 30c33ed37834158357baed881acbcf1687bada2f Mon Sep 17 00:00:00 2001 From: Soni Jay Date: Mon, 19 Jan 2026 02:57:12 +0530 Subject: [PATCH] WEB-601 Create env var for hidding client data information (#3010) --- README.md | 25 ++++++++++++++++++++----- env.sample | 3 +++ src/app/clients/clients.component.html | 4 +++- src/app/clients/clients.component.ts | 14 ++++++++++++++ src/assets/env.js | 4 ++++ src/assets/env.template.js | 3 +++ src/environments/environment.prod.ts | 7 +++++++ src/environments/environment.ts | 7 +++++++ 8 files changed, 61 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4f61f5d6b..2b1968619 100644 --- a/README.md +++ b/README.md @@ -281,11 +281,12 @@ Available languages: #### UI Display Settings -| Variable | Description | Default Value | -| ---------------------------------- | ------------------------------------- | ------------- | -| MIFOS_DISPLAY_TENANT_SELECTOR | Display tenant selector in Login view | true | -| MIFOS_DISPLAY_BACKEND_INFO | Display backend info in footer | true | -| MIFOS_ALLOW_SERVER_SWITCH_SELECTOR | Display DNS server list | true | +| Variable | Description | Default Value | +| ---------------------------------- | -------------------------------------- | ------------- | +| MIFOS_DISPLAY_TENANT_SELECTOR | Display tenant selector in Login view | true | +| MIFOS_DISPLAY_BACKEND_INFO | Display backend info in footer | true | +| MIFOS_ALLOW_SERVER_SWITCH_SELECTOR | Display DNS server list | true | +| MIFOS_COMPLIANCE_HIDE_CLIENT_DATA | Hide client names in UI (mask with \*) | false | #### OAUTH Settings @@ -307,6 +308,20 @@ Available languages: For more detailed configuration options, refer to the `env.sample` file in the root directory of the project. +### Client Data Masking Example + +When `MIFOS_COMPLIANCE_HIDE_CLIENT_DATA=false` (default): + +EMANUEL CASTILLO +MIGUEL TECO + +When `MIFOS_COMPLIANCE_HIDE_CLIENT_DATA=true`: + +E**\*** C**\*\*\*** +M**\*** T\*\*\* + +This applies to client name display, e.g. in Institution/Clients list. + ## Releases ### 1.0.0 (Tag: 1.0.0-fineract1.11) diff --git a/env.sample b/env.sample index 62ba08158..d4bdbc488 100644 --- a/env.sample +++ b/env.sample @@ -38,3 +38,6 @@ MIFOS_OAUTH_CLIENT_ID=web-app #Enable or Disable HTTP Cache MIFOS_HTTP_CACHE_ENABLED=true + +# Hide client data information (set to true to mask client names) +MIFOS_COMPLIANCE_HIDE_CLIENT_DATA=false diff --git a/src/app/clients/clients.component.html b/src/app/clients/clients.component.html index 5f848d75d..1249c1f39 100644 --- a/src/app/clients/clients.component.html +++ b/src/app/clients/clients.component.html @@ -50,7 +50,9 @@ {{ 'labels.inputs.name' | translate }} - {{ row.displayName }} + + {{ hideClientData ? maskName(row.displayName) : row.displayName }} + diff --git a/src/app/clients/clients.component.ts b/src/app/clients/clients.component.ts index 047db4132..22f02eb14 100644 --- a/src/app/clients/clients.component.ts +++ b/src/app/clients/clients.component.ts @@ -67,6 +67,20 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; export class ClientsComponent implements OnInit { private clientService = inject(ClientsService); + /** Returns true if client data masking is enabled */ + get hideClientData(): boolean { + return environment.complianceHideClientData; + } + + /** Mask a client name */ + maskName(name: string): string { + if (!name) return ''; + return name + .split(' ') + .map((part) => (part.length > 1 ? part[0] + '*'.repeat(part.length - 1) : part)) + .join(' '); + } + @ViewChild('showClosedAccounts') showClosedAccounts: MatCheckbox; displayedColumns = [ diff --git a/src/assets/env.js b/src/assets/env.js index adaecebd8..52f2cd77b 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -58,6 +58,10 @@ // OAuth Client Id window['env']['oauthAppId'] = ''; + + // Hide client data (mask names) + window['env']['complianceHideClientData'] = ''; + // OIDC Plugin Environment variables window['env']['oidcServerEnabled'] = false; window['env']['oidcBaseUrl'] = ''; diff --git a/src/assets/env.template.js b/src/assets/env.template.js index 315510f84..8fc2872dd 100644 --- a/src/assets/env.template.js +++ b/src/assets/env.template.js @@ -72,6 +72,9 @@ // Enable or Disable HTTP Cache window['env']['httpCacheEnabled'] = '$MIFOS_HTTP_CACHE_ENABLED'; + // Hide client data (mask names) + window['env']['complianceHideClientData'] = '$MIFOS_COMPLIANCE_HIDE_CLIENT_DATA'; + window['env']['vNextApiUrl'] = '$VNEXT_API_URL'; window['env']['vNextApiProvider'] = '$VNEXT_API_PROVIDER'; window['env']['vNextApiVersion'] = '$VNEXT_API_VERSION'; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index bb8da250f..52db44933 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -80,6 +80,13 @@ export const environment = { minPasswordLength: loadedEnv['minPasswordLength'] || 12, + /** + * Hide client data information (mask client names with *) + * Set via MIFOS_COMPLIANCE_HIDE_CLIENT_DATA env var + */ + complianceHideClientData: + loadedEnv['complianceHideClientData'] === 'true' || loadedEnv['complianceHideClientData'] === true || false, + OIDC: { // Support legacy FINERACT_PLUGIN_OIDC_* variable names for backward compatibility oidcServerEnabled: diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 4e9f95c3d..bd241f239 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -84,6 +84,13 @@ export const environment = { minPasswordLength: loadedEnv.minPasswordLength || 12, + /** + * Hide client data information (mask client names with *) + * Set via MIFOS_COMPLIANCE_HIDE_CLIENT_DATA env var + */ + complianceHideClientData: + loadedEnv.complianceHideClientData === 'true' || loadedEnv.complianceHideClientData === true || false, + OIDC: { // Support legacy FINERACT_PLUGIN_OIDC_* variable names for backward compatibility oidcServerEnabled: