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%)