You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by am...@apache.org on 2026/08/12 09:38:40 UTC

(fineract-consumer-facing) branch main updated (d041a75 -> 744de4b)

This is an automated email from the ASF dual-hosted git repository.

Aman-Mittal pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/fineract-consumer-facing.git


    from d041a75  Merge pull request #98 from edk12564/idempotency
     add fc34d9f  - added openbanking feature flow - added Spring Authorization Server - implemented JDBC stateful tokens for consent/authorization checks - added openbanking scoped TPP tokens with refresh tokens and ES256 signatures - added KYC checks for each token refresh to keep BFF up to date with possible Fineract KYC revocations - added openbanking read endpoints for accounts and balances - added user consent revocation functionality - added Liquibase migrations for stateful openba [...]
     add 0eb7513  - made configuration properties static final variables for every property file
     add 895a771  - fixed merge conflict
     new 744de4b  Merge pull request #97 from edk12564/openbanking

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 consumer/build.gradle                              |   1 +
 consumer/compose.yaml                              |   1 +
 .../command/data/AuditRetentionProperties.java     |   5 +-
 .../command/data/PrincipalUserAuthData.java        |   1 +
 ...java => AuthenticationKycRevokedException.java} |   8 +-
 .../service/AuthenticationCommandServiceImpl.java  |  16 +-
 ...ookup.java => PrincipalUserAuthLookupPort.java} |   2 +-
 .../infrastructure/access/data/ActionPolicies.java |  72 ++-
 .../infrastructure/access/data/ActionPolicy.java   |   3 +-
 .../access/data/AuthenticationConstants.java       |   2 +
 .../infrastructure/access/data/ConsumerAction.java |   7 +-
 .../access/data/PrincipalUserData.java             |   1 +
 .../access/filter/DeviceFingerprintFilter.java     |   3 +-
 .../access/filter/RateLimitFilter.java             |  74 ++-
 ...serLookup.java => PrincipalUserLookupPort.java} |   2 +-
 .../access/service/AccessPolicyEvaluator.java      |  21 +-
 .../access/service/UserClientResolver.java         |   4 +-
 .../infrastructure/audit/data/AuditEventType.java  |   5 +-
 .../configs/AuthenticationProperties.java          |   4 +-
 .../infrastructure/configs/JwtProperties.java      |   4 +-
 .../configs/OAuth2AuthorizationServerConfig.java   | 366 ++++++++++++++
 ...operties.java => OAuth2ConsumerProperties.java} |  26 +-
 .../configs/RateLimitProperties.java               |  11 +-
 .../infrastructure/configs/SecurityConfig.java     |   5 +-
 .../configs/FineractClientProperties.java          |   4 +-
 .../service/ClientStandingChecker.java}            |  29 +-
 .../data/OAuth2ConsentData.java}                   |  11 +-
 .../oauth2/data/OAuth2Constants.java               |  52 ++
 .../filter/OAuth2UserAuthenticationFilter.java     |  61 +++
 .../service/OAuth2AccessTokenCustomizer.java       |  99 ++++
 .../OAuth2ConsentAuthorizeRequestValidator.java    |  63 +++
 .../service/OAuth2ConsentDecisionCustomizer.java   |  86 ++++
 .../oauth2/service/OAuth2ConsentIdExtractor.java   |  54 ++
 .../service/OAuth2ConsentLookupPort.java}          |   8 +-
 .../service/OAuth2ConsentRecorderPort.java}        |  12 +-
 .../OAuth2RefreshTokenConsentValidator.java        |  72 +++
 .../api/OpenBankingConsentCommandController.java}  |  37 +-
 .../OpenBankingUserConsentCommandController.java}  |  25 +-
 .../command/data/ConsentStatus.java}               |  10 +-
 .../data/CreateOpenBankingConsentCommand.java}     |   7 +-
 .../CreateOpenBankingConsentCommandRequest.java}   |  12 +-
 .../data/OpenBankingConsentCommandData.java}       |  13 +-
 .../command/data/OpenBankingPermission.java}       |  25 +-
 .../command/domain/OpenBankingConsent.java         | 119 +++++
 .../domain/OpenBankingPermissionSetConverter.java  |  54 ++
 ...penBankingConsentCommandNotFoundException.java} |  10 +-
 .../OpenBankingConsentNotRevocableException.java}  |  10 +-
 ...nBankingConsentPermissionInvalidException.java} |  10 +-
 .../OpenBankingConsentCommandRepository.java}      |  10 +-
 .../service/OpenBankingConsentCommandService.java} |  16 +-
 .../OpenBankingConsentCommandServiceImpl.java      | 141 ++++++
 .../OpenBankingConsentRecorderAdapter.java}        |  21 +-
 .../api/OpenBankingConsentQueryController.java}    |  24 +-
 .../query/api/OpenBankingQueryController.java}     |  30 +-
 .../OpenBankingUserConsentQueryController.java}    |  21 +-
 .../query/data/ConsentStatus.java}                 |  10 +-
 .../query/data/OpenBankingAccountQueryData.java}   |   7 +-
 .../query/data/OpenBankingBalanceQueryData.java}   |  11 +-
 .../query/data/OpenBankingConsentQueryData.java}   |  16 +-
 .../query/data/OpenBankingPermission.java}         |  25 +-
 .../data/OpenBankingTppConsentQueryData.java}      |  14 +-
 .../data/OpenBankingUserConsentQueryData.java}     |  14 +-
 .../query/domain/OpenBankingAccountId.java         |  82 +++
 .../domain/OpenBankingConsentQueryEntity.java      |  90 ++++
 .../domain/OpenBankingPermissionSetConverter.java  |  54 ++
 .../OpenBankingAccountNotFoundException.java}      |  10 +-
 .../OpenBankingConsentInvalidException.java}       |  11 +-
 .../OpenBankingConsentQueryNotFoundException.java} |  10 +-
 .../OpenBankingConsentQueryRepository.java}        |  13 +-
 .../service/OpenBankingConsentLookupAdapter.java   |  46 ++
 .../service/OpenBankingConsentQueryService.java}   |  18 +-
 .../OpenBankingConsentQueryServiceImpl.java        | 106 ++++
 .../query/service/OpenBankingQueryService.java}    |  12 +-
 .../query/service/OpenBankingQueryServiceImpl.java | 179 +++++++
 .../service/PrincipalUserAuthLookupAdapter.java    |   5 +-
 .../query/service/PrincipalUserLookupAdapter.java  |   8 +-
 consumer/src/main/resources/application.properties |  18 +-
 .../changelog/audit/004-create-audit-events.yaml   |   2 +-
 .../authentication/002-create-refresh-tokens.yaml  |   2 +-
 .../beneficiaries/003-create-beneficiaries.yaml    |   2 +-
 .../db/changelog/db.changelog-master.yaml          |   4 +
 .../005-create-event-publication.yaml              |   2 +-
 .../007-create-oauth2-authorization.yaml           | 137 +++++
 .../006-create-open-banking-consents.yaml}         |  53 +-
 .../db/changelog/user/001-create-users-table.yaml  |   2 +-
 .../AuthenticationCommandServiceImplTest.java      |  75 ++-
 .../cucumber/clients/OpenBankingClient.java        | 189 +++++++
 .../cucumber/helpers/AuditEventPoller.java         |  75 +++
 .../consumer/cucumber/helpers/FineractSeeder.java  |  49 +-
 .../cucumber/helpers/RegistrationHelper.java       |   4 +-
 .../consumer/cucumber/steps/AuditSteps.java        |  52 +-
 .../consumer/cucumber/steps/LoginSteps.java        |  14 +
 .../consumer/cucumber/steps/OpenBankingSteps.java  | 562 +++++++++++++++++++++
 .../access/filter/RateLimitFilterTest.java         | 136 ++++-
 .../access/service/AccessPolicyEvaluatorTest.java  |   8 +
 .../OAuth2AuthorizationServerConfigTest.java       | 115 +++++
 .../kyc/service/ClientStandingCheckerTest.java     |  89 ++++
 .../service/OAuth2AccessTokenCustomizerTest.java   | 275 ++++++++++
 ...OAuth2ConsentAuthorizeRequestValidatorTest.java | 163 ++++++
 .../OAuth2ConsentDecisionCustomizerTest.java       | 177 +++++++
 .../OAuth2RefreshTokenConsentValidatorTest.java    | 201 ++++++++
 .../OpenBankingConsentCommandServiceImplTest.java  | 301 +++++++++++
 .../query/domain/OpenBankingAccountIdTest.java     |  86 ++++
 .../OpenBankingConsentLookupAdapterTest.java       | 117 +++++
 .../OpenBankingConsentQueryServiceImplTest.java    | 202 ++++++++
 .../service/OpenBankingQueryServiceImplTest.java   | 347 +++++++++++++
 .../service/PrincipalUserLookupAdapterTest.java    |  32 +-
 consumer/src/test/resources/features/login.feature |   6 +
 .../test/resources/features/openbanking.feature    | 120 +++++
 frontend/public/i18n/en.json                       |  37 +-
 frontend/public/i18n/hi.json                       |  37 +-
 frontend/src/app/app.routes.ts                     |   6 +
 frontend/src/app/core/audit/audit.service.ts       |   3 +-
 .../src/app/features/auth/login.component.spec.ts  |  49 ++
 frontend/src/app/features/auth/login.component.ts  |  18 +-
 .../app/features/consent/consent.component.spec.ts | 136 +++++
 .../src/app/features/consent/consent.component.ts  | 108 ++++
 .../src/app/features/profile/profile.component.ts  | 138 ++++-
 .../src/app/features/profile/profile.store.spec.ts |  62 +++
 frontend/src/app/features/profile/profile.store.ts |  22 +
 .../shared/css/{detail-page.scss => badge.scss}    |  37 +-
 .../src/app/shared/ui/status-badge.component.ts    |  33 +-
 122 files changed, 6379 insertions(+), 455 deletions(-)
 copy consumer/src/main/java/org/apache/fineract/consumer/authentication/command/exception/{RefreshTokenInvalidException.java => AuthenticationKycRevokedException.java} (77%)
 rename consumer/src/main/java/org/apache/fineract/consumer/authentication/command/service/{PrincipalUserAuthLookup.java => PrincipalUserAuthLookupPort.java} (96%)
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/access/repository/{PrincipalUserLookup.java => PrincipalUserLookupPort.java} (96%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/configs/OAuth2AuthorizationServerConfig.java
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/configs/{AuthenticationProperties.java => OAuth2ConsumerProperties.java} (65%)
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/{fineractclient/interceptors/FineractTenantHeaderInterceptor.java => kyc/service/ClientStandingChecker.java} (52%)
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/{jwt/data/IssuedJwt.java => oauth2/data/OAuth2ConsentData.java} (81%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/data/OAuth2Constants.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/filter/OAuth2UserAuthenticationFilter.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2AccessTokenCustomizer.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2ConsentAuthorizeRequestValidator.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2ConsentDecisionCustomizer.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2ConsentIdExtractor.java
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/{access/repository/PrincipalUserLookup.java => oauth2/service/OAuth2ConsentLookupPort.java} (77%)
 copy consumer/src/main/java/org/apache/fineract/consumer/infrastructure/{access/data/ResourceType.java => oauth2/service/OAuth2ConsentRecorderPort.java} (77%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2RefreshTokenConsentValidator.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{audit/command/api/AuditCommandController.java => openbanking/command/api/OpenBankingConsentCommandController.java} (51%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{summary/query/api/SummaryQueryController.java => openbanking/command/api/OpenBankingUserConsentCommandController.java} (57%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{beneficiaries/command/data/BeneficiaryAccountType.java => openbanking/command/data/ConsentStatus.java} (83%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{infrastructure/access/data/OwnedAccounts.java => openbanking/command/data/CreateOpenBankingConsentCommand.java} (85%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{authentication/command/data/PrincipalUserAuthCredentialsData.java => openbanking/command/data/CreateOpenBankingConsentCommandRequest.java} (79%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{user/command/data/UserCreatedCommandData.java => openbanking/command/data/OpenBankingConsentCommandData.java} (73%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{infrastructure/exception/ConsumerApiError.java => openbanking/command/data/OpenBankingPermission.java} (59%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/command/domain/OpenBankingConsent.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/command/domain/OpenBankingPermissionSetConverter.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{authentication/command/exception/RefreshTokenInvalidException.java => openbanking/command/exception/OpenBankingConsentCommandNotFoundException.java} (71%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{loans/command/exception/LoanCommandUpstreamUnavailableException.java => openbanking/command/exception/OpenBankingConsentNotRevocableException.java} (71%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{identity/query/exception/IdentityVerificationException.java => openbanking/command/exception/OpenBankingConsentPermissionInvalidException.java} (70%)
 rename consumer/src/main/java/org/apache/fineract/consumer/{infrastructure/access/repository/PrincipalUserLookup.java => openbanking/command/repository/OpenBankingConsentCommandRepository.java} (72%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{summary/query/service/SummaryQueryService.java => openbanking/command/service/OpenBankingConsentCommandService.java} (59%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/command/service/OpenBankingConsentCommandServiceImpl.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{user/query/service/PrincipalUserLookupAdapter.java => openbanking/command/service/OpenBankingConsentRecorderAdapter.java} (58%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{summary/query/api/SummaryQueryController.java => openbanking/query/api/OpenBankingConsentQueryController.java} (59%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{beneficiaries/query/api/BeneficiariesQueryController.java => openbanking/query/api/OpenBankingQueryController.java} (54%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{summary/query/api/SummaryQueryController.java => openbanking/query/api/OpenBankingUserConsentQueryController.java} (63%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{beneficiaries/command/data/BeneficiaryAccountType.java => openbanking/query/data/ConsentStatus.java} (83%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{loans/query/data/LoanAccountListItemQueryData.java => openbanking/query/data/OpenBankingAccountQueryData.java} (86%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{transfers/command/data/TransferCommandData.java => openbanking/query/data/OpenBankingBalanceQueryData.java} (83%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{user/command/data/UserCreatedCommandData.java => openbanking/query/data/OpenBankingConsentQueryData.java} (67%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{infrastructure/exception/ConsumerApiError.java => openbanking/query/data/OpenBankingPermission.java} (59%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{user/command/data/UserCreatedCommandData.java => openbanking/query/data/OpenBankingTppConsentQueryData.java} (70%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{user/command/data/UserCreatedCommandData.java => openbanking/query/data/OpenBankingUserConsentQueryData.java} (71%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/domain/OpenBankingAccountId.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/domain/OpenBankingConsentQueryEntity.java
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/domain/OpenBankingPermissionSetConverter.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{transfers/command/exception/TransferNotFoundException.java => openbanking/query/exception/OpenBankingAccountNotFoundException.java} (72%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{beneficiaries/command/exception/BeneficiaryAccountInvalidException.java => openbanking/query/exception/OpenBankingConsentInvalidException.java} (72%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{transfers/command/exception/TransferNotFoundException.java => openbanking/query/exception/OpenBankingConsentQueryNotFoundException.java} (72%)
 copy consumer/src/main/java/org/apache/fineract/consumer/{authentication/command/repository/RefreshTokenCommandRepository.java => openbanking/query/repository/OpenBankingConsentQueryRepository.java} (63%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingConsentLookupAdapter.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{beneficiaries/query/service/BeneficiariesQueryService.java => openbanking/query/service/OpenBankingConsentQueryService.java} (59%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingConsentQueryServiceImpl.java
 copy consumer/src/main/java/org/apache/fineract/consumer/{summary/query/service/SummaryQueryService.java => openbanking/query/service/OpenBankingQueryService.java} (65%)
 create mode 100644 consumer/src/main/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingQueryServiceImpl.java
 create mode 100644 consumer/src/main/resources/db/changelog/infrastructure/007-create-oauth2-authorization.yaml
 copy consumer/src/main/resources/db/changelog/{user/001-create-users-table.yaml => openbanking/006-create-open-banking-consents.yaml} (70%)
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/cucumber/clients/OpenBankingClient.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/cucumber/helpers/AuditEventPoller.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/cucumber/steps/OpenBankingSteps.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/configs/OAuth2AuthorizationServerConfigTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/kyc/service/ClientStandingCheckerTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2AccessTokenCustomizerTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2ConsentAuthorizeRequestValidatorTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2ConsentDecisionCustomizerTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/infrastructure/oauth2/service/OAuth2RefreshTokenConsentValidatorTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/openbanking/command/service/OpenBankingConsentCommandServiceImplTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/openbanking/query/domain/OpenBankingAccountIdTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingConsentLookupAdapterTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingConsentQueryServiceImplTest.java
 create mode 100644 consumer/src/test/java/org/apache/fineract/consumer/openbanking/query/service/OpenBankingQueryServiceImplTest.java
 create mode 100644 consumer/src/test/resources/features/openbanking.feature
 create mode 100644 frontend/src/app/features/auth/login.component.spec.ts
 create mode 100644 frontend/src/app/features/consent/consent.component.spec.ts
 create mode 100644 frontend/src/app/features/consent/consent.component.ts
 copy frontend/src/app/shared/css/{detail-page.scss => badge.scss} (57%)


(fineract-consumer-facing) 01/01: Merge pull request #97 from edk12564/openbanking

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

Aman-Mittal pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fineract-consumer-facing.git

commit 744de4baf2b8d4dc014963b440e308d0554f0d6a
Merge: d041a75 895a771
Author: Aman-Mittal <32...@users.noreply.github.com>
AuthorDate: Wed Aug 12 15:08:35 2026 +0530

    Merge pull request #97 from edk12564/openbanking
    
    Implement first steps for openbanking

 consumer/build.gradle                              |   1 +
 consumer/compose.yaml                              |   1 +
 .../command/data/AuditRetentionProperties.java     |   5 +-
 .../command/data/PrincipalUserAuthData.java        |   1 +
 .../AuthenticationKycRevokedException.java}        |  17 +-
 .../service/AuthenticationCommandServiceImpl.java  |  16 +-
 ...ookup.java => PrincipalUserAuthLookupPort.java} |   2 +-
 .../infrastructure/access/data/ActionPolicies.java |  72 ++-
 .../infrastructure/access/data/ActionPolicy.java   |   3 +-
 .../access/data/AuthenticationConstants.java       |   2 +
 .../infrastructure/access/data/ConsumerAction.java |   7 +-
 .../access/data/PrincipalUserData.java             |   1 +
 .../access/filter/DeviceFingerprintFilter.java     |   3 +-
 .../access/filter/RateLimitFilter.java             |  74 ++-
 ...serLookup.java => PrincipalUserLookupPort.java} |   2 +-
 .../access/service/AccessPolicyEvaluator.java      |  21 +-
 .../access/service/UserClientResolver.java         |   4 +-
 .../infrastructure/audit/data/AuditEventType.java  |   5 +-
 .../configs/AuthenticationProperties.java          |   4 +-
 .../infrastructure/configs/JwtProperties.java      |   4 +-
 .../configs/OAuth2AuthorizationServerConfig.java   | 366 ++++++++++++++
 ...operties.java => OAuth2ConsumerProperties.java} |  26 +-
 .../configs/RateLimitProperties.java               |  11 +-
 .../infrastructure/configs/SecurityConfig.java     |   5 +-
 .../configs/FineractClientProperties.java          |   4 +-
 .../kyc/service/ClientStandingChecker.java         |  46 ++
 .../data/OAuth2ConsentData.java}                   |  13 +-
 .../oauth2/data/OAuth2Constants.java               |  52 ++
 .../filter/OAuth2UserAuthenticationFilter.java     |  61 +++
 .../service/OAuth2AccessTokenCustomizer.java       |  99 ++++
 .../OAuth2ConsentAuthorizeRequestValidator.java    |  63 +++
 .../service/OAuth2ConsentDecisionCustomizer.java   |  86 ++++
 .../oauth2/service/OAuth2ConsentIdExtractor.java   |  54 ++
 .../service/OAuth2ConsentLookupPort.java}          |   8 +-
 .../service/OAuth2ConsentRecorderPort.java}        |  10 +-
 .../OAuth2RefreshTokenConsentValidator.java        |  72 +++
 .../api/OpenBankingConsentCommandController.java   |  57 +++
 .../OpenBankingUserConsentCommandController.java   |  48 ++
 .../command/data/ConsentStatus.java}               |  14 +-
 .../data/CreateOpenBankingConsentCommand.java}     |  11 +-
 .../CreateOpenBankingConsentCommandRequest.java}   |  14 +-
 .../data/OpenBankingConsentCommandData.java}       |  15 +-
 .../command/data/OpenBankingPermission.java}       |  29 +-
 .../command/domain/OpenBankingConsent.java         | 119 +++++
 .../domain/OpenBankingPermissionSetConverter.java  |  54 ++
 ...penBankingConsentCommandNotFoundException.java} |  17 +-
 .../OpenBankingConsentNotRevocableException.java}  |  17 +-
 ...nBankingConsentPermissionInvalidException.java} |  17 +-
 .../OpenBankingConsentCommandRepository.java}      |  10 +-
 .../service/OpenBankingConsentCommandService.java} |  18 +-
 .../OpenBankingConsentCommandServiceImpl.java      | 141 ++++++
 .../OpenBankingConsentRecorderAdapter.java}        |  21 +-
 .../api/OpenBankingConsentQueryController.java     |  49 ++
 .../query/api/OpenBankingQueryController.java      |  55 ++
 .../api/OpenBankingUserConsentQueryController.java |  46 ++
 .../query/data/ConsentStatus.java}                 |  14 +-
 .../query/data/OpenBankingAccountQueryData.java}   |  15 +-
 .../query/data/OpenBankingBalanceQueryData.java}   |  14 +-
 .../query/data/OpenBankingConsentQueryData.java}   |  18 +-
 .../query/data/OpenBankingPermission.java}         |  29 +-
 .../data/OpenBankingTppConsentQueryData.java}      |  16 +-
 .../data/OpenBankingUserConsentQueryData.java}     |  16 +-
 .../query/domain/OpenBankingAccountId.java         |  82 +++
 .../domain/OpenBankingConsentQueryEntity.java      |  90 ++++
 .../domain/OpenBankingPermissionSetConverter.java  |  54 ++
 .../OpenBankingAccountNotFoundException.java}      |  17 +-
 .../OpenBankingConsentInvalidException.java}       |  17 +-
 .../OpenBankingConsentQueryNotFoundException.java} |  17 +-
 .../OpenBankingConsentQueryRepository.java}        |  15 +-
 .../service/OpenBankingConsentLookupAdapter.java   |  46 ++
 .../service/OpenBankingConsentQueryService.java}   |  17 +-
 .../OpenBankingConsentQueryServiceImpl.java        | 106 ++++
 .../query/service/OpenBankingQueryService.java}    |  25 +-
 .../query/service/OpenBankingQueryServiceImpl.java | 179 +++++++
 .../service/PrincipalUserAuthLookupAdapter.java    |   5 +-
 .../query/service/PrincipalUserLookupAdapter.java  |   8 +-
 consumer/src/main/resources/application.properties |  18 +-
 .../changelog/audit/004-create-audit-events.yaml   |   2 +-
 .../authentication/002-create-refresh-tokens.yaml  |   2 +-
 .../beneficiaries/003-create-beneficiaries.yaml    |   2 +-
 .../db/changelog/db.changelog-master.yaml          |   4 +
 .../005-create-event-publication.yaml              |   2 +-
 .../007-create-oauth2-authorization.yaml           | 137 +++++
 .../006-create-open-banking-consents.yaml}         |  53 +-
 .../db/changelog/user/001-create-users-table.yaml  |   2 +-
 .../AuthenticationCommandServiceImplTest.java      |  75 ++-
 .../cucumber/clients/OpenBankingClient.java        | 189 +++++++
 .../cucumber/helpers/AuditEventPoller.java         |  75 +++
 .../consumer/cucumber/helpers/FineractSeeder.java  |  49 +-
 .../cucumber/helpers/RegistrationHelper.java       |   4 +-
 .../consumer/cucumber/steps/AuditSteps.java        |  52 +-
 .../consumer/cucumber/steps/LoginSteps.java        |  14 +
 .../consumer/cucumber/steps/OpenBankingSteps.java  | 562 +++++++++++++++++++++
 .../access/filter/RateLimitFilterTest.java         | 136 ++++-
 .../access/service/AccessPolicyEvaluatorTest.java  |   8 +
 .../OAuth2AuthorizationServerConfigTest.java       | 115 +++++
 .../kyc/service/ClientStandingCheckerTest.java     |  89 ++++
 .../service/OAuth2AccessTokenCustomizerTest.java   | 275 ++++++++++
 ...OAuth2ConsentAuthorizeRequestValidatorTest.java | 163 ++++++
 .../OAuth2ConsentDecisionCustomizerTest.java       | 177 +++++++
 .../OAuth2RefreshTokenConsentValidatorTest.java    | 201 ++++++++
 .../OpenBankingConsentCommandServiceImplTest.java  | 301 +++++++++++
 .../query/domain/OpenBankingAccountIdTest.java     |  86 ++++
 .../OpenBankingConsentLookupAdapterTest.java       | 117 +++++
 .../OpenBankingConsentQueryServiceImplTest.java    | 202 ++++++++
 .../service/OpenBankingQueryServiceImplTest.java   | 347 +++++++++++++
 .../service/PrincipalUserLookupAdapterTest.java    |  32 +-
 consumer/src/test/resources/features/login.feature |   6 +
 .../test/resources/features/openbanking.feature    | 120 +++++
 frontend/public/i18n/en.json                       |  37 +-
 frontend/public/i18n/hi.json                       |  37 +-
 frontend/src/app/app.routes.ts                     |   6 +
 frontend/src/app/core/audit/audit.service.ts       |   3 +-
 .../src/app/features/auth/login.component.spec.ts  |  49 ++
 frontend/src/app/features/auth/login.component.ts  |  18 +-
 .../app/features/consent/consent.component.spec.ts | 136 +++++
 .../src/app/features/consent/consent.component.ts  | 108 ++++
 .../src/app/features/profile/profile.component.ts  | 138 ++++-
 .../src/app/features/profile/profile.store.spec.ts |  62 +++
 frontend/src/app/features/profile/profile.store.ts |  22 +
 .../src/app/shared/css/badge.scss                  |  45 +-
 .../src/app/shared/ui/status-badge.component.ts    |  33 +-
 122 files changed, 6624 insertions(+), 460 deletions(-)