From 983254164b4c74b159b40b25d6da059a22137542 Mon Sep 17 00:00:00 2001 From: lonelyhentxi Date: Sat, 18 Jan 2025 01:05:00 +0800 Subject: [PATCH] feat: init and fork some code from angular-auth-oidc-client --- .editorconfig | 16 + .github/ISSUE_TEMPLATE/bug_report.yaml | 39 + .github/ISSUE_TEMPLATE/feature_request.md | 19 + .github/ISSUE_TEMPLATE/question.md | 13 + .github/ISSUE_TEMPLATE/refactoring.md | 7 + .github/angular-auth-logo.png | Bin 0 -> 136717 bytes ...ngular-auth-oidc-client-schematics-720.gif | Bin 0 -> 2662887 bytes .github/workflows/build.yml | 265 ++ .github/workflows/deploy-docs.yml | 61 + .gitignore | 53 + .vscode/settings.json | 35 + README.md | 207 ++ biome.json | 25 + karma.conf.js | 50 + lefthook.yml | 41 + license-banner.txt | 4 + package.json | 83 + pnpm-lock.yaml | 2614 +++++++++++++++++ rslib.config.ts | 21 + src/api/data.service.spec.ts | 192 ++ src/api/data.service.ts | 65 + src/api/http-base.service.ts | 22 + src/auth-config.spec.ts | 17 + src/auth-config.ts | 25 + src/auth-options.ts | 12 + src/auth-state/auth-result.ts | 9 + src/auth-state/auth-state.service.spec.ts | 638 ++++ src/auth-state/auth-state.service.ts | 330 +++ src/auth-state/auth-state.ts | 7 + src/auth-state/check-auth.service.spec.ts | 907 ++++++ src/auth-state/check-auth.service.ts | 362 +++ src/auth.module.spec.ts | 61 + src/auth.module.ts | 25 + .../auto-login-all-routes.guard.spec.ts | 402 +++ src/auto-login/auto-login-all-routes.guard.ts | 101 + .../auto-login-partial-routes.guard.spec.ts | 556 ++++ .../auto-login-partial-routes.guard.ts | 148 + src/auto-login/auto-login.service.spec.ts | 84 + src/auto-login/auto-login.service.ts | 53 + src/callback/callback.service.spec.ts | 144 + src/callback/callback.service.ts | 73 + .../code-flow-callback.service.spec.ts | 198 ++ src/callback/code-flow-callback.service.ts | 56 + .../implicit-flow-callback.service.spec.ts | 185 ++ .../implicit-flow-callback.service.ts | 55 + src/callback/interval.service.spec.ts | 76 + src/callback/interval.service.ts | 42 + .../periodically-token-check.service.spec.ts | 432 +++ .../periodically-token-check.service.ts | 258 ++ ...resh-session-refresh-token.service.spec.ts | 101 + .../refresh-session-refresh-token.service.ts | 44 + src/callback/refresh-session.service.spec.ts | 667 +++++ src/callback/refresh-session.service.ts | 245 ++ .../auth-well-known-data.service.spec.ts | 237 ++ .../auth-well-known-data.service.ts | 68 + .../auth-well-known-endpoints.ts | 12 + .../auth-well-known.service.spec.ts | 110 + .../auth-well-known.service.ts | 58 + src/config/config.service.spec.ts | 290 ++ src/config/config.service.ts | 208 ++ src/config/default-config.ts | 43 + src/config/loader/config-loader.spec.ts | 86 + src/config/loader/config-loader.ts | 53 + src/config/openid-configuration.ts | 211 ++ .../config-validation.service.spec.ts | 192 ++ .../validation/config-validation.service.ts | 98 + src/config/validation/rule.ts | 19 + .../validation/rules/ensure-authority.rule.ts | 16 + .../validation/rules/ensure-clientId.rule.ts | 16 + .../ensure-no-duplicated-configs.rule.ts | 47 + .../rules/ensure-redirect-url.rule.ts | 16 + ...lentRenewUrl-with-no-refreshtokens.rule.ts | 22 + src/config/validation/rules/index.ts | 16 + ...se-offline-scope-with-silent-renew.rule.ts | 23 + src/dom/index.ts | 3 + src/extractors/jwk.extractor.spec.ts | 229 ++ src/extractors/jwk.extractor.ts | 48 + src/flows/callback-context.ts | 30 + ...code-flow-callback-handler.service.spec.ts | 336 +++ .../code-flow-callback-handler.service.ts | 161 + .../callback-handling/error-helper.spec.ts | 57 + src/flows/callback-handling/error-helper.ts | 14 + ...-jwt-keys-callback-handler.service.spec.ts | 621 ++++ ...story-jwt-keys-callback-handler.service.ts | 186 ++ ...icit-flow-callback-handler.service.spec.ts | 142 + .../implicit-flow-callback-handler.service.ts | 61 + ...h-session-callback-handler.service.spec.ts | 82 + ...efresh-session-callback-handler.service.ts | 64 + ...esh-token-callback-handler.service.spec.ts | 178 ++ .../refresh-token-callback-handler.service.ts | 100 + ...alidation-callback-handler.service.spec.ts | 146 + ...ate-validation-callback-handler.service.ts | 75 + .../user-callback-handler.service.spec.ts | 457 +++ .../user-callback-handler.service.ts | 132 + src/flows/flows-data.service.spec.ts | 333 +++ src/flows/flows-data.service.ts | 204 ++ src/flows/flows.models.ts | 6 + src/flows/flows.service.spec.ts | 226 ++ src/flows/flows.service.ts | 182 ++ src/flows/random/random.service.spec.ts | 64 + src/flows/random/random.service.ts | 60 + src/flows/reset-auth-data.service.spec.ts | 75 + src/flows/reset-auth-data.service.ts | 38 + src/flows/signin-key-data.service.spec.ts | 220 ++ src/flows/signin-key-data.service.ts | 71 + src/iframe/check-session.service.spec.ts | 356 +++ src/iframe/check-session.service.ts | 319 ++ src/iframe/existing-iframe.service.ts | 75 + .../refresh-session-iframe.service.spec.ts | 67 + src/iframe/refresh-session-iframe.service.ts | 106 + src/iframe/silent-renew.service.spec.ts | 377 +++ src/iframe/silent-renew.service.ts | 168 ++ src/index.ts | 31 + src/interceptor/auth.interceptor.spec.ts | 289 ++ src/interceptor/auth.interceptor.ts | 121 + .../closest-matching-route.service.spec.ts | 180 ++ .../closest-matching-route.service.ts | 33 + src/logging/abstract-logger.service.ts | 13 + src/logging/console-logger.service.ts | 17 + src/logging/log-level.ts | 6 + src/logging/logger.service.spec.ts | 252 ++ src/logging/logger.service.ts | 144 + src/login/login-response.ts | 8 + src/login/login.service.spec.ts | 201 ++ src/login/login.service.ts | 104 + src/login/par/par-login.service.spec.ts | 464 +++ src/login/par/par-login.service.ts | 172 ++ src/login/par/par-response.ts | 4 + src/login/par/par.service.spec.ts | 204 ++ src/login/par/par.service.ts | 87 + src/login/popup/popup-login.service.spec.ts | 222 ++ src/login/popup/popup-login.service.ts | 95 + src/login/popup/popup-options.ts | 6 + src/login/popup/popup-result.ts | 4 + src/login/popup/popup.service.spec.ts | 343 +++ src/login/popup/popup.service.ts | 223 ++ .../response-type-validation.service.spec.ts | 66 + .../response-type-validation.service.ts | 28 + .../standard/standard-login.service.spec.ts | 253 ++ src/login/standard/standard-login.service.ts | 75 + .../logoff-revocation.service.spec.ts | 825 ++++++ .../logoff-revocation.service.ts | 300 ++ src/oidc.security.service.spec.ts | 794 +++++ src/oidc.security.service.ts | 576 ++++ src/provide-auth.spec.ts | 95 + src/provide-auth.ts | 79 + src/public-api.ts | 5 + src/public-events/event-types.ts | 17 + src/public-events/notification.ts | 6 + .../public-events.service.spec.ts | 69 + src/public-events/public-events.service.ts | 26 + src/storage/abstract-security-storage.ts | 34 + src/storage/browser-storage.service.spec.ts | 168 ++ src/storage/browser-storage.service.ts | 118 + .../default-localstorage.service.spec.ts | 60 + src/storage/default-localstorage.service.ts | 21 + .../default-sessionstorage.service.spec.ts | 60 + src/storage/default-sessionstorage.service.ts | 21 + .../storage-persistence.service.spec.ts | 258 ++ src/storage/storage-persistence.service.ts | 97 + src/test.ts | 18 + src/user-data/user-service.spec.ts | 651 ++++ src/user-data/user.service.ts | 333 +++ src/user-data/userdata-result.ts | 9 + src/utils/collections/collections.helper.ts | 7 + src/utils/crypto/crypto.service.spec.ts | 71 + src/utils/crypto/crypto.service.ts | 15 + src/utils/equality/equality.service.spec.ts | 217 ++ src/utils/equality/equality.service.ts | 130 + .../flowHelper/flow-helper.service.spec.ts | 171 ++ src/utils/flowHelper/flow-helper.service.ts | 55 + src/utils/object/object.helper.ts | 11 + .../platform-provider.spec.ts | 44 + .../platform-provider/platform.provider.ts | 11 + src/utils/redirect/redirect.service.spec.ts | 46 + src/utils/redirect/redirect.service.ts | 12 + .../tokenHelper/token-helper.service.spec.ts | 485 +++ src/utils/tokenHelper/token-helper.service.ts | 182 ++ src/utils/url/current-url.service.spec.ts | 78 + src/utils/url/current-url.service.ts | 24 + src/utils/url/uri-encoder.ts | 19 + src/utils/url/url.service.spec.ts | 2092 +++++++++++++ src/utils/url/url.service.ts | 893 ++++++ .../jwk-window-crypto.service.spec.ts | 92 + src/validation/jwk-window-crypto.service.ts | 38 + .../jwt-window-crypto.service.spec.ts | 35 + src/validation/jwt-window-crypto.service.ts | 63 + src/validation/jwtkeys.ts | 13 + src/validation/state-validation-result.ts | 13 + .../state-validation.service.spec.ts | 2155 ++++++++++++++ src/validation/state-validation.service.ts | 539 ++++ .../token-validation.helper.spec.ts | 159 + src/validation/token-validation.helper.ts | 82 + .../token-validation.service.spec.ts | 862 ++++++ src/validation/token-validation.service.ts | 608 ++++ src/validation/validation-result.ts | 18 + test/auto-mock.ts | 49 + test/create-retriable-stream.helper.ts | 12 + tsconfig.json | 26 + tsconfig.lib.json | 12 + tsconfig.spec.json | 10 + 201 files changed, 35689 insertions(+) create mode 100644 .editorconfig create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/ISSUE_TEMPLATE/refactoring.md create mode 100644 .github/angular-auth-logo.png create mode 100644 .github/angular-auth-oidc-client-schematics-720.gif create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/deploy-docs.yml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 biome.json create mode 100644 karma.conf.js create mode 100644 lefthook.yml create mode 100644 license-banner.txt create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 rslib.config.ts create mode 100644 src/api/data.service.spec.ts create mode 100644 src/api/data.service.ts create mode 100644 src/api/http-base.service.ts create mode 100644 src/auth-config.spec.ts create mode 100644 src/auth-config.ts create mode 100644 src/auth-options.ts create mode 100644 src/auth-state/auth-result.ts create mode 100644 src/auth-state/auth-state.service.spec.ts create mode 100644 src/auth-state/auth-state.service.ts create mode 100644 src/auth-state/auth-state.ts create mode 100644 src/auth-state/check-auth.service.spec.ts create mode 100644 src/auth-state/check-auth.service.ts create mode 100644 src/auth.module.spec.ts create mode 100644 src/auth.module.ts create mode 100644 src/auto-login/auto-login-all-routes.guard.spec.ts create mode 100644 src/auto-login/auto-login-all-routes.guard.ts create mode 100644 src/auto-login/auto-login-partial-routes.guard.spec.ts create mode 100644 src/auto-login/auto-login-partial-routes.guard.ts create mode 100644 src/auto-login/auto-login.service.spec.ts create mode 100644 src/auto-login/auto-login.service.ts create mode 100644 src/callback/callback.service.spec.ts create mode 100644 src/callback/callback.service.ts create mode 100644 src/callback/code-flow-callback.service.spec.ts create mode 100644 src/callback/code-flow-callback.service.ts create mode 100644 src/callback/implicit-flow-callback.service.spec.ts create mode 100644 src/callback/implicit-flow-callback.service.ts create mode 100644 src/callback/interval.service.spec.ts create mode 100644 src/callback/interval.service.ts create mode 100644 src/callback/periodically-token-check.service.spec.ts create mode 100644 src/callback/periodically-token-check.service.ts create mode 100644 src/callback/refresh-session-refresh-token.service.spec.ts create mode 100644 src/callback/refresh-session-refresh-token.service.ts create mode 100644 src/callback/refresh-session.service.spec.ts create mode 100644 src/callback/refresh-session.service.ts create mode 100644 src/config/auth-well-known/auth-well-known-data.service.spec.ts create mode 100644 src/config/auth-well-known/auth-well-known-data.service.ts create mode 100644 src/config/auth-well-known/auth-well-known-endpoints.ts create mode 100644 src/config/auth-well-known/auth-well-known.service.spec.ts create mode 100644 src/config/auth-well-known/auth-well-known.service.ts create mode 100644 src/config/config.service.spec.ts create mode 100644 src/config/config.service.ts create mode 100644 src/config/default-config.ts create mode 100644 src/config/loader/config-loader.spec.ts create mode 100644 src/config/loader/config-loader.ts create mode 100644 src/config/openid-configuration.ts create mode 100644 src/config/validation/config-validation.service.spec.ts create mode 100644 src/config/validation/config-validation.service.ts create mode 100644 src/config/validation/rule.ts create mode 100644 src/config/validation/rules/ensure-authority.rule.ts create mode 100644 src/config/validation/rules/ensure-clientId.rule.ts create mode 100644 src/config/validation/rules/ensure-no-duplicated-configs.rule.ts create mode 100644 src/config/validation/rules/ensure-redirect-url.rule.ts create mode 100644 src/config/validation/rules/ensure-silentRenewUrl-with-no-refreshtokens.rule.ts create mode 100644 src/config/validation/rules/index.ts create mode 100644 src/config/validation/rules/use-offline-scope-with-silent-renew.rule.ts create mode 100644 src/dom/index.ts create mode 100644 src/extractors/jwk.extractor.spec.ts create mode 100644 src/extractors/jwk.extractor.ts create mode 100644 src/flows/callback-context.ts create mode 100644 src/flows/callback-handling/code-flow-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/code-flow-callback-handler.service.ts create mode 100644 src/flows/callback-handling/error-helper.spec.ts create mode 100644 src/flows/callback-handling/error-helper.ts create mode 100644 src/flows/callback-handling/history-jwt-keys-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/history-jwt-keys-callback-handler.service.ts create mode 100644 src/flows/callback-handling/implicit-flow-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/implicit-flow-callback-handler.service.ts create mode 100644 src/flows/callback-handling/refresh-session-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/refresh-session-callback-handler.service.ts create mode 100644 src/flows/callback-handling/refresh-token-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/refresh-token-callback-handler.service.ts create mode 100644 src/flows/callback-handling/state-validation-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/state-validation-callback-handler.service.ts create mode 100644 src/flows/callback-handling/user-callback-handler.service.spec.ts create mode 100644 src/flows/callback-handling/user-callback-handler.service.ts create mode 100644 src/flows/flows-data.service.spec.ts create mode 100644 src/flows/flows-data.service.ts create mode 100644 src/flows/flows.models.ts create mode 100644 src/flows/flows.service.spec.ts create mode 100644 src/flows/flows.service.ts create mode 100644 src/flows/random/random.service.spec.ts create mode 100644 src/flows/random/random.service.ts create mode 100644 src/flows/reset-auth-data.service.spec.ts create mode 100644 src/flows/reset-auth-data.service.ts create mode 100644 src/flows/signin-key-data.service.spec.ts create mode 100644 src/flows/signin-key-data.service.ts create mode 100644 src/iframe/check-session.service.spec.ts create mode 100644 src/iframe/check-session.service.ts create mode 100644 src/iframe/existing-iframe.service.ts create mode 100644 src/iframe/refresh-session-iframe.service.spec.ts create mode 100644 src/iframe/refresh-session-iframe.service.ts create mode 100644 src/iframe/silent-renew.service.spec.ts create mode 100644 src/iframe/silent-renew.service.ts create mode 100644 src/index.ts create mode 100644 src/interceptor/auth.interceptor.spec.ts create mode 100644 src/interceptor/auth.interceptor.ts create mode 100644 src/interceptor/closest-matching-route.service.spec.ts create mode 100644 src/interceptor/closest-matching-route.service.ts create mode 100644 src/logging/abstract-logger.service.ts create mode 100644 src/logging/console-logger.service.ts create mode 100644 src/logging/log-level.ts create mode 100644 src/logging/logger.service.spec.ts create mode 100644 src/logging/logger.service.ts create mode 100644 src/login/login-response.ts create mode 100644 src/login/login.service.spec.ts create mode 100644 src/login/login.service.ts create mode 100644 src/login/par/par-login.service.spec.ts create mode 100644 src/login/par/par-login.service.ts create mode 100644 src/login/par/par-response.ts create mode 100644 src/login/par/par.service.spec.ts create mode 100644 src/login/par/par.service.ts create mode 100644 src/login/popup/popup-login.service.spec.ts create mode 100644 src/login/popup/popup-login.service.ts create mode 100644 src/login/popup/popup-options.ts create mode 100644 src/login/popup/popup-result.ts create mode 100644 src/login/popup/popup.service.spec.ts create mode 100644 src/login/popup/popup.service.ts create mode 100644 src/login/response-type-validation/response-type-validation.service.spec.ts create mode 100644 src/login/response-type-validation/response-type-validation.service.ts create mode 100644 src/login/standard/standard-login.service.spec.ts create mode 100644 src/login/standard/standard-login.service.ts create mode 100644 src/logoff-revoke/logoff-revocation.service.spec.ts create mode 100644 src/logoff-revoke/logoff-revocation.service.ts create mode 100644 src/oidc.security.service.spec.ts create mode 100644 src/oidc.security.service.ts create mode 100644 src/provide-auth.spec.ts create mode 100644 src/provide-auth.ts create mode 100644 src/public-api.ts create mode 100644 src/public-events/event-types.ts create mode 100644 src/public-events/notification.ts create mode 100644 src/public-events/public-events.service.spec.ts create mode 100644 src/public-events/public-events.service.ts create mode 100644 src/storage/abstract-security-storage.ts create mode 100644 src/storage/browser-storage.service.spec.ts create mode 100644 src/storage/browser-storage.service.ts create mode 100644 src/storage/default-localstorage.service.spec.ts create mode 100644 src/storage/default-localstorage.service.ts create mode 100644 src/storage/default-sessionstorage.service.spec.ts create mode 100644 src/storage/default-sessionstorage.service.ts create mode 100644 src/storage/storage-persistence.service.spec.ts create mode 100644 src/storage/storage-persistence.service.ts create mode 100644 src/test.ts create mode 100644 src/user-data/user-service.spec.ts create mode 100644 src/user-data/user.service.ts create mode 100644 src/user-data/userdata-result.ts create mode 100644 src/utils/collections/collections.helper.ts create mode 100644 src/utils/crypto/crypto.service.spec.ts create mode 100644 src/utils/crypto/crypto.service.ts create mode 100644 src/utils/equality/equality.service.spec.ts create mode 100644 src/utils/equality/equality.service.ts create mode 100644 src/utils/flowHelper/flow-helper.service.spec.ts create mode 100644 src/utils/flowHelper/flow-helper.service.ts create mode 100644 src/utils/object/object.helper.ts create mode 100644 src/utils/platform-provider/platform-provider.spec.ts create mode 100644 src/utils/platform-provider/platform.provider.ts create mode 100644 src/utils/redirect/redirect.service.spec.ts create mode 100644 src/utils/redirect/redirect.service.ts create mode 100644 src/utils/tokenHelper/token-helper.service.spec.ts create mode 100644 src/utils/tokenHelper/token-helper.service.ts create mode 100644 src/utils/url/current-url.service.spec.ts create mode 100644 src/utils/url/current-url.service.ts create mode 100644 src/utils/url/uri-encoder.ts create mode 100644 src/utils/url/url.service.spec.ts create mode 100644 src/utils/url/url.service.ts create mode 100644 src/validation/jwk-window-crypto.service.spec.ts create mode 100644 src/validation/jwk-window-crypto.service.ts create mode 100644 src/validation/jwt-window-crypto.service.spec.ts create mode 100644 src/validation/jwt-window-crypto.service.ts create mode 100644 src/validation/jwtkeys.ts create mode 100644 src/validation/state-validation-result.ts create mode 100644 src/validation/state-validation.service.spec.ts create mode 100644 src/validation/state-validation.service.ts create mode 100644 src/validation/token-validation.helper.spec.ts create mode 100644 src/validation/token-validation.helper.ts create mode 100644 src/validation/token-validation.service.spec.ts create mode 100644 src/validation/token-validation.service.ts create mode 100644 src/validation/validation-result.ts create mode 100644 test/auto-mock.ts create mode 100644 test/create-retriable-stream.helper.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.lib.json create mode 100644 tsconfig.spec.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000..d9620ea --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,39 @@ +name: Bug report +description: Create a report to help us improve +title: '[Bug]: ' + +body: + - type: input + id: version + attributes: + label: Version + validations: + required: true + + - type: input + id: reproduction + attributes: + label: Please provide a link to a minimal reproduction of the bug + + - type: textarea + id: exception-or-error + attributes: + label: Please provide the exception or error you saw + render: true + + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce the behavior + render: true + + - type: textarea + id: expectation + attributes: + label: A clear and concise description of what you expected to happen. + render: true + + - type: textarea + id: other + attributes: + label: Additional context diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..217eb84 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '[Feature Request]: ' +labels: '' +assignees: '' +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..990fd55 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,13 @@ +--- +name: Question +about: Ask a question using this lib like 'How can I ...' +title: '[Question]: ' +labels: ['question'] +assignees: '' +--- + +**What Version of the library are you using?** +... + +**Question** +How can I ... diff --git a/.github/ISSUE_TEMPLATE/refactoring.md b/.github/ISSUE_TEMPLATE/refactoring.md new file mode 100644 index 0000000..de605c5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/refactoring.md @@ -0,0 +1,7 @@ +--- +name: Code refactoring +about: Any code improvements which make the code better +title: '[Refactoring]: ' +assignees: 'FabianGosebrink' +labels: ['refactoring'] +--- diff --git a/.github/angular-auth-logo.png b/.github/angular-auth-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..47d081e940555fd5a824a70c3f9cb01060b88b90 GIT binary patch literal 136717 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

hx>5aAG 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�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�WIoB{ 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

l%-Y7pUm_=?@$ub*-mmjv{Eu# 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�`0>m$&7xZo`Odmn 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

lD7Z24-j; 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

gG0kDs8wBWZTo59Bg6Kyu!A5ex02| zLhavNVW-sD4A&Y9Vv|+q%68M*yI3;Bu5__dr%bsm1ME6Kx7uAk*0HOiZ8m0b~I5T=m zI9+VTpc>^{n#qP<8o#51+wA*m`h0t&Os z93(QcSS1Dc9Y}*PZ}el(I8huN2Lw~{P#CHZEPkPuQ&shOW1xa3Z$+MUb&(?I%N10) zdl~m4o8Cb+NjFAC>{5X^y*aYS>|ZIY6twPBDOq9117L z>i{f^yk_kt#AIUlCvBI}m*7;@7LIUzczUUrWHTEKHcDg�?)%vc0VgPie!2IpI7 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%0Dq$?RXeIY1(2nfiU4MQ2z@Ph}Y|w_FAC)h!kn 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 z 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 z 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%0ALI0+9*BLQuV3_f-*gg^#$%N8$1@Yc>e9$M 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 z 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

)KF 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%0AL7`kWUjrMR8qmPj(8-5GnC6DA>RzM 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"O3Hne0M)lbd3 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 WbWuV$L4*6bO!lZ5|CsJ0F4G7D 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

(H^EQqKN8 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�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

@Rt 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 z

F(-he| zD!#5u>C+T2)(Aw(nasGi(_zMwZl6%~^4gxKHy9<{Yzu}vr;`ya(FC5}J@`|9xqtsg z=tP{Si@huS8KPXu-)INDsDRx6x!@AmXHE0aDCfCJxyL6|U<~oN~c`^s7y0-FB4^I<6NJGcB5 z4QDn8Cov)O)AP3*I7Bzt4@PWGgTn$&>VEd1VJoHbO80&z~Gqa_DTTY$ma3PG9Km<-nfb)y$6DcN(K*&$$>X zqxKuHH?}s&e(qIEHzmuSDa_YE(?!TntD%Ey?rK$V%^A_s`|s)1-()j1)?peC znt=~y6fCraaEg9k3k52(3XN*3b{DQNK{U?F|L`z(wz0)nez;V>G21?v$OZtD>%T>l zNJ|SXw!|w4&vrl0cE~_5nZskHglrRpO@5NXEhgmNQonFs0y~uR<$a2 z=~hFP&YBE(1zVkOPRbznn3HB0nfr&T)#DO#vMXPPT+g0;a-5X$fQP8a{G1U`IYn-7 zxSs9w$|jg~;KNW=<_zfL#iLW}N2+KK&nN0-{Jxdf@`?REDRMu@sPK}$qO zV#-u|!zFenEV1ken{E|ctM2!CTeicwx)8Q|$uko|2IbIgh1XZm$12VErn!qprq2yF z9hPMzjooZKK4DY;?WF*nJp#U8bu#bOKpW%l-v)xWtZDIT=9I;)X-~I5aJ$Eyvi^=2 zH4j5VCL{O1460E-l;)#DI#g;R`OM6z@-c+zJu;9z+h4nvK~M?Z08xJt?tAHS#HZrz zbq~S`&Zz%ljy*|BYpfPUoIknsy0!h+hI{`IggF1MLh*@zT0^mo54#?GHowNr*D6y* z_+9!v{qmg2zOD~~vJ>w^3NK;Pt1HC@lCLwLvg=LChwiewtVSQPmUJCLbJTy|h_h5J zYxg(*uKS~Y`0B`o2O}ppf34hcPo>s|`u;c1eA4ihfmOC04Njkiy&RvuBU?1ynEr(gb+mn(;7(aq%zGy~XnMX03D7ydKF6943ruqTe$Ivsz=(2A@{A3!!4aTs>Cn)k z)moAq``-(r9`DV5kTDwAu-+mcgT|F@ydG7#E?eBdelH=mxRD%WRh+c5 zzw-3b=U=5IB^^yZcMym|MkNk!0-q@2xkQ%=2rDr2CwztTXJOGy?|hQ;$&5eNTr&*LVw_1i^{0&Qz(zh=a!nO1OA z69BcGRMCha6ORoG)Lq$ptA8=Y+r})ew4MH%;`TkrMfa(#ys_D*Fb4U0JiX+{G9MQz zE#A!#5}slEY|?1Fq`=R_V^lAPfAS)NFH4g_V5S{zD|TZ+H2oS84~cT#E;6W1sjej3eHZur-`pNn&TK&%{Vp~|6KST1f9&mU&8%3l)!}&%Z$4-Q{h|Y*k z%LNy9^^AZ0zV=t6``;wmde0Zsa@2bEjMxrFg0>ZW;HwYE zA#Ft}G|v16U|0mAGQ`jVImL~3T z)wJ#ZBS*RjQfa36INWW{5X7H``Q)ubu&4mL>=l7zu@WL%?~3&SkO6xIlF1{d1F33J!uh1wr=M z_}%4pSWT}m!SjGOT2AAE3iOEVvD}g}4{sFy$W{?sM9DwU=4O@ThyffM5;=JkYK-%} z$GOI%h@P-`V{LmXjOJvY#~d*4EL!&AOpTot?x_QBjC`fBzQS{T&4D=egOk=n7jJ|U z?;O2SRBL_Oa-YY1NX4he?}GriMw9cKwUw5tKEij_L*2(&d8K{=M*LC zGnYqN@7|*L0f3?D6hUaoK=_WKGrzN4={ri-hs}%=4*q^p9K#GC_SHT%Q*H{)W-QE8 zien+nmp?7H>^|k*K)iYOu=}Gd?3Y%J%do$Z4MH!(X!YT9^Y(KM%<*Fc*BYCn zKAlOsBknIyc9#08Q}JmV1D4`_2ms_n?MPO~Mk;*-wrVBD%&tH!-lv+B%d5DN9gWD%WJ z75MWX2)R859?OCT3E=BZquJ2qK1#HIGEN{|*L``XHpIBmBOTSW;$E8c%176QS3#T6 zS1>}j95FFnmEtJ#4&SKPVNLwJ2i0Y2@Q(#OWlSs)s<|4IK5qbjHiB|kS8-eoIoUwY zKu(FZ$Wl@b==zjQR>RV%0D*~*Dbt|!-eh7Su%ldx=mLn>WB_jl&KAMhLTGvnIz@_L zOSR&~aA^$5y4osDd5y|=a{dYBUNHppDCk>tbC(2rGDf3Keck)Ok}b)$6JKQiJ58uy!!)lx!6 z?PY*t0dQ~V{dSI^eA=*+iCn3szGkQfv7n9zbO>U2x(p6A(o^gORIYuaC~UjR$I`l< z*xDCubf_UZ8cn$uNALB{2M?HS95yUtVAUk%YyM{_7^mH>M*btK$fdfLTu6E~u6fol ze#GQ;DfsR@xlD@rCsbQvsxEVNI~jNAb}C&goFfBSDD8WV>9hbNw4`j>m)*p2uji8VB zncbNSi5Rw7ZDv5_fIAt)&oQd6c0rMsTc~7&x zNlRP}g4kw?>9`=%(3n5(zRS5e#-xI)aq4oNwxa_2-7&fkj zmuobGI?xi*fzU>xhpwVoX7McsG+7sX<@CkY4v0#J?UCd^ttX@7lj+;?a94lWEpTyL z%A=odDvnsZ*m>HPqO$Mq9Px5Ya&Mw@|61K=n|A!XaVZp+h&z-Sn)oDX*$3*OS4em({^-oC?twdEgEZ&tKAX?KOa$;Pome0K?UuOQW38<&u9QTl;I zdk!YSgUdZ}V0EG*F+?k8`18MaUJG1OB4>nE>Trqy4odxEJG6_#jA;OFUOkiv36^5LTR#(dWCRN6qJN-GPDdET z1&=?rbYN=wa}PR-A)@;x%XKuu&lukDuE8YgRFUc+=SD012$BU@H-y~iqE<9p(yJR? zYe?!wFa|Fu-QBMU&@p(YQY7-E8;6m-LSLUw>bt&(F4gLfk$kH@GP-YjlrNV9AS3GC zxxyiDE!5*DCar0>!s<7zoi^{UA(fK;KN;~h{<@|8aF93nZuMaFCjzicG>h5Nn1H*c zN>C{Mt+U)?SIa}DWCxDNYNl0V&eh^vO`#OLK?H>Oo~hza&c)Q?IAnZUil(JZZ6!t% zUFX_mL~MU=g5=;?R|skBt^Z_(UDdd~@9>sJ(2sGN?joJ`Wm12PzF8+{RW&X@R_iV^ z53$L@;Jw;MqYGVPCP#Q+3eYk89}!)RJI}(zbF~E3IMloCt&aJ#M&1@CSRPqKk0nKL z^j~Z0w6nLi&JZq7t9+E2e3q5!dlA#cnJRuX8_Cg)`I;NW+kOi)tAZ_XbK9KPmmuxz zE#s1?ancGFjx0KCF4pp9JXr?09u$mo7^kyc{QXRwKy_JY`jn)QU)y0Y%#O5n`Pb z(4n6~d^QtBXKisOr1;C0P99#mB2c%%6 zE+SQghJpy$GL$uA3seer2N2&*dKbhnqF9(vAvj)GbHa?I&Co+$wuA;*sB_`=iAJeR zwZQ{?y2-0aM{F%@JFp*^#8Ut&k*wk`#y;=yd)a4E5PSZ`1II!DB_zWuIJ%!T zm=+vJ&;QL(rBKZ=K}*4lVXOn-h1DV(H1Xs#5K&q6c9TK45I@!_75Fi!6I=BbjDRy_D2h{A2x=&;)--sBuViV+KnR7% zPrH&F2UDaB zn4~S#t%<}x1)-MpDNAC|-TRi~TnMWE>K~AKJSa@zgvzDg93Hfq2BC%4*LO&)KFc&O z4q_*km5#xZGkxT#XAgg1+6Io;3ezKRvch6gNaz?;vL#W-g0gR1^OwRdlZhW!3>WMM zdsN?&r7p+AE8mL!)E0@oo#uPi!)!OHIEFuK}6O7=F0I}s4Yg;(-O8}8Af_xMbdStyZr?q^yLE>ZjRD_zXGK4!-BF zFdkI7(1uuI=uYS(2~0GbOQ__24e-9RL+JgJsh28+QIauEfEtfWLiG}{m1R0oKwhAk zUyXtScaC!xv{n-dT$nXSXJQ&$n68{*N&aFT0*K(-`{t#~No|gs8($}!ocKkItP!i* zx)XaqL*@w|85|wCAB@8xekNPha85Tg7fP#TtEqNlt7F%5wfYpfS9x04e|m>#r&TYU zo>O_)SQEv%Wjn>yEMdXRSzGdF`z`D7i7YtIhy)nFLR0(~_FJ~y$MziqC$S*74{v&P zUrjTar(!qX(N(PMA3=EflqU@+{S&qlqJl>D70&Y4#pRw1ReTf2seIURm!!V(_m9dV ziEI7ud~e%}enIH5hGYW|k9TjcDdR5ix0fW)!dL}9?N*ZUD>t_C#QH}CQ&eC-SGV?8 z<{Z&Xb6ffFgF<(4XE#(TWWU&KaU%BM7qAI7{t})dn$`%$j!xZa*(QAk5vIM3toQ%^ z(r=fn&jnWbw~b(eKQwmf#Fwkt+nzEh?4)-W4{+S?TSQSag$(f=$>Fu()JyT#K;kO$ z63hA6zo(ZUvE_|#A(Bs9mu8nAyB}5`H4FaqcJudli^Wbqo-KTHxo3{)JtUvGL|Rqs zcJJTcl|O$J7#8R6n>Y}z8yT!zF>qBN0+Avsq-^(3xyd%ARLC7&r#pQRy=rP+XM1Y$ zfaI-9%S60vSC-5FHXdmmD8uAPZ_T_e(3r}PJL&Xo*krd6=lk*9F6tJnd`)7;#jI~9 zPH#M>9kkhS54nn6m(RHWUA9|3mOSP1MVvlrKlaQg{#;^J!R2F`&nKeK?{)oIm$Om_ zQ`Y9STW?)v3Vv?Mnk!wdiI0NAFy~rdE+^I$T0cmxb!pZ~h)#1tO=SF)H%*^n9ncM@ z`#eUzIa)BjRCF2~N_}@igw8afFHT4->#q!0?mmAw)K{N?-7@5VP~JLyVjbt>&)tPb zcm00lTnW~Cc@|gr%b>=yo$?eN(yusF09~#ZO3gV%)fs~$k3(i=cNx1SQ7dH6Iwz5gNbXVdaLU53V?;#5@o|f(Hx?o>oqwuF6u@7W3)>M=w0k#v z8|F~hsNGUzz&l;L;82AG2Tm6$o5VtdR42pO7!v+hHhefAA|%w%=>7_J;VB!FjJZm%Iy`CU!P8(ak7tHZWdM4G319*Vs`^S5W70rEa0qs%-!&3s zMqbksK2?m)kk>ZBUV0vqFT+-4%Ub99O%g1pQH|TV?N{?|O8mu%mTwErd6p6J5p{fjG^q=_(61SpYatg@6ZCdmPAXm4%lD7BCN zZ5|8>mzc3jhMb8)K^DPSW!yIb?JX|Cr!vg{zVk;5gV8ZTwa7}}KG*j)1sb#Obhogj z>%PtBc~)HAY9Y#{Q-u)qKqO|gb;$IiMlpMF)MbEG?bm6;`Ev767_uHQ}04d)zKvzp&vuv5dp8aV%vRmP-w7uyud0-8>Zzj?-M55on+|1jgvk zf{z;eGF4K9MYcVvo5!nzKatBZ&rW|yTTmR6-G(r)MLYQjks6T$#Z;iPTk9o~lCEzIVys=f4oDzeJ-)5<6 z)0T6I{tjbv9E44e$=9I8ZNgK((0;A!J4QK>xpf!;RrEZpzY8W{Dm-2EmeuLQv7}v) zK9X;LG55{8-D?Y&#^>X@VwGM`T=JJy{-ymC27~SufWf^=Eq<|dLf1<^q_*&r)91?A zy0%H_%U(vXW>~nD3s9`mZ#4w+AX-ckMMBN-=pc8bJCLh3?5GGkeb?N-HXx4kal-p& z_a4o%Va*W!bVG^CT9*)%ZfB)QbE!)gfpR_%TLCH#mCrSqvQyT^b6*jHIht4+u(|O? zWzQKAksl}kMS!?Tl$f3M%IM$^+~AZmJYv1$L-MiMu4rwh%A9XMKHC^Wp^0rDmHH?i z!e2A{~%_<0zpl{4*hbLo_jD>Rh_K%RneDQ?~NJ_fYdeY5O5CZ{qZW<>+iET zXieRIK)oomzCIZ8p_h^2GbbrRS}}z(&$`=wqQ5>{^_g~Fh(Ydsw$(69C>{px?rXS`k>1N$>Nb@jf2jG zoIv@uE66g=kg2Qw*Zm(%NT{_&~$o5gSEAEpaq6BF@>HS}qEp)8hQP5n^<1NfTfFx$kcgNk1lLgVX- z)6q_!-h6ucV(;yyd*06;&;8rITnf#|cpKPI@n*Rot*#^Z_vMy<1wp2r+kM}(c^f$2 z`|kFZ@(1(j>u*wM!0G;N8GT0;G=*9^RG+Cyb<5da9eV8V|2P;V*Yc3}tQYb3eq!r) z;>Q1(e(1x1mDWXD?RBgK4PTyVGEc}~wI65vaUg9}9LD8Yw2INHLTfiJJO_Koypiub z%wO+rlq*+d#MoT===4>Gy`F8$c;WOo1Y=D@rI&#u6Z|mWoK4Flc`B-@%%+>R{&%(c zM4sT|W(%8Be782h^{1v1nx)XhsLG+XNjdwed7F|oZJtps$klSO;L%M)on?c$BwP1^ zZ3dbc>r~`ERz`a;WRjt;1bn&L5sVA8dShxHNf)(K`b1tL#LTyKTR3`ow;eDh+iOjIjzv zrb96q4EQCxVy&H}3C0#wTheX9$=8R_3LWzYIE#(A!h^hZyNyj8Vvu)YHUFkUTsPYw z7#JPDvb8Tw4)UV3Vz)znQJya!v&u0|=dG%WElI}P{As0Vo(gifU%ufMIirp!94t`~ zN^tK^^br*1+hZ}$pPaaPU{&37PLRc!xb@oZQQX7{_Gl|N`ds$MeB+Of`IKK}yCJ3t zpX|PRoyllAn_lafaE_gE03#R!BNu+2)1D=i8vbI%nIX7HZH z9N#~$Iww5AUc}gQ0K`m@iF^94&dNORb*q+-27nJ0pYxgDX_?L=C8}&2&~;i}Tjo{3 zdF`htSi){!JMV=;8txtkweGYv2s<0)$4#=y56?KMMc~Y2l$d0gM`ct1FN?hw&Wt6U z?pU~_|NFRJ=IP*u8h_hM%S~nA9)3=ZDr3f?g=M#HtLLZ^piAthK8LRn$c^H4j=| z^?y|w)_mn}zVWA5*N!${Z0f6DId^sG=dqK17bz&iM(y(lbdT;)sVP0zWTkhx4&Gd} zv&8H{Xz|M$P3NZV>#tzHTvqfnZNF8MpLc5DR`y1)-Itfwe-M8~)h~ar(t1S<^wjF4#D!hnvK8t_YI(|0$b>{V`U#-=J*FRb|`{mti zZ!)(-`TQiS_ej-D7p~HrE8k^aP1J3>uXiX$weee~w}++iZ{7B~0*mM^w>or%YF`@1 zVBN-F+TQ&>Q}U;+OW!bJ{Io}N%SFqcpH8>7eX8gPxKYu5F?mZack9(%sH@pq?qIL9 zC2eWH+{~%dP{qc{+D~Z z9$f1WIQ@UN-aRadHR}H!PJ)Vxhm_P15edx*k%$x#kq8NmjLeLT%*@cl!-MeBk2 z_Fgx7q3(2d*Ivkc!~V?Q)cVk~{E?bb0KM;Gaoz5%9nC#?tW zr}@@T4uHlxz4yfxz?{%Br=d%Q?*>&I2%5CUsS^Wf#kft@(z8*wc1BM*v7>mO^5QQP zr~o{H>cOBK6_8X6e0hdb8gLU0*kHl*TqD$8;n1mrp>?pQW=E_MA?tTqjDdGzP%{0b zof)njJwV4{_;e%T&p3N;=i5(DkuSE`3aP6iKZNd)1GDA8KVryY0FE}pq=3_Gx!qGO z>|Zlt9o1&G5qjB-SR=LrFz|augu#eL_d0oD;1d|sEQRfaxZ4KO{lkd((F>Wb*zjEp zo2g$q=S%CeQx9C4LiKVxHPzv$b;=Jjq)CRJB!7t2LYL$1p#P#~aqfIJBV6=Aj1hXu z2z|{5=IWtRoqe+&xW(zUaj;UBpiX#7+)ny;04ULkp<36tm401tb!0zuM@;*@EtBwMSOi z{xquey-r6leFmd{KL)ZZXiBO%tl;Oh>?N*&U-j{)?-sY)`8L|GcXsmaEyhFvBmh9_ zp(G5-MeAg*2h8SMptf|U5ju{~R{-#fdSJF5h<^jU(Bs6p3JU{lzTus==0E?geLgeX zce(=JjGwYEXvX0%{dwiJn&~fAj{5G{+o%E`RLX%Nty4_1{ragukJ&LzH>ro_zJ4n1 z=+Vj~0?$t3WNpk_y~62_T{tV%$r%rEOLj^X!|ZD(4tu{6YsI=@PN~^wXU_%l~L>Ie8%9UCV(hb(-kmMV>FRJcpRo<*oHk^wO!3A3he?JP*8`%Y@POCkkS0L7QMH;8SGfac|P48!y4obNu{ICU!{ zZ~mMMB#9wQh;P$q29Khg%kp5icUynR)?!>>GYu0yfDFOe?i9vBm!rIrFp~f`yHu$Y z(g^PnLpC=~*0n)B^!}qd+ZK#nPVAQDJ$7kgT$T9wivADsX4vVly9qyB`P6ss7C-_n zyjvZY?zsaObH|SG!f&^$>$7HC-?R210Q#4ktL1UVIM*vg3k{&cMyW72@SbrtTAHRO z4FQ|SJx?SBFtx}4aWDx$56PfrJOH5rB(2ju9dfG9{R;+Q%AA-wWGCK!nG7maP`9jy zddSf-v(3LofMY~kbx681&aDdS$euQ?2h#Z);dp>o>%LC$^``#egd7p0bLwma?DPX^ zjZdtcF|>FrH^jbUl3Ocg0y40`X_G?z{N6{#1>0xTjRk*@HiabYPeEbuqJNB8Av#1L zIOjx<9yLRqz)}x~X8BWhxYeM_@u-z;e;&K$37v4wF~ZZtz`r`%YaFLNM);5(HHm{L z2b^wV>|kOfXtA2i59lh#?_V zaw+=e6ujed3^>UVc!+lj3%5m!?F!`3?-*1hfJQ4)(c&93KZ7L*oPO(mOV8S`%DeT> z8A4wO$x(buQ||uMW_wFvKW_YXFd!lND{KJ(_XZFP%`3iPR@Lz6(IJ9=#hDXE$&4Ej zPQ9#GqZ8f*6HdTcp!1CQA>(J@h1<5et&`FWzZVDfoypu=W7I1IqGQP&hhCr5r$Eq4 zf+%BQUwgSHwwk%&zdinf+SVh={=HFp?m3C_WBm0UXNQ4Z^a<36@$cgU9yVyW>~|YJ zDcGj<8n9hcI`7(MblqT(dt~>OhKZ3m!QaUFLj>M&74 zkDXLIK~%K$44-}dJIHP4q!VteO_Smbh4Yuzo_+L#5o}l#cB}QkaiKFtKl$c0F;GDo zS*d5(9Qw(v$jZMTE>LVUH5Z_gd^-8Wvpm=Nyaye*1x)q+Hp>Hl zTztN8{h8;aO&QfbO@I{vrhO1T^2jNOy=4Pa=BPse2&X*MJYn%7! z=b&O%;_Z)&{kgA@xM4;2+amk#w#7T`8ZdA7BW$Q})ROOl4(ztjfX>P=*W-XqRA~3D z+SmeHBXm=i)>jpN%!0&v7x=>Jd`ce70q}{p{kEMSd4Buv8TCe0;imV#jkcR&e=Ex; zHcDF{Serm!Md4no`6dECbZIK6zNSOgMe-V_ANBpz#h-prPH0pL-yaW7TyymB#b?dK z@22j{9sa4|dY-;p`cJe1;Fd0|d`?@IBAXP=y>DpMw&-m0@3(I4L(^d-Pkdg<+vE1zoPJ5Mtv z`fnc!o0V&xbhOSe(Du<2Wme# z&38ZU-5fhZz4ZF4^`jTHAu|k&f-h%3uG`$$d3trd*EH9^yI-Asi(C8qk|tMHc6j&M zTB9xQ+4J;0tuJpTm(ArhC?fXy6f~_FoR;fe_?F8B<@TO$Wm6$_Z6m4IxBQsbGj42s zyKiFp&4EpCo;NdQeBD&E-gV)}tmaEaohx0BJfE^Mzxhftc?Ki-*%bJ?gZes4=ASmO zh4aXU>SzD1%lu(LF8Q?LYK!XgmZ`iIc5ey#I*EAeliM-U_OW)zK8mRM%8EKr<-_qw zrUo(rU)ayMHO<>GxDXu8YOv?7*%Ka=cplnqcbGXR@Q7Tw0G|AE=uPdko5jIXG6?WV zU6*iWYszP{DuAsfFPhM-xfmRS`7@!zHvNO<+sS0yx0YL;(dI3|Dtq|a><&nrwlsYd z;|9?dtqOPAc6k#nHsjzGKwVm~cr2QD%kuZ0;TVnCz;n!MgpU5pW zbshQt+yER)f}JjjRzePH4+eJ5j?HR+wX=9M2E`1XHy!Hdc~p6;+UQ*IyvNV;apQ}L z@Fr)6ycb2zha2b8Eu-bwY>sEawwoar-Mm)HbV04QyAYB>`~0WAv)osyqDBBGrP~ch z?pY4`y|W_R&Ckc&wwRT&0{I6`8B}ftWlyVXADyak9{-)XHYhrF-}joTAC}H9PnP_h z+XHi2O6IZ^&M;C26#5f?7gmNT2InlH+%V9s#Nc9r+X2t&T)q26S*TsjB2?@9IONcn zdx_E?i|y639jmp)xxT=Dd|Uo^jGc>0=>tJ2LXz8@AtMm`SiCoQ^%{H84PS$fV^?!Y zbH1hIugzla!>soU@8#5%rMB~9)xuc?Jqp{Jrt9$Ow?%D%7ys05YIx@p&=#GSGguz$4MSG7K+q-Yr-rrq z+53whv2X5hS$*n||NFLRuuq!oKpn>I`IeFYdg-j^8Obh3`r%;_C93H?9OMEFlBKJU zcnB)UMl0qzfAOe)&TaI%zgZNZT3kMvC4;-f2im@XK6nlX;BrF|oZ)PjN9N6T8bn6w zeC@Z5teAuo6wfJXL+_>*E@;pliON~O53KUz)?Yr?oxTF<+NfCix$E6p_^jomS+nP) zd{uvuXW6aobHD{C^sFOiPq>vEZ5Eaw*O*3ODE%vlc9R00`G;b{zVHZq$HMk-`R~d@ z-i_pVL7uVJ(rFhJ%*w489cS;;ZLVIItzlf~k4 zK&SHA+_gL$kVDqU35;vqYr+}p6;qi{AODrqGlOg1*7)QG=3Hz~zi5|Ij`DTp7tf6- z!x!cZM%w?}bPF~P6eqX7avBs*j~yP>LTo5`ul z)vnx*^;>hiSjNb$;dXLk-;1)yhK1(~NjmQ4gSWPP`UsW8c75?_={$jS|5CT~Te0S+1AK++#EyTqSUR1$8&A|k{{#OgJdTQB z$&cXXVA{b6yH1-q5GRaQbM8_ASOag+=|p%1QeTAC0y3?Jpoh(bDdk!PK>+pm31eZy zR)s2r_$v)9N_@h!(N}uMj*4j1uDzqopsz@>LAmvqI^7GFia!^FKbL1Z4QtRmde?mH z0D#Bn*2&aF9Wqr9>v;h2)x&*{A?@_4ygGR1Qw|$FA$vWf`40QI5i0LHGe~+&?lB6H{HcYf3eDt%xo{ZN z&H#ORStBP;d#XgPWCBR>B|>0_@F6?qJnxFv!Ag3Qe{(DR1YYayH~U1#JhY#a^C8AF z-mEYD)6e%FId^S(c`ao^qE745fEsD(UHh;1cE?dkR_7gC^3>K#n!R*~l9M)k_j>ZW9vwJK591x$PP)AB(vA-D<<^UCO&8q! z5&{pC^P*ce;}B5drFYyGabslPp4NpO$P?F|U19~Vx8ciF*L#oesNqNCZJYK*(52#& zh4ZwBdgjGN-xPJvWzCzH-qU>Q&bHseog;e|18O(Q zyeQ9F9!2vSa*G~yiNYRGx?e3pBE%s}hwe+V$jH4j3XH0yC!G=>6=U`ia?@I3 zb72`JNcTF@OBs5l8IiwxFZGg*J*qM|p~5)3V%hMdb0`HR4I1~*H8ZOL)vf|il}#ug z<5S|xCHTQjND8*7L05s^=1?%WARt}rS@GA^0QHv;hgi-6NwWq+RxC8YlS^zi9aGIp zz{jE>{uBR+@ik(O!8hwbsXpb(W5|M1q#S!~E2?niF*sgUl4mGtbl(2F_nHt@*mVMc zlWkUNTb3Kty9+f!F?23ME!2C0lJX1h&TN^AV-N@qly6e~y%L^mDYnBZ@^!$}UPR9`_#ocK0fStIsdS8X zS^y}Zbx4RFLNs-IV*xx0(eA96&w(rlZ0s8gH#3WZEsKyXin`u&Zej%;%vZp`qVP7i zCO_HsVw=Zz@I}!*zy*l=SGAU5 z>aC#8kOCQIMr<||>MG8}TI?FMFsu>jeiCVqIs=%e@6zg;Y!!c%Xxa%j!N(lV$qI)J zA?&YUMrD7kp~y#1Zx91%rrNnE*wCvd9>9Y?e7cO<@Otm>m~$_$w^(>g)ghnq!OitUM(OKOugkgkiE@W@_&i38 z82+sy+I=;r{@}WOuNT(ys1NP)>$cs0W$$U*n#U}}m=IA^m8%R9kAfgfYF8s%5f7Ys zjXx|Dkl!X+9fO_4I`F%vgSg%>Ioy+C4~X}0K0XC;1~Z3p~MyjhcdaFF=eA!pmk z)|jV}Z{^^_!q*4PhwdKXuipN|54CK?rC!hPPxs8hK)ww&UDh`?XFqRE@w>S9{n^Uc z^X%dCl9)eZKb-kvjpKK}xrF)tCpwA_bfmPVp0kNLafC4WCnBol9Bq^T`nbk9mY3a2 zW9;_!q!;pzf^t(h9#_ z@OhB)adDCJ{+34vN;7_3st8RhO!<|r%gpG+6QvLLKdU|9=(zSJCG*1G2mhRDy7X`O zGP4@fl`e_f7b=6cB#dxfK0y}EKR5Av*+t5g;mkk&D35jW|8T`}`0_FS>w5=>F7TrC zBMY;p__bU*E}w(QQi`Bmdr{-l^Oe82mx_r~&XvOnFw1Rr)AEQesTGa));8kO^&1ZY{sffPhv6Sq8&Y>(B-4955p!+9OsF6eiJJP zNA92V&YTjLy9aO(<=`tqOe~p~@RD5le7WgFq znd1C%rSFedF-|Fek1QMX&pz$=;cD#ym*~&Z`ad#yG>Zm&-bQ}gw=XN`pZk7a4mUqB zbNobsWRmXOe+iF{IH8%B(El=&jj>7bP%rXiK>W!z z0pC|VviN%+S>a~UkQ5I!Gi{i7np>BKt}cobtZY^wnI-2pYoTOukB=@Vd$A%QX(5uj z(X|B$Wo}$!9=mVz-RT#vBdv6Pd073R$IhB=?VkCbn>3r!LfU^uI{Dg{XEx=_6i~{J z@Ea=3%3`P~WGenz16iG^FLadc0q|$1OmGxiWbj3G@B;=-APNyCQ$0~^I%(A;>Xo|J z8h9P_>vjYm1=QZxY|+|;l?3IY6doLr%mQF_McxU^hAFwv9RnMicAvk%+>{I0S&B~O zX^3^u^n)6=e84x?Cbm~u0Llp0X;vzL%T=Xr`l1NI9LTvS?K}mnWzACw$s4b*2UCO$ zMV|4Y6&}4E)j%49K+#psfpO zmnLNCa=&>MuEsln`L6&K|9-2k7>Ygn>&3Yw6v7s}DGZ}XXgsi4U+B?U=u=YMGl8_1 zVHzC!^ zP$KaA*4L*IqUeFP8w;I;+mTM<(P{4xa}EOmmXE#%*1Wv3JXX+1wsXNb+9F{+H`c@3 zBJF+C##g$XFhmxFC0eg|G$}41R($ubbNOp!yFcn~mdG+RhhE?#8`iEcFK6jP=O2tc zoj3DC)sJ6;6Utko`>y6ST)S}ZbO=~o$&4GmgG{k!)jJ7+gF5YQEg_-s>Oo-d)BXA1 z#yeaQD}1hZo2j|o-<@$(Z?zuMBFm`STl51x$>3kT{MzL&u-17BL>oKzMDjmhtEO~} zEHtbb*Ds9pRA;=JN8cWk`TPwRohi|AD~>r*=rea)ILWY2T(VwxT2}FF<1TGHEL9k)82#@4g&JV zaN^`&O{6^;-b={SPM!IL5-n(sO_XmMOa(? zj;eli`Bg<)wI25`SX1l`q?QiL9ipE1Etd7AW8rg3XUzBe=O?;e52VcLCjQ0x>Are? z@{i#=RpAexEiDT&tIl=5clMp; zz=?3MKvTD8_G8S|pgoUw%w9IX?x!Ah@qzD)gC7j54_3H#`Ym0W{cLvRmJ5$~AukvY zVvEjydq$63d%7V?W4&lBa=qtLcdmGH?%?#DPjdT5xm&aY@vztnk2mhPnDb_B=Czi$ z`?p@B$y}PydBUpCcelTq;63^kqR&5>bvu6@GqiKpBlfq!OCbdnw#y8!=X-SRv#FZm zf8}N%D@K=o`D^&guiGeU>hCHhII}kY+0V<^8}8K^D?FkB?U zgr2ZJZp$FcBQyP9Lly!yZa8q9*&CIJtKqN*Mgd2`5aes4!sSGB@r+AGjPIbkhrAcH zb+`y%TdO^&gN1zWgFZRt;wjj+syzDo#f^HX<9DhW1D4Q+YYRhy6flGl&xkMs?scPJ zxgHsW)}jfLgYSWI!2~@$#F2$BOf~`l6LTZ%*V|i55g$la1Tq#houyg(M$TDX;+c9Tc7*-!qV6@*V zk=cG`>bc(|%iqlQE4QYh%JUbLVZd@*SX5EC=R>qzAl_}m2yYgg3b1G^J&rw_Lru%N zUep)0wdC3U$loWL9R6+cIq_Sa;r)wIlI2J&_m0k*5DvD-iMo8$ptcB6ERU32r}klrl}zJygcB&@`WZNx(EYwj%zK6RA#;Lr9#j-0a26ae4uya04uatE zP1&V3tg)#x0QvpDz7+4FFoPXZ|E+Spd~9IF(?y|GVhQouu)>jAR=T(cZ?mxF*7Vh! z8(X^`h6}VEXbQH;By<`K#nxO8L zg|^APx#-W>PZUSlWIo1(k1#$>` zOz~QuR$bA2;|g?`1cv)&MCjADXuo@>_{5~BBNV~5VTM9p;n}G0ru9xT*QJ5qWF7W_ zr_uUWVE?IFo0wm|4*b4XQ*w+bKQy!o*6Vj~D5v`ZskXVTZKdZwzdlDm8yJ%g8s_{k zz=J_m*Wrt02p;xs%kQ-=9TT0$`{BbKA1!J&%aM`7w8KYH2-q~m8^}Oso{pm2G^~K-GlNUr$F4StQub!O1@w9)3Z}^i{fb;2A zTej72Olh>4N#?grz2Stg&hmQZH~Ee*u3i(8Oe)7V&V3RyTHQrLQ7PR{s(mGOMSD|x zF-EY~dkHp%`znv|BLeej3^}%7rnyT2Pd#Vrot=z^R2MISBAx6H`4ZvgKJVcu7wqBJ z(D5|z+0D2!kZWfX= zzPeX6`CH>HR$9B0_y%PnxZLa^__Dn)T7JlfY2<}NdkdG*&qf^D)Pjf;eCEo4{1&C9D*mRMy46aX5FoPkFM- zsef%|EYG{Yv_aJu#m3f#Ta`mP)J0zGTnys&-8pZ!sIJ^CcFbr)OQ9*@db9wF9E(C{ zCpZ(^!`#}?Jqq_;9^M-`@!H|VoMIX?a=}=9FjL{-))9eHAk!9l%5Fe&IUZ;U08SO? zTcV_MT`k;Tj2@?l*tR}~V4|A3lA2VJl71OxBodP z3F(JTkeQ$uC$QbwjXKPMSY+YZuu25S_-|Bj2JSPY@y=OpcSd`#bZ;j8?$*F=;|FVOpM z9&lQf(I7BRjusf_0!8sw8^&4)29v_zVO@ec!$eR72UuaeJGTpFKOQwP%k(I$<*^9E zV~<2F8-W=oPg)KsLP(&WpGH!t^?|LB8MVq8wdx;-yTZ#Kr&twmY7M;LU}_%p7jVzfp*uHU{yA7rX>VQeHQMYNac}ZZ2WV+k-Llb@{Nz zXS>4i+w_xeKC3{&^EwD|d}rwse@Rrhu`s9=0F_j+)HYT^JewCeGee2tAt2uR$DKvw zeGjJCJSTS*P2t@fP2dD0fJx#mtRWIpC!{iqresHY9ahj(;3Q>xt-(xc|&5Z-;Rh{|RW}gl7JPh%JLs$wW z($MAvL{9iCBfGfna7cWm7pvh#InicXM#- z;WCIrqbIg+I})#m$c|Dp=_wsB?25wRUX|pRJxk1WSn_s5ef{5tr=7g6t;OBp_llnv zs}h@dstc;mGdT|Ep_6@4hYXMj09aj_z09HSMTF>R4EuP?)7yi1W0`E;8+pYOG`i=- zJHgmN;UR@Zr@AOB`g@c8G>kWEOzA7=vK73u?c#@X(jOhRA<^4D8zReE1i^AH8-F(< zr6^dG)bMN4F9|x~Oi6-cMcbqXLCsM@Vh?!1z72X?;D&7jcZOUE6%;|;ZrJu09Sj5_ z)^btW_h*m9^sA1J7`yf|Vqc61_pf=!TOxYxT({fC~7j86 zxO1*L_6m^k*uP0&eK!$}vd3B5VuJBL4{!MQz=X02ecs3rnGYG{2dg;YI&Q}s^@&f~ zUhUm0I9}^*b$D0lQM*BP>kagI_ZW+tLEaHYj=TokxTfeh-x8Uf7jtog=63(Qg#7MZ z}Q=FW+Jfs9+#1K?@^R$3uTP~@J0 zaycK*W_J4!AxIgF&9c4UqdFm7b>=DHWYGJ|+t~&^3Qh^ZD{1Wz*S;cO4%BHZt}pJ) z$&6LW4bboUhLh0fgrwa-p>MI%B3V=zJlFo-_#HN} zkYNs*$cyWY1oXa!+PT>p2a%F``-ZJSPcrDkf<8syp>A$P4mHpagWg{9>D#k4F;-|> z!Qq1AaMRBI6T&&BYty#SgEF?SZRI8t$`#YFKzIj*n5g+kP+=5Jo0$)z`=TCHs>!X~ zr?Y3gqCrR~ij%2unQq?RGoyfH~n09Yl{q!gN?{BvQH+#8W5(FC=r>OgGk zKyHq*(WqvX4A^>ofNMIO8r$WEfI#mk7bBE}f=n~DJIEEtiK1D?Hloo?w6?=iGHqZA zsM$PMr1SzHHWTd*tz2Z-IyVv2n+NV+$PhuN9(v&<0oXb!Y}@*Irt*ndIr^2F%QByQL8grHR+p}I(DxYmU6iY$n=p7oNOuZhKJ?CzT(!ovX zwHP|xtp4NlLzdbv%1kUU~J5|H;M}-K2LIkLW(M(Wc{owe@0eSz3lu`fPzuOR)s%8ujBj^68v^F*dv6u?Of!_?1tI* zGBQpJTY_i%ba;Dx4cEY#9Qu^6U*{&ApS?PJ-jBy!6%9gj7JK8@;CXcRj`MT-*V8a# zb2DIe_`;p83*xW>HITw`@3onmFmnWig6XD>pJQ1GDK#3Ws6fU>~cfjUyvE{L-Tn08b z7OP@mr7V<6f{})bBn*)(R3u}FBv=d)i;)X3#8h=IjfY|LFe-IgsyeMwEl;gWWAdbU zo}{vliDuHdJPCn^k*ehck&MlgB-f>Jg|bRD6(^G6L;{tXN(sW`WH*xdg6jG@98W-F z3z%eHb!{DsDXlJOA&`0O+HmajLz zvb8u4wX9Mc#E~W{^)xz%O7CHCMU+?(E>ubhWhvF!1h#|{$_u2iaG@#eSSf+c;|e8Q zehP!jORmpPug_1d&nGch>9zS~^{nc8a3veZmXc_699!baPQkHLs_XN)e5qQUAIP99 zmHC9w6iO(a%asNSS!{j^feo6Kkoc^?P!T&eMXk(skQm)vV5g7o5Y}} z)@P^Jr=-_s(6~HGs3~}T$mf`Z#}BpaX~#HoGBvTmPKjy z2C+pYQ=3|fFt&`KRpJ_EslAt7{xRp2xw|kk;?CD$4)QA}&w1S6B~LzDZtMTP=c#t; z?Lyd^*uE0_%7BJ|8HpzoT&LbpIU$m!bS*f3cjr8f&0R}~>DJbjs|i8#+*Z%gk>~yD zPXu$GPfz=Y-_cz?oqIlFR`rH?jFVn_{R75R$eBiQ(P8-I1;-?(g}0kXE2ora4<_Dm zdR0~tKp(!fqo(+MarC8Qoa$W*zxW4QUf+s!d9Lo=c zUAOS!z8zOqq-B|w4*0HKc&i1I{-OT1pZnc!<)iC1?C6+-%is1@KEF+}a^3U|dj=mA zDIR5>9+yu1vD0SL#)g>GLgK!y><2d&#WF9{E)@$$>4`#@RXZQ8U3U7y!@`XLY5Np6 z7PvQLwC;VqBYtkoHyq;oO0+@)~Y4hZbjGI>M%j+ajDy86*<1Y8v%j*58+?{1PB8Ew%`v4p!jbE0H9FO z|F`k~#vd0e=3+s{l{52n+&movO=iGZ3^a=YCo@3Up+GW%;8U?Pwd_1CJ5$HNs<Pe4gybt0+)0aN-9BNKpILgs-WyfMr9)-+sLRivM?CpJ%x)>pLtJ_qc#zQGKNq_ zh?V82Ew?#}{5k_s$pH~Sq6x4V5r{U>|8tZkE>{3@Fi+d1O}8jO2r>mAK|s$3F~=2B zX&mrZCddo6hzb&f#$n#pD>9WF98by-5kW@KLz$UM3x_Ac2?U{{piHfSLgxK14hm|! za7+oC7nG?qRc2afd;yJ5&8zF8i--g%oz7>``NW*ME;f&qRck4zG-TCwm1UYT>nwR% z1Bor5u$h^4U3p4NS-MGHXUfqU3QA1XS(Yp{xQ`)J2%=mNDiqK~0=9?+@;9f>Ko_yH zw1&(Q6J12jDzW63Sn^6ts!VfPr7^4CkX2?XtJHFZ0&S)#uSQ#z-Am>$L7wJhn<-2T zMZ~kd@s3IK>JCVZj$=DM!k(MgrM95O&^n+ ztk75~NUl&WFRQkX!3SGH&nX+psvoP&8Y`&o2T>c!XMtEOsP6$0mQ~xIr5t1Mg95oc z5aJ-#Lt{muv7jj)gG&cFPWm5Qa$|!)=7QADQd+As!OvKz5QHqaCku275Py3(f4(_Y zN?on1XWlt-Vuh>3VbP=|xzi7vAbEJz-@uL%0;TszsaL*>7hNpA$I1$7f8c$lG{B!E zO>;TeS?)RM#AVWhr{SsSb1U+h=MT~ddr=j_^NBvx?qD$C|-bZ@Wu%@_$L;^8;fR&6-2mu(A5ph5LSo8Sj?;`L@U8>GiNCJoIvUm*2U&6Vpb* zUh^ACQwu)L?xVF`dsS5Z8lB*mcXic<^w$k*n?!rPoe}k$mc|^~HRslrTfGTwk5@lj zu+?_we(*lQB?9}>)dqQ6X^r!u{83edJZ056iSMmdakX(XBi$PL#dRI7(H{m^dz2+^ zdHZtl{J~j^T*Va^YUDRd|LNrsUd-`~Irj~2|L5fCDem*_xvJ`|bGPh#uyMhbRSTr_ z4gUKx1Q$q4iu1xByUW|PkE?e(ovAqz8@!74j{upOo1$^^z3GvUE^Eh=0P{x4XyB&AnH&D{jJCWam0D{(K$h z|0ncxf#X2Qqo;u&UU zQi3G3oJ11f@arWDpASLW}~$3GwH$JkQrq? zi@*A|*Eobaa1u^A;ajYzH8U*Qn({iNCZ(cZt;=6&jEo_gy@R_A4hE757Dz1bV5UEKZbz3IMm zYkaot-+}8I@*K83{%~oAyzJ#*VD;Oc?`vONnN~HQ^!smCf9tj7TYJK@KQC=9ni|h~ zp_@HlH}&qu#N`d0JH^u6z5a_AO`4SOkRP`q?lg=mm(C<81=4bC)K$jeUX2|(sq_JgqR^OA6 zmS6n_evU<9Fj6=&JJzsa*Zxx+_A&A8x^3##&Ses zhF*4#W$2k9kirb42#C#koPhP-(96v+4fGp6-L`!CWf}TqVdj{P{ax>SEbpzB0jp*F zeG82uW2c*qeZ6mbEN`q9qt*0lq=iD2vE{u6L+|?@(|fDQIA*qv9HUYtL2~0g@XHSK z`!Tb@Vzv(JK-@jCXlWECK7k&};suo%L8xXn>%W+^j5m#Bx)e>P2N8K>p7e{Q(Kw3!%K(1boJgga{3KsGCzn4QkT!ObeYFYx_bsQA-#j>`)Tl=$~}; zy1da-s7wk&N@80U#8Ib|B-|i3XaKnL*rI3 zSOu{IB92BA(YPrzA&!tc)~PwKyOl6bXVB6MB#Pj%m!Ppu_# z{G$W7IsCDl-ox{bJFlo0T?(1bSARSo+4FNf;r7Xme?q^22`;bQbE36pV_>Yh zdRy#LIph*0zmA5N*(e3u9pUzpb`dp?c* zG~`rQhyJPk@FlkyAN6kEBun|ERXp5WuYWf@6s-XxLB{bp-xG3woL%IpVAys%kQF$9 z337*acP1{>OzwKF_#>usUtvYCP0hxmD-bKTetgj9v#qdg10hoD58o9dTSXrf=S_d> zzApB$z%;yE;v8aEuehUg4FoBl0_a*6V~qhdjJ27ssHa`^RIl07+!bDYB zl0_(xTJu35>h5**DzxUVMnz(cg~;cDK(S_C>~8dtKo7 z#vn%#NSU!*Gljw|PcREPL~o9SLJ>&I&31J9`~DUXH}7-JDk(^%USmfu2$$4yGmbAK z31x5kTPS=gh@LOGy(O{cp4o#KxPDq3EmJ3s8BBt67b4u%mfCL z7%CX+(h?|4G9BZ|4@#}EoHFXkM4l&uNoJ6(Jvw90e_S5x(s^@vM2-|3B)bcE1qJxT zg2pj}&YcUcH@XWXsWm2VfrKcK82ikIuHG*ebC5t%AeTMqZA_FK3*<&am)Tn&a0kO~ zf$aU5jv$Z)3S`EfUTcRLM7*bfm0cziml>@VU3Qs~K$jW}<}r(o#FtU{viDYK^sKt5%egm9a<3Fi3NDIQvSY6o2)demF7?PTE}m;Ce>P# zYR5qKjo)jiOtON+qzLJs23kK2oF`Fu?m{U@D+2fclF!2Z4-i2t5@;+Cd6i&XMHBr$ z?7e$9)BpcJzRfnwVUnEFh#A&eqnR0ImPTj}IpolCCTR&d#hj1TDkQ?nS<-S&cu7d* zutF3`C5MiyBqV;%*XQ&5{{H%1@85O({(fJVYnO}Xd5_!e{64-)sh#r=PxU4{dtj^bN~UjorbjfzM|x^JUhI z>J~4e9~VvsJCp~F?y`#`i+ekf?jEJ*(J@&~r0*EPrD;Uk^~p;?4@-A$!)dkM-7P3z zg=du?l?r@WKHfs?%eX?0{rm*i*0lI&9=V3efduMnD(lxhJSJ%idyx2Z= z;%?o;LXzJ*i4zSszBEkxu8*1s-pbreSQ#<1yHn-R3)t2WbG1TcP z)!wYR=tbGLUnU}=S~>S4PG^}7{YXT{`^fP3?0sYWN|H1oZ*cI5eb z#;kHL8`$?bA29Vca0{@rcbZ7NWq$x|W~+taUPM@-1CG0#)bcp!_Mzaz75Sc(D-QLZ z%SCj~vtG?|TTIJb8HC}$@E%KTHfwrDi zf?L0oUM-ZK{;|6{1^RM_%>PT4YvVEI02k6+R~fFW%2W?Eij0G6hc1bsVZd77SOw6b zOdv5Js}3IJ8bpROd{WcEiRQJ)i01(L+s4Ks4ZeyYU@SfO4q}tmRGV-DM-%G-WS%%0 z%M!jw!YW#_76EQ?l3lg2<72Q?C$T{dT`>Yt2FOBzgpI7GNOa~~vQ{<7B!KIjAY*p2 zt7^^$Kt>8AoJ10xAiGLLDeBUl?BHXTvSSpnRT5f}3|}Pbis{l>cG9b+vXc(7V*oGV z~c$ z+Itl*yXe4LrAUtf`6^Cq)!KQ{jRpvWoz(Qh?3iV*txhAgc_yRR`HcHC;ursUnWzL{sD=2nIw`MGaj=n&un< zt%${X03{c?6emprL*9B2h)335s~8QsB3g!Es%T?3r;PW&qGcG;t3>#!CUDC%MO^}8 zj@1psBMlmfD7y+UJdH94usw~nilxbDpkx3M(Af*f7<=u!dI>aDg8VW-G7erH4&EJ> z@MTl^F@Tx~mU0?I155Y@kXY&xod`5JJNadr{Id1YIbb>kum|9HpmB1#1Shnv9GYwc zZxG}+HaC~a8mhpg)6S~{P4uutECbU}XT+E_eAybY0T@1(2wH^oizHH~!WbHlozf^gq zQc?3^MN_Wp64 zj&@egQiK1KJTWVW>yIzLx4Eo*nCKBDTQQQg@0c>|@fD57h3FvNz5=;gr(1`s`g@h0 zY0z(o>yE71oE-{k zX@{B@`Z_%`{Z+9q%H8i|UPKe?e%v~CG3wrr9Yf!7%<3?SUBd_O>GwR%YW8n_Ow?da zNRJXWr;k=rAC^c7x%`ON9pf0ZXOU*W<{#0p`2SVJ{y(gW|KMXl|Fg;QANKr@=lt(s|HmT#|NHp< z`)q;7_uq%`--qyj%+~(^r2kUQf2rnwhsl3O!hc7?e@DXqQ=;-;IQ$n5{|63$>iQJS z2Z;jJn&}2PLW5jk?ffJ*XAzsTip^cb=B@&6t|^(JLGnn8519!CiW^DzBw_ySBA^tY zbxGClCO3mKu+ECF*lmFIv=N?S8SkW#CA|D}jzKn;f zGnugwQ>_|LjmkC1pIwcNcY5y6mGhuDP#DWGd^8plmP;vkwHh4HdhYKlXJ_L?p{%m` zfUXglLxDR3wWsvONIoE@1am3*i;L^*f&rlS9Fbv4#z;FW+K}l&Z$6g5U~?#dmMTwR zm=ZAr4;v<)9+>4cpvJlUZk0x1C}XLB3NtWG4UFg3^>k|j#(jp<^AulpniGM^6tZ*X zrn^aY%$2wtWfIBKl))ro=|l!Q$Hv-{q)fnA8^~BwIU2g8{C9$=3oJDtyX};2S^o&N>B0A_-Y3bTY?nY=VNLP)SE?qE0C_?a%fQ;X0@5lG??l4`y8rA-IC~&Q zv*h_K(T)`u>O`ZE+UIA5St;f3gr-E2FvJxQJ}N&>%LCE_ky86{Y%{)TB`n3#lv4Qa zbK$!=WpCfgk7I>1pKCu(7rxsF&HA@YR1GkNtO0@5z|<5F4k#MB*qEe{%6VYl4h>z+ z&@7L_cgv=xfMx+~@Nb3DOjrkCJpo=i;E>Cc=`s2An56K^`DtZu4-K+`rRl$379enF zkSQ}^O@LPqm|BH1bEag9DcN8%G{w|Z6L{$au)LfBSD$R7MxeyxQ&z%qHbZkR&um)Zx?BF>oN!+$1(#IrjcM`sxZPOiW)6KT|n#5@jwo%1WRIv<8c#1U5 z74RD}oP`}xcpJGCD9u$KOJ7b3AyFt~0=CQ7ram4I7!L@dtBtgW8ivynF9Y}u2nvNL z&3Oc32d!1>eSOiEIecp1=TIhqAT<(wnH>laQG;(FFy4Uii6t_K)|@7< z0${}A7`Z@Aga(NOjB_k4hiK}dOv3(PbE?@P)xjYHlN>XP}US2qNs}nu%k$%^PO#015?N(Oh>%O2Ad0LrnL;Zt_Me# znFC;lh-20VGwb3#>b==yQwE;Q`RtL?K&94FF_Jc%7Vp4%8kI<=e~zryC6n5zl-bC* z4R&0$Z%ARdM>&NK5GjC4H9Duj+NM4<1kg-de8UZh*a2luJ&A%N05-k>fDynIs5hl= z#^jR8HY+hHwKRGIP`ZKxv`G33uMjesUJH}~lK-_0Rzl;{bg^Whe#A1j#ou=&EN(p} z7ialzZS!VKPK$rYN@xmDuMPlnB_>YSI#-Q=#gVZ9rW(A%)o@sxL);6mZ~zwohyWA= zz{EL(H<$wF(gZvb;=icTBol2K{KJW4o6VRw0JCJ^3UxI%V^YXOdc7${ji9+6lcT2l zKL*A=(Bm5#4-QP4`91%-KRF-g&QB1G{dK(hs_1BWXD-$5-+ro}4|L(X|J%xR}#2MOU% z$OdqT7=;WJvW7#%6j2yX11k`#LDwZccqpzNMNV^q=^J%L<=B85z6;pmKNI;l4>MOuc^@j3UxK@TPRAoIwXGus1M-O!2?~g$FbSj>bj64LV%ez24zuKy{{Jf$A?jEv46z z^MvJOhhvwMIcO4T*gqU+&8;Vs2-e&u{yAhiNzIxAc%5i0<2ozk$Ys-D8Y&~oYwNDaWnGcvFQnU+8{hM7ag z(HmUZC}~Xs@GYA%>Zll?+`rz`;9vH4$Tf9HF||u+Fts5#0G~hw6rh5qkR5Ufb}2+0 zw${=HZJkTR8OSPA8oc7*2svN`a1QdM!|`O1A0p4*xe2SOQ1L!I|cEdB+VC za!i5W$vHrbfg@DO4mmB}K;b=7W4!I5g%J9JM{~PCk zGTL0CLrQ;eIDj!(WjYX_2-Ydji8=kjaT>Y?4P*nHT@KkU=ih*Y0d4)=U7>sV_Q|OX zqxFUPH@b-po4;fy+3)_zkoWUjYz{tBdhYrr@XpQuzIpQ>)R6xun*GOr{?7|Nz}0{R zkUVgDLy?6B>A>xQ;qtJ~V;tVK;)5Oh3_|IBa`M9)VLCW%J$GO1z}#eHY)mT6BCoWv z*xk#z^q~&J?`(;gpY9&n!(j=h_2^dAv7F23uyA%=$H2sMUuVO}&hfi$#~*thgR*a# zd7q9c5B5*?eO6_YR^HfUW1Y`nDr>S!YWOE|1|OU%c-UWe_?o?*ZJ8R@s za8+U7B-`e6LEEVg9MeJtBL%R`v5+;FvYen(#Ny@!3_7B)UR z(It=Kk5b47cVphv6RyX((X8y=jNT)K@x~^G?vIYPo2e2H`<*hxRazbhD!(SR8>{I@ z-MddO*P$9ItDbnVVEC+ez^OwXfgz?@_UG*RYTBBO?KGd0rv*26UF+!W^f+GAc}Cgh zAf0qD5sTYnbmnoECd0u|o$O!#G}7P9`dG@N!0H+I(pHb_frfO((7j|za8KXRKtjB| z9bxZ;mpj$*m_ynVzLn*1zlU~yxhM@x?p}QTx!}VYp3T%fJ1{sYzss)2{rg+XEUZco zyExyqjSVSmvUc?|_P5ppB9-CwxHDa{hptr@Uh=e5t=WewIhmWB%t_A4a0)*?HdyOh zegCSlp7pt+R}OT20&(YFL#AKoiIYA|mUmirOnb{sIpxSbWMeA>e?6ix7H^0(K6oN3 zHu%yU?ONh}uX|<+sQJhcL#7Sfw>X4-N1i*PV9buuj1V z`3@oW!EAXAZC<;FEDEj2z!2z6{C-4`u1LFwGcHlQG;N#V=t-Y)iPSwKm%dFnMJ~61voy(`l zC`K)^^RD10Dq$= zU2+#fm2vuJU$&xtu$;i_Z(pDm&^Ir)2I`l-TNARZPN{AKP=(9*?Vh~0cSpuu#=Wo& zZO#rMZhKh|GW}{GpB0_dyLh2r#vinPn-NVnKhofvc|zoxlv52vYgN8lF`v&mK4`c+ zW8HP^si!1bxcHCYlj-FB19{TYQj*E_XF1z_Nkfdw-Z#!$FFIq*yJNW)S~xEE}{bC)myH{_5Fe=v69s>uE~As z10~ozvHoJMbDaU=>AXPo&v%i6t{}i`d=bx1eKL#${rQF6p4slEKbqT zSmIrO&a=dDWD!1?Y*Y_A$6$_EQ;c^g)V!37-ipb-!l#K(UiCm{&1W-kLGLw!H81sQ zsLtJhYgj>V_1}GnIAqgcHEw{Zp@M6As`ja#--9#e-xuGN z{jD`y^Ylqsh<4(Dw8&nGJC9bMv+8;!wX+8vtdc4G{;{xI1W~DD)Sq`B)DM1XA&(jh z+vKJ?zCT=bKJ@L`low0*Y{iQO@A&#WyRo4sj2G5G(5CErVUn#9p+1f4s2kTi(|Pi_ zFfz9Bk;oZlM%8!u^Y|9|1y$luZQkX>rkkI)z8JnqSkNDuN&a(w#AJ2uO4MxpZ_mS~ z7bhGKzx%G(b@ol{#F@h;o0OT~CZn_4*A1>%l#I+@lGu!Td$m+;-J~kJWObfzcENUG zGo`EbbL}1JwfAenvbJ|O4sVi7Yrb8udDr;!JjrxmS3Hu)5BSn3N*=*^VH%-Z)apL*6lOzj?t{{GD3o6*AN^2plU%vAbs`KxW4wq;?H zn0`~?v)1LIJDm5s-@I`(Gzt;Jo&8k+U!-5X2PcNcUY0oiru=t%msEX1Te8odihlA5IPN6+N5&J-=t1NC>t*qd38-WbJJAFL8<%W!zco68LV zAEa{DrZi zL$9li9$DF6)y*vl4&=Q>a4!tN%3%`|`8oH^RHN};_TK3%_D5Nai{brYAp_EC8?f#b|bEaqS@T73; z{XrAg`d8{YhUTMnR62WKv^G{0qhr1qkACteHU^ykqN)URXvS`@Wv7;C7u=h^+@s&d z{JVH~$CT{}%ly0f=W60VOu2O^w^TUw>ChF{k3tukdUt+VI-oP{+-y17H(4PJxrkuC zlFjXJ_!XLNGU)T-f^Pk~{%2%LxpnL5fy#vo*~agLvJ+K?dw#mC={n8R z!Ux>`R(b!yvhIYPDO+Pe6z$&5@Yc&9J66r%7tBZW%jEB!{PHDe?Zo_JME-ElcwLS{ z?Sk?`OCzI8hkja5(37-!M}H;2Kbj> zI-y65T_@|K?)9hXoXz|+87TW}c)V|4yvY4`*FXLqGL>(xJN?BYoMzC=nr^ucjtdqG zFzoys(R%xz&bQ*(q}MNsBV!t)CtIEG-~S3*aZl)caon)z#b$|4(Y4NLuicY3#aFPm zuCTKm@DtZBx{IibeHURH(A4VW?*a=IWxLHjRQRzK*nMR!=ILb-pOhcWRI@nq;J}h` zg)ZLQoRhkn!szv>bgx?m0mmu1yWT&xDj|lR+m~JX&(%>2(f(&uHGXEtV&%J0Yvz5D zU8Vm_sj=ExXq{if7d=nZ9z6f0&i;!4{4GLYG7^$owv!pY`(i8jQ5C{y;W$nq_d((p zkKFAaKP0?~tw0zy%$i7kd2(|-&-#w8jNjE0d$xy%(G2#LN?i;fzL^**3B@GA^j!D; ziJV-|t))$gpDu41otbO8tAEQ!>9qk>&2h*5`h=*9qETi)lf^$>PInf#i@Li<(q%HEQqGxy#TTqX!RHQ5)%;res_l7>sb3@69IOHPBLC{}kkHTC$VxdkbMPv`t zQV!$tmyZljN1E|L_wq??LX$NC(2nfDd?g9PftG9swQ(eJD}0pkP+Os-R0gsFB-Ms; zTf<9WLBYDe0um-14KhyMS72Rubn4AktIuco*!lgg)e{-9F#muw-_N-aM^1$6*?2we zV5F#ts|@tvcBrdN%(QRZ({Q^I5CjDZO2Nba2u}NT$NwZsnB(IHyU+b$BW)MFr@|#6 z_&9A*Npp7C4;iS7!0v7Y(w2=3$VEQlgslqB=`Tnu?M8O7CD&Qvuf|hS@A2r!$b_)#ukZXI2Hk3St)T;ilSAB->fhRhgW5G@e6pfZtr@rbNsUD7(4+W>pN&QumI#?{E5lilUXDZw3v|vIsmy{V=0;OA;rrN#HtLDhSy60v8shB9 zy*kNvRvapWdhujOwzAJ>3%)-osB4AV@JmOsJTXFO5a|1F^ckYGvkLA=(A93FIa4g68)+*OSIdF1I1;w3-L>2c>k6uKnejrG%cYsfXknsl zw`2tm(S`zjw35>4J_ib27)HWI<;?5LJ7HF<=A%8hA_)*c7 zJa;Q5#0w7aJ&HI&bwhN0O{~y6}$vnwges}T6F_~1WDmpIcxJs9hUfR0Vra& z#FdBG>wr*3h(yn3s2kEQtcE)sNOnd$5G^xD`$PAHBfSMs(^>H|v*Kb*n5_)7m<5X9 z18v|aKe?51RM5#~8QM6eymbc3c+)OdcqFGo_HDT>7- zHc{}$J@@#6QnsK0Zu}!&5%k-t4NLEGyW*j zrSFfxxr1W&&|aP2Mk|h^j!WO(3q%K_oK^+Nn}l83tDyQuKG=&Vc9|)Dt$XEHc7YlTREvb(ei)Vqns8Utkka7-GJQrES2LsuV7mtIP z6)ED0#N+dAWsn7^i#D^s(In(JQUXWFSx$i*AN)fINdrOTxd@0b44Z!~<-pnD7o~Er z!ZCVdjkag4WenqpnBpZ!pG?@1s!%#PB6Ael$aOw#Q?y48`e~h#zIadpC9zuNxI;!_ z2UChK28rKdUI&9(!~M@ajw&Iah#zHLTme#s-~H>{oGQWf$BNMTf=GcyP&e-;CE%)N zI~aXdQi~&&;fT=6ZZ^J;#B<{1MLC-;PDqxxpgTS0F6(!l7g~(HZ5iEMP8**I}gyO;0wy0wJ zc;G6wBo>uNK#5kc5hlKQzu5=~4~Euxs7$(s6-e3&A#I!_Xg9D%D5Y-DB)Crzhryt~1a*Sjjy`JE5F+zm-aWk6Zass-*xtWR+Q z@;~_d-A9KlpuK(PFTO^z`8%SUDyTE>#i^5*8Jj@_P5+x&XSEf;4B}yCUA;TY}6d|Qh)t?pua9iP$iM3CHBt*Vg-3*Ei zUnAONw1WjqNjy^&B7;<6NxB25X5V=ifK)+kuR@6?y#lSFKvis{3R}`Umb5v9{0)*C z8?0HnDjLB@KI6kY6vML4NY=_!>rkaOJHepg$oNnFRm|C`_A)Jj_#ZxagzaJ0$NkQK z9l=Jtr3~Mo&W?6-t9X*tsN02l5*6#icxLVmc@sP*PRH)e%58)@M*_(dHRo9#>hrkf zb|$I6u)+B50MY(t8l;T*CYcW|6+nx*A`G?^emdo0E7X)PX365|c7u&r;0bmvge57; zL@3LMK>6Ty0Z7;O+6GAUG7l`p7Vl~Yt8OvJ2pp*Wo;+|jBozhU!GwZmMY3Lq&ONnT zL)E47z@~f&8V6>?2d_vXCJK>`o{&p?32b*`D-*I0b$b&pk;Z|;+2RNc=mzL&I|>x3 zlpEV9{>=47yo|_I4m68BN=1p}pR>A!i92DUhsDT(EYXz_|o`S3Enm^llIAc^p( zpb>XTk4_~B3VcZ@u894rg-0N4MOv6r=ZGIVB7HlFMZwdhd)HhlS}Lku9&s9vA?)x8 zS#Z%|Da9YZq3!II8i|Ck#PiM|HOPtL(clho+omDPDCl*c(K!nG5Y~^}GnyoNn|0s9 zGI9AraGhgID#i0LQfUi%XcIpv*nPG8p@oG~KoQiX>IyQ<>QK;l!nxfPX|x9 zbf7&k18VZ?shw0a{r+~=&9lZR4CNPoa{t~OdT;C80kWSQFwKNd4W2-LdNl<1i>|An zM10%7NSnD5k<3ThEWr3>=e>9mUb8UvedKf-<X}EN zG_6)@7f3Rmz1D>nGcXjJKp`7JmsWWaji8+Pi)o+dM7#M&w*{EiBgx;~h;F>mMz^Go z5zLD>+Q|BI#|`;%7G`L?Ui3G1V^%_;k`^y4EK6w27!7~ay{@$&npR$;nt7?$Ok#YI zt9AA=H6sGCm1{b|3`^!nPFzIxu^S_oV2*gPR{2*q587r1e%K!SYT>~BzQeB4kB z%%W#2{QQs%?Qy(&ZihYMdPdlLt0HYb-1MT1_COldEUm-J$#*1GT8Xe6eYv{#n##3z z;q9k2m?d)O{l_1l(K(W6d-w%(ZO4b+Ti!$O*s674^>)2nrwc?oT>Fo+y2ccVlp4?l29aZ_QS-3428HyuCqS} z6mE|2;}ot|Y$;z{U{376r8cx)So`A5xn!5IsaUrE?L(*a=aoBtxRg5j^>4nMHX6Sl ztL}YdW8>SY#V5&sRy=LWe!Zsdoz^{I5ZQONgx$5%y>#jG2b$jdl46IJC%iao2~x!c z2}H+KmqpMX@a?eLIzEd2vGEJG=XPbG#`Qa0<@_vRV>u1V<C+9F74eBq`K`M=H3ZOr;X)C z$C_cWGX{FN+j{l3N)MVwnx)>*haZ<2eAvU-rR2WcYW@up(fWPWCU>|qqxc6w_K~VR zR?)4q?&eMrKgZTm_z=@5#Ql$M7Q8d6pdZT_B+A6R_ht1IQolVb17KqlK!t{|RmD zywp68JrbV}zu79%{epB!v5JWC(HSTYE8a| zpVSnLZWPb|?yPRGiy0w_7Ojn-cTN`x_3SMU98hnr1mtu#zx*O%a$ox}p?M-OC&?+xx< zP%wG>y?MpA%ooFM4JinC=(4neqYH{~h~SaZvw2jpKgZmwh;yWXBM=m(u(3Q=}D?s(N2S(5Ot4 zvX<(t#J&R~pRBhoMr!NEz-}K-(!YLI_@mLi=G&pF+S%m5IkoS?^LCaJd7>v2?4BU@BLK+psM!C|mSs%~MS-dzq`>69;&d}+wm$P?qRYb~x!2qkl8Sy(B z#`~Y$&W!xT8_l|^QBL`4m+(|wWn8Y!@*Lwx#;xt%{Hqp_dh7|b4?|X&m#8{cmo?+< zVb|hXTpVTR9{s?rk}cm}ZX}VG(!|^TbRM61`b$cfQ|`4e|NHg65@BrctLBwt#@x2?Dj@!gECr~G`mQ9U{HqV21fUidvr zW{}&5kFRMI4)<=k7AHk(vu^erBmSxQhw$!JV5N^|kxXOZEtSm5R`xpvVh zN^VBeO_>?pEPcIjOj~=j_l8f_Ql!)I>P&+Pqm|~%rySz6Z)cIwpCgXM@9PMp`;61< ziY0U0p5MB~Ry5x#MTk~3-dyk~8b_f*5rx~ZyA6(^pOv|2OmDkUbu>`Jo-xblk?3kM z{l|BfX7=ZKYo|^Rdk}!YS zZq^Z;v@plLxPaAZ?IIp}s&hpAn`g+&Y4dh`cumOlEImq-=S;0H&*{Xuk#wⅇ7f1 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%0DW&EA^={y8T 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

S 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 Y2ESOX!OO#)Jv{}TEXPi_@v|n zom})P)tz+ng58!i#%5|=sbH#Uw>V_8dM~P*F_3vk#7kS}XLwSXmof#R!_Qmg($G{~7861Gf zsSQPB0OkatKlreusnu}i9)__0*t=a8lGxhtHVTbplXT<^uN>bI`)vuI^QXO%ZEB3a zY793v)Z|iAOUYvhCzSHFGKkSsg&-4<`pIR&QaOjs&8Tgz$pc%cEgc%7sIkoDq?t8F zmIqpz=9V%XUPqKZF7di&D~RT^BmAgX44WM2J>o^R7|!nSD%KF$Jf^Yl7gw7}_uZK1cpNJz_EdUKB+eKUZ0 z<9`))C8Nnp;94}{9qxet&S%(yjzEX`p)15tut0~1{+{yhWu7^k%(Qtknqu2G2X=}Y za2AP-l@Y5AYFQiR4y0LaDWPctFSTQ#_v~HsKIY+#g$)EXm0ST6TW1*WjIo@oFBySg zYuS)As~7WNkV6!pQ?MIuPU~_rAGmrgO>yo5rJfkA z=*1ndZ?pm^JRZGx!lq6XG#=4$wDh4fo{E{Z#)zIri*wv56iZDT^~pqqsQE;QR}7hU zyiHN%Slm0(bDiSTPW0^x2T>&g4bo!Fq@45{Eesi^iiD}SwXoCa&Pp*SQt z<{{Ia@f-@NPia0soOyWNHs*@H{OwdmhwR3eH^3(DWptZH5QSV-M;0T|!ph;AllQEp; zrWqebkc}o^+U2`emhs^A&%IrEg*V)&%sIk2!5Q|>+Z{Gdqog_G(~S#_)D7v>&Gijg zaDLP44Zf)>u7rroHHwVSW65^$Wu0R1UN(3h#i6(tO23ol4+#*u!KT4xsTSLI;nK!7 z*(8RfPDU)>#x-gn)ICXv0vosla<@e()C2_VLGamaw}E`w1%&{>01P}q`wPG$Y|1{E z04IR|!7i9U`TKA`aKay;A3%gMktyDiLbmLQ!DNDkzkd3L`SVxEguPvba_RFI&z`<` z{`Bn&8PeXyj`lcm)Q7U;!-pRA!IY`;ATRhRm(0s5;ktzDI4FU8lCvdKOX#>+bWbgJ&av&t#|H%apj zDg%M!)H6s+qUyIidy;Z7xu_G2uaV+Gbg098tI|gTbAySlJVz4cfZN=o%bu5xI`T}) zzEbKY$9iH)I%=b20EQ=E5Wv}^KEef&cnZOX26^cKYDoH;fPOCisk}?fPpJ2VJJ5n=7ZNMz`5|mn;3WO8e zK8-?3sOcnAtfQN-Lohi3dqTFyl4qK@u9uwc)V2g!TJtAu?P8BQl#ZZepPM#G;ejqe zW;HGvHKIx?UQ4R@&*o~%Zb{!x-nM5!UpmrKnU3WRTiB-b@i-fSgH)sc;`;Or?B`@! z&gh4!zI$op(#&;J%KAx@WaD1l7*?9ZYnk4lXDSdof{83@izdcQJGs$5lg*)0uM}|b zgjXWhrg$Xq0{{X1zzb%5`t2tdf0p>LkP1JTrWG(Gf}){9^r2xT6XwpPpF$+^M-+c( zV8K|@uZ?p!u%*hFFq?hs8A};Y_qoWBx16lDg_*1^t%6V9vu)Uf-4wG{yM`M4yY{?0 z?J;X!G}veZ4?5QQ{NV{2aK;lK@q~>Galizcq&Ya@0Z7W$3Lfx)5N1l7Gm2n{rO-tyM}FwH22JiTg_`&iYI z5Ryt&rSp%~qJp!-;m8dknc_GC_VgBw~@MjD*V zW=P_@)eG%`2T;Vs5ViznR;y#+$ zm!&;q45#o4UF1@PesGQzHOSKTD(R#lG6g1}0m`ImsFz&-{RDkX* z9&hM!zPcf0I zstL_%PXs7$wnsWFxd%Jg3E2&ilsAhe=_{L@+XvOBK0C26Nbif^pyu+_FvaP9U9nr? zHi8F_9OD!q!Go@3+8vbK;~xER03a6OfGuo71pfHL1Vumr2NZw>V+epP@(}Ssr}I8H3EN!2qj^8J#J}Kn6nL zs7!7`5uK)L$kQdA(^Z3-n$+Nz+{_4Vx2DwA5CJts+{UVuvJz9V{K-X^>8eR$!5T@v zsgqmb$xf`{XUMS7gslFPpNKl**LVdnr&?=neWK|~HsVj7423an+h39XF?Wo;%Owi>S`NuUTdTx}-TL)AbSM=G>5>sUyW{&qSxq1 z{?F3arIK=g@h!U5I)JQ;P<$?!9vqeQNBmn&fvnx@1g8C0BW=`cKF zds9^W;g3MowWem+R2(@C5m&9?npC$bx4GG#bXX*=>W#o6cb!SZnpTq6a3f>%iduP- zR->nt!!Gbf)*F#z)RtvXUS zrKB1vZJ&5M9;|Q8;D%9^H9JXNv#PXQ!V`VSHKhflRHvEa6f@xA-SOBl3lxD_Lv*$T zP%cxcP znry%}d``%4dQfol$lEnzKFa?8M>l&Ox`9=!jpP!|XPzikqO)AOJimJQmF-+{KoSp6 zTxS>eRx4zO>M43m8YY`Rig01sC|o3|!$1v)v|_CcEK8ULWfS1WYS|+1ntnKWV|%cK(uX==BKSr@Y~F*VA_O`@Su>G zVt|%o=O{xX{s0IHpbCBf2zX2%0>BasVVXps08SwQaG@g{fCY3x1f=jL#()QOfCob2 zvR=Wn`~jMHfGMhQvOdBJ${_1F2#&m}+Z;u_d2U^@r&awxK z>ZeG?B)uepKp-)|CJZv#f&@{f)TSpoJQ0!lX)k2Se#YvHwy5h=NvB%t)v~1gpiMHu zMxZ$Eh)zajLWw9uiMeb`Ky+^Kc1YJj0BE2LvE7f zDtf{bc0mkOpb0g?j|u=2^dS$rV3~qq2QTbdR-zyB0T(Q3X|7HmiU0-n;UO9!1+f(1=5560cwe3i+0@IyC zjqomsb2`#SMv1Ba0?>0*qSpLtSI&kbgd!Y84UoDk^UManP{VXo5S6YaF;b8ckTNML z;U#L~?Bq$=Y?4sk2}nR^O+JPs4~^*955ts;!}O3kaBW7c3b@+i!xHUHRxu65iZOyH z@V4s@=b|?Nji1O)i_ivfjL1_S@uG~R0eK0)3IMTY%U9fxYUbuw`|G zz#}EXvePD#w%|~^NXI4)L@w>7sYrvJg3AN(Y_@jj_@+u8#w1uHy~bsfq9-H8&%4xezmN)qh~fgS-~uin z5u}q2WzaGI$^!%{ZRBo34A_V;l7lNwLI_YsH3RCVTB=hi+HiaTp12!(Q&!`Wh{_{DPsyq;{0L)yGvS7f}KE=lU`C0ldCAh3x5JsEGp$!P~vjttXjg-Ll34jl?duO3@hSc z00v+h9zYqCAsxm-B?{yzZvqNZ3KJiK25v)m4nt4$flarOKl#MtSaVOiw74dbItoLi z;DXuz7BDu-2S?Ge&fsq`ZmBJe@_m4)+l=lL;V-F5ZH?{>q`2i(fDxti0x-&FLQ|rX zJ`g8G0~}lKbtL4c$_7Qjqb&=hA>|1p{Y#37OEoDKN>nH*BF$r(?R1E85pVM*Rg)J} zt}2USaXtxjeoHpHF(8SkDnkMnQHh0eQ&%J}K{SzMItGT=&P=E@RjhKp5b8NWGDftI zlX^lKE+7sD-~k5U3iK-;b|D^IK^`EWnnEEJxHBI1)gFW=9#R1$#6Ta|Kpr+>3D`hj zLjfP`0Rm28ALb?fs3h@8+6Bo+i~b+G^U2f&oTi4UT~|ij-r;b^D};BSTP)?o7CpgOea; zgnlt}@(waz6B3zgPG=<67}b*6qbNo7Q1)SrEO9VbG6mmqD>kA}w@V*T;0ltG1+KuG z?2iTr!4=MB3G_h>)sN%MJkwyn+V6pdUCvA0Qwf_Q3@Dp%xI~cqFz}7;F`b zPEUyqCTT7+f8=6E)0V;q1P!OF)|Q@XWEFcROYt+o;?9D)h;2BtR?HSUkYiE*0yk~~ zOd74CKzhxP_|G+jAkNGLTI9?u6eDe3D0=M1MnJ#|3_u-6RRr~-A1Loso#i&TWD{I0 zep&$!@BuHZ3#nSc6FfmJ{HYSBN_e}H7ji%!{h_o*LkzqC4esGbc8U>=^^_DPT9egH zDy^m7l7rbVV{k(zoRw92Qe--9G_b0b3Nck;BnD%GN|Cij(q`IlH;qnI+C-xtu0S3r zK^Y$40uYfXFt-(0z#c$=5IEN#<^>BNU=J3S1~OrV@Wn*>0SX=>BmTe^&_y5m6?

    GcN2JwdQUW@n;E;tX|DIRQ7mVQf^1gGCV~)9M3KPa&ozLp&meC zXFZ{q%7}W`upYv4(;#Stpa%}z>!VTzRg9z>^`Qc404cEZ8C|9Tj=+!>KnuW&ZM=X1 z%4G&LMFljVAG{zIQfyIwAPXMFu4cdx+{^y110;Ch7!F8g{mBfZkO!h+XZg-JM8Lgl zp$PPmrkEfI_Q4_S0S#uM&dAGE(U!)@M>+8Ca9gQmDU(MBvvj25Kc!cJlnAw+IMcxZ=pQ6d-U)t3rkizRgJxCJCF4Fm5pkb5^sfR`-)1(l>I!@w2>L}e5@ zL$bVzwOXUfCZOmti-n%-VlVonZwiT!;vtb!#bJ;%9x!3*z-exD(I@P|2Yet7?7@GypDIpaoE2Dng+JN+1gQ!35SoAFzNR z;z1T}p*bL+1*jpS?4jOh1PYb_6GUPO=m81}02j;v4D{g-7C;}DfD31P2~4*imLLfc z;Vz0`9@@hp48aeuMaXa~gXd82o^_PWbEAx+H3t!XJh)WHL${McsJN;q+VVzS=h3TRsLg_@b0Ve02&03s_vG}@tU?7c zP&6%DQu3IjR{{Cu)FO!dX(bSXk@jJiBt!mKXevHrQ13F5C-EpQpo3iD3ozjeC}03| z0S9Km2aH$<2H+lI;1=RR5s=^kkU*D(00qXQA8_ClegO_{Vi!~ZjFC%}ynA2vY??!f>oU?05T z5$r()%CH|~L3HDR1~gz6sz9x$Xqt3D1lGVF#-I=qJs%891bpEOV|x<>tF-yy2Xr79 za?jpmJ0Ex;)B3>=*u}l~;R(E{BdnQwuLe<JL?IKHxUx_tK!`^!bWEv)F$Y|qwZ;1rfgA8bI& zW1<3LU;s+CYR8PO2MGZx0T&qIn%jIAG~gKgA(bm57We@dv;Y-mzyVAl3A7*@MnE50 zp$Z;A4FEtNeqaS~A(c|x+=VJfQ7 z09XNDbbu~I0Jc#8UPORhL?C2v{m%5^6rLa&OhU-=d26%HSp%e7o2vML308!TDoH64 zS?M`Y`ZSeqJxNF`k7JIJ@wwP(M&JWvKeA}PZl;}`VmfEF)0 zUSzGt^p~z})hS2eq(7@?RPNazoHMv)@TOg3sJ52Xic02f@L0x)3!C_oMr0U*BU>*qvYj9dDI)X=x- zi@kjVg`kLMXrI4+HDbim7w;ZNeFOE`6A6NWA&v^_)X~B~*E4&^G@SJENT0uZGveVI zp>Ia8Ny@bNnlTbhyAA;K{jk7~roTRA?8TFH3!(uO_wLOa*zu!39USc$*g9s7zCW+z zNj1af&jNj|bZpXRK-U-+{QNE8r;kTJd;a!4VbL$%L#cisLPT?qVmt^B^%-*PFJ5JT z`XFAm%o#Jpj~_RJ7A@N5Mya9yM{m~L*)mAd8)J_g+3%u1z_lYQHhnp>&D{GA2M=x= z@L|InE1wLDJhklDAW;vzEOkqhlcJ^47TMfzNbMo}iTwV2yLj!$(T4^E8_Uxj<8iv&WHevxsK(vcY`kWDkJ+XLFg$7IpU;!Se#1qRY{V;OM4E@Z4 z%cNBR5Q-Lt=%NKEkz^5%0RYet3j>8Y;>jL{(4Ykk1+ZY13d?OG!YLy;umC20#UsW7 zrx<1i7@Guuh&>|U^T)26@PJ7GD4Zk$C`QJ!h72CPc0>;HaA&}VAE1FxNTONz;C3z+ zn44|20Vf=T1L6iRi{ZT}oN>ebn)xEsSCy0+VHH1gJ3h`r^wnP~a}_fdSvnJAubw1v1)#0+K(dpwc5Mwy=59 zKA7|!4?ipz9v}@JqSwzE3`D~u9;bm$13vtulG!PE;K5HkcyN?SJoL2L`X+ebQ<*;X z*v^6>`GkT8D0~5i59sf;G02z!FbjM^LN z&n-om6`Ub{RKyh;Tj_&~3T@JjWY?^PIJbm9f5uq$ETpEI@z3 z-*Toi61>%MAAQQfF*d@BeNd5BCg9EofbdBU;p>X#iP08wwo5Oc0iB$rkgQDn|695 z!I`(0tMB02#*dN2(ZfZjWB41+T&I*!}Gbx;meNaOir_~cR zb@N|`g5$P<e5DCJ#NlGqa091 zP^xc@&q+f@vfdU?mlDF8cj!1Xblq_?XA_BLGUr%)LU)|$49!)KTC?&FOn+hNq)|f# zky1+2Gx6f7J0o)>9l|G?D@)FUOgYmhos_3Pm1akk2|^E6Gr#U~n1DU|uB)Z=J4c%j zQ-KRy0gCXC5iAYDMx?Md8T7%Yt!IZgir8+N=*16V(q#;&HJa^qW9KxdJQ(G@yy9OS07Nu!kH|=zSsfO?n3RgC2I#x+IEa z>*{u6Fzp#=F0|$jMbN)1ZW>65teq+fx1l3h-D`T8(-Sq9iYQd-MFezL6I+es7l)W^Zi9~4|GcvF?GQTD zwKYUN>LK;%k-p#{l*&rMC;0*@Ey=VNIbIzE#ePJ}ZnEEx%MIZV5FFt>`!GQyngeuw z++!Z{nE|gX;{^-or3q4Mp;Anxzj!!60hnTLitG`9Vs)CPpXTB(XV^6VB2?Eer6WPM zdKU+9_EUKX2sCbnOabLJisUwYg)~bRMXr}&p7nLL;SsW-SjbjHf7D##bP^cEKqX`k zD~1|4XL=jBZ3eeU+htOLcLs{!3TMCv&@cqML<4&e3b}v}5C95>00ExhcuU|9g#ZDe z00taE1ESywG{6RUU~|X>9wwr2%B5WSv{-nC986Seu_hti{~`U+HD~p2ul5-z z*I^9Sg4||Y3%5nh#aSmYV6E|StuYzArw_IO5_rHQf5ls?u{H+-G-Q}>CU^^f5f2El z54Ug_x6p|CposCIi1u&`jA#RKFbl~MiHa8w``{5uC3_`7M=CG{d7%%SsEQp?1q`qZ z{;(+>aSw*j2C-ldbD#knF$?$bOS1qCrqYYcV-L6x4>Qmww~;CL;2!=E0E7@AV5Jyf zlW0$+Ax)MVEHg>a*hh8tAKb=m*cN$j^hVgVTv%vaLKKeUNMK=C9&QLhQ097eMjr|F zO%WzBwzY4uVIAu8F|(&%NM=r(VOaiFT^W-?_V8^(a0Urr{|K3tjWqC#hhz_6P$Y$r z3q}|Z=N1pS5F1@!4?0*qG-5P529NhKq8K~j z003|bJz)rjz$iLE3n6d-IuQ$6@B))y4^z+vzMu(OpbrHw2~D7j{V)Sf5DQUY2sF_T zeZT<4C=0>h8d}hqwh&|i;0q`M7|teM6T?t`a*!=q|5fsaYF-6X)Wv!Z$VNaJK(MhN zq{UCP7c{VTAr}afz}9PeMNO!6M;1n#wl;>dH$emWMGPkj*HLVMrevR?Fl6RfPS;uo zS3?$J2!Ur=>!}Zfhm;ZN4<^tLn*auX5H5wV4@FoAAVCH_f(VBL1sk>=`LcJt1c&p1vgiic`Q+$DI zRQ3?5_%HADWj4Vj_7DtT@E0)<10FFr{csC+5(D;N4>nK(@h}TcU=Ko27(IXjxBwD3 zPy={!IG!*c3bQ=c#}DFh1^|Ew&+r$|a0`P%|CltVw0;0k1*4@B9WpFCqL-g|1|MHCKXTtWxx?xSsSu1y3MWM2(f52WqKwq>ka(xZR3O zs7rdx;UjK?Pusey&Y7HP+jU>p|Av}+sUNy<(^rk@_jhDSaWxkYtq`y;|U@BFR z1h`lR{m`aW5f24m0sYVl%hM=?P#K$`0%QPaY0Da;5i<N+U0`^b=m#oV1peHeNPW@ngY5@fT08Q~Q0(e>n zNiYI40)IZxro}P>sL%|EGz0vw3Gmkir?3xRzz9LG0`9{IT9C9NQ2-;L0VAOUGoS&2 zxeuEQQYRAFR6oY2lCeux2?%9K1e9O6lC9=3RR@!uSHx1L z&a9P1keX`GQJ%5I|06l(a$$u9-Kkyy7FZDITIK1uQ_~|QM26tCmuPbuUL_S^TQ9K% zHbP{emujg{cat0HL9kbAJ%fmR+ePGdW)`}Q54dKr1$+WTOfr0q*yXw^D0@sp8X#5xXuufx;I#$ABs?WEF&01W z42Z`B9%7UkOk#p|6c4WO)xMA!A6yvVCBkdiLW?RLdwpOwV_{A=sw&;P+KRh#C_^U{ zhvr#&Nc4p`EvhMPA)w(zV#g6=mo*wjXw>PQA;+#4ltEO-t1L8=&pCSHx_V_OBDwm4 z7KEEsG`30y|6)K*eBnf^?RdQ6L{2n)uKo-!2(o!h#&{WGMg{w>bv7H!xmpIrcO(q1 z4LUdc(Oz#BVSk+57@c@m)j}^UT#zifDKf=uy+OWl3vkeZN=Z}#hfzZ%o-RZYSv|&x z_Ewe@N8*)KAZ9jc%fm!hR@5g}WT!5Y7BdCn8oyOCFGxo(q>~4}WqV9zkcO|IifPcH zRvzmi`W(=hn!Cxxk^^bZFhZRLB8olb!v%w@c?dHp(s;5uNercagZ)sn<;Xy!l=-Hp zZ39^~gq|iA9`$m%8TwG5E4m<_OYWM|1{>Mm+MuedL=3mP0qsgq6v(sdh2B`$=jd=+ z9!96O|7XXAX`_KNG0JKE0cuukhMloeCn-j`#IQ=!R7QMX+>ITgb~pxJYeU7t21YMW zJRbFRU&tm@>-aG1WnLqONoi)NT;0yh>#>`QQDr6Lrt7%G1m0G7BVF#HTU5L6=(ZBR zh00`WIW%GxPE%c$V)>$!$i`nI#hp!)RB;Q>$jM}YJ7s6fF#Z@K=+S>)JXLpd)s>xN z9;!8AXnA5+fxNxOXJ<6!DuHl(d$qN{1!Ls%Ru}}XlXxsrsk%mi{4?L`(mP{KMU-OL zB!*arkA#fn?E=YL9^O;*M}q!Wc|JBu%;x50&U3VmDmJ#7#7B6eRGY!kCoVP*C~`Tty`bcr}lrtB%dTi6SR{qjB4DlSU=|4S8yNmR8esUFl9~ASt5MDoO z9@%VOT+j}=F-LA81GWWET7pENWDcpq>k0MXaxeZipR`k|UdI>4Q9fhOso_DL+981U@4@*=Mh|(drGC;x|3wQE ztBZR$fh{z~cX9EYR~kc6o55qh8vMw}U#Kb{^FeGuCPxRl+Ph(NEsc2rJe6g)8~(2M2z-+ET}h8AH|P`^c5_q zu%y0^_WXTZNfBf}kRT1lqd0M4Ly$4u^`l|Q!yrFix6pBkq_0Pt>{pxzNQR&|NeBkl(Z^t z@_F;;;Xfar{C2qTxaWzBOxZ9vbCyKqdK4NOk3UTQ^w;x;NAdRU2os8*u(qnmEAt>y zDX;ia%1b-Qd=ZHvL;UH%7poXDiXpdztEj1pj$7%6Em(T6z49n@uQ<5mL(fI+PBM$D zs$^`>C+2MWNj8@t6zjvlQZi1trP5muC!~UFQKa&YY>Oc%4dO{T{|=iQ3p$siV`{VU zo;%5?=Bm19CBqC`Y)ioOdJRN_UK1q{S197JE`ubx3PkRrit)faHw1IT4-!btG}EM# zD_H(07Gj{I zsTgp8V>e0g8B0Nme!zk~-=H$9RnW8}Yc-czB~PNAa3qqi|DaB)@xZ5qyB4$McI?$o zK7CDVC4Z3WVZ!$? znz>5yq*QvTSh++{#6XAmfV4AAt5P2tLV2a~uy=g5jYW0WWI8F3?fraVc} zP(G_J_L6$dr90XZUB2)~h#L0U z!KNB6pvVRm;>ow47;v!%ho&lU;ua*d$IF+*5@s+e|9u>e%680DX0++gj+FFr0n6$w zcdhoy(WK-2s8ijE2z%SC8MnG7Vt}Cvu;3I72^bP;02L`UL?{kBN+r3{m&ui^H^%A~Ua0dRy>u*oqv9MJ z_jeeRrEX&$xznd^*DYarPLb$*W;J8RMtBB@bT68xkL*d$ZSG`ajwI<^CX9Y%Ms@Um-8E$5z>O6ncs>;(lj%9iYVS;XRv;S zqM0lSpHeN|bdaj0BF)8B$^;2^{85iP|9s348RT zf?VXLhguv8hnSMqV5Kpwm?QuJ$f;C;s(>Tw6Jde^CWKh@3}=W_0z~%_8k8UuCZLEY zLcs~NEpZ8%h{#F}0RflVBNw3{Ln|`T4=g|c3V5&$=b{8NOG$Tt0Y+my|L8_PjtW;K zgvqN+2$(xMG?D;}qp92|M_lEv|C*2k)_1V0NKyfaIy!kIOBOT}l;EKi{E(eLK=IX* z(3UxyY^`DFGqX@SK?pcFg+JgB10irI1{a6{3TWbk7&uD^7eGRgS%8EKn-CcrhgQIu z?#h5eNY7zVGlksnKG^A;)g>B@N>Wb)A(*GMR25ZP>r0wLbE!(PQA1n_C}kS5g(et6 zF1_ij*KWj9Oy^m~iHg!g0wpL|3yNy?paCIhdnMLr@VYukT_-1lpq>f zWLwLpX9F~D{b@Ptxag*e|L*Kj0^QUOx4LJqt+8D$%P7s%&v2EgORFdgI`%CMKs(FI z?k@P0wAwHpqRhuF404NG%)-R@=Bz!w5|3Nh;~q#e$b<}Hk6Xm$7QL2^y)SZ)k^~1O z8+mE77?i4W({D2^x}SBRLt3>!M@giPH&Ns0^HzX- zV;>7YY$jsc{S3Db#e`ZJX~3e-BCSkXX7JE}&5 zIi=vhxKOR#dYnVsIVWr!Ph2oqylPXsx!U3wJgGi*JEQx%xz1R+ z$7{k@|NOb=*u4$I8Cdj^K)k-unK>@Rx;^nh9YG+X2_Q8)p?IQ|JL9yBXu42iH?g=q zOkx~s%sk_Ro%0|T&3K6DA~CF6h^HXJH{&~&lcAy*8a+C|ko+H=BE|4nyqh_kgenZz zQj$7bD(AblpsF0%GLL%H$JfF%WOTHycp(zB7{lp6>S{l2Y{5W#I=N#%{OOg}vkODS zwSaoY#OMkYy1_7!Isuvk(X5+5LY`?4p(7yQxVQtNyr{DsP(h>An+|9BjSURL z7RjtFge@(^Gh};6MS7~Ba!6F83p=wEff_4`8?h}>mdeW*+*!X=6Fjc`Czr{zl$*>< z|E#^Oh|0Z8iu&NkGa9H`$wi!^5vTDfcr!4r6fn<1&6@1CVjI88KsUd$Mv%m?3Iilh z45Snck3z&P-Q+Vu^GKEHmPr$#5tARyjFw8v5ewUDj$aEA&9t;;A(@Xz zf?L50eapz5IE#T|x{L6&ez=EO5S@Ftqs+Us8DTS%%o|eR!V?M|KoX!dYR`6pmBu+f zl=~9`Y(>Qrmb1Y&cLLB~SxZF=nqZ_SxA>>z6AIW8&1RT;LcfJ269nn_~JswkP{ z;5#S;Q3}F2!NRBC@ijx}2SdoPj@g+#q{9*1qspT^mdQj3v#mTD!w(IezauoE|MCt9 z^f<425$%`}4D3zCi;g6`NibxQ7b#H@c`eQ8tP?yGq0kUK@DGEa0X&eMxqB+3#G?bD zJ3hJ`ZfQvmnFt-2fe`?Mi1>jJ$Oq0UPc4wF1F?q}sDlyc0PbLMkK55(+*E- zz=XI0XMNTySfZsVBhjouBoRUo8_f|-jOwaH(}au%MT<{#PTFLs*L*&W{}DM(UB%l> z#S62r9z8VPe7oN03O}KfIr*)=D8`5Cn37-*JQxX@Xa#v#wb9`uuwGFqY{8e*gr$G`QR>v0K~Dec~U6|9FGok`f841ibXi zJo8KN05p2VEV~#|BQy-Ag2kAeNlRf>n0wNVds0^stzX5!|Lo7k*oB%%O9C6xdz!Y% z%pL8Z5AT48L{J7wc;ZB$1egel6C@QtC^zgt2tHT?ZUwr^co{^2qj-3O1L=o1Fod(n zR5MP^BfdK8JG=uMPS6;|bY;&)id=U+6$`_#TuB|7bifbVtUxX;GDwAZ00lA_zaR8O zbZf?)++D2j2T#z!k;6NVX-+#Cwx=r&GGR61i?K7Tjw+x4g_r_T7^djehY!#Idzgie zT>$d^5DjQSLr?+$z=ZC#hdDq2T$lo0)`uBL2%7MRDL9CG&;sn8gpqKCHBEwOV1!aA zg%@}LTrdF#=F>k|0ew(_{WSp#kca{RfZ)mpEy#dU|Dc7TMb6w~!^NVL4kO8wfmq0> z#pd%--zdaG+FG+HL(vRK&qCqW+7x%jTTb1QVpH4pKvnL$slq%#nAn0qxG4rhKoLD4 z9S)t^n!%!(&;g(XeCr3m#bSLph8B1Odw7GyEr>TjX+B_pH|T<6c!L&T0LtKlBOqfy zcmsOShm|H{eISE3I0Oh_fO}{GL#PEV=INYH+>)+`On3tZ$mx&3+@4Cq`7<@$tmly# z+oCf0e z(1#Y-hh0G6H^5H>9b%@`K-T4;nL$_B|12PYgkw)6JWKwcW?RP_WLVzFx}P>=JV@ko zeJ&0<(-UizU07m^*xmLJTZGLH03oW-B|b|TH0q!gQHzCWD1eF8hg*Q{6xD)wC;(Pg z1Tv=qBU^whm<1Y00)2>I5wHM#n1fR`WxSAuTPTUoF7ADBgm{<*q@L30p@f?22#Er^Cq$XFEs0BPt03Q+;_qD(e+KP*XZ1w0`; z<8fE)oca!yd`4YE1F!=nFtT+?s!9;0`Yfs~)hIz|{24X1V0QZGw0LL?BNoF7y3w*M zAqrAUo$?13xPWMQfOxoqI1mh7|1kuhj)xWpgp-DV4Bz5ofPgsY1PB1yRB$3L282|| z@RN>*PGA5sI06W8Q$PR#UvTM`AY*%AfHB6F>;VLd=mL45YIvSiV>2Os{#=(7-Ie^p zQVTS`PNz&6u;^ahmqYH~=m(+Rhg4v4&0@RSeVSuEhI+`4r*OAo^jwsvl-^pUl zWI2}TJd*8o+G&9dum?lPgBDl-Bgm^=SO5kHgO#9x7H9$QxeX(*dbBYDYG4Q~hyxa9 z>=v+-U1$L#Sb#@JRI{G}ez1q7rv{|I2P|j-OYMiOUvY?Vg)o?iePDW~KZvIf11P}) zsNY{SmB-C2!ewv@y-E+BNfCSIMw z6zoqHqKy9|TL?@_(|Ubtn=D_!i(7Ek3vgBzSPh_^2Pq(gGd^QLV1apH0UDrb2w;Iu zI0AWKtWIzg5MY2~U;=ySf_-S|2)Bg*uZ7=d0DAx{%C!dy*oQZec@_}=mB8Fe*av~` zR%0zZ_ouwrM6v3`8Y2Zh=Zxcb#m%YB>K7)y*arxG@%-uYH}D|Aeq9#w6R1yLzjy`v z`Rk|8UObHY_St(_@ghWt4=Em;_)sFnlokEiZQ((`I zEjxmg7*F2JeGe~Y|0IZz=tFxf_a&4G(`Z3~@pNgy18NFBjPaD#^rw`lQ>g{Tj-_ev zB+OG1_qh_*(;z{-Nq7GI$rPhdn}9QBdpHI?2q+R-4!g!;Aw3f)<7Mv#sN z1GXu#qs7@aXLGDR5+q51zLZ@V5Dls6mj3FYidWCyJc0A-f!?=|-#~s1$6oEn?-)k* zwb4*3-5$IZU(_!aYa~5GW*_d1 zYiJ(HXNK27cW8BLDW#X6dv?|)WK8|}sYpb=g;QYymasw+u1V{?{8#+bD~t=gzTB5CxKRTaKg?qkVWXj5W+N|rCbL$PU= zRO!<6T#h(-Mv%BZy*MKjpo9{NCs25jWeM@Hu}ca5l%P+{HA7L;#D~(TAyy)eC6R0f z;bd5?-)a;S(Fjr3u|sd&84H2WOi$V_8OGLHrJCG0QD$c6Saqei{rI6sFZKmCYbE;h_pgLo z|N1uG9mNQ6-kbs#lji3xCGOOn-F0eCsE*25e03rZdYcdb6?9=vZMIQzwxD^TV$RKb zyH1D&iVr9mq8|*|M^RgdzfXvMBopI4B^ZAlig|k(pRwde8Y)SOQ@jzLyM~7; zcKM2eqyZSMSSP!)X(eJBQ;Eh9W)wf^Xe0NCSe^Q(wYeb5BlugG;e@n6w|sCVR4Z1; z+Lpj^0V!jwdJ?z(S1}NYs2_ORnr|qTr+RfPRu<_E3AaT!=NXG_jAEWt{HHPIC$#X=e2EuwTl#!cn7k_-RpY}<0L1o^SP&#u3Ho% z94DG!h}8_!GOKi*Z}RrK|J5p&+M7zea^3tuWk&wcZoW?Ou zo9R=f8&|cVb`tR*9XX4hZb>3ro^yOYij<|2=Pu+mCsI$cmF4DkElL@yN1(uilmui* zQ3-5S{NUn}A_8z^g*>M?y%|H_vMU2myci7^4H zb0T@k7b-up8o}L86fbB+#bV2&eoPFrdLk_=VJgwp84@VTshH1Nv&4PE?q~P|>z#=D zPRK6Qn0K@%>`df4DrSX&+#_+70=Pl^VyL$xbDIQ{S37J@H#IuJ*MC_xVBGysL`pHA zKXw5va0;|D_V{Q$;g=Oaory`i!%1U}6`FfU-~qUJu4RhH!g+26a^gB2?C{#XsUc>% zXSI`QmLk@auv44lePV7Ys84kr%XTwFDDK)d!3IXKQ)H}cdF{NlfUVe?nag5W4LH8v z0S$#6UYG|1csV0OWm^7#YiKmqRDJB>6B)olDKhX0HVovh|Lp|iups%wOc{g*1u%me zZmkA0bY|9)0p`=R)#ilJ5UZ=vi9X2%*~J)iz9X}2#!{6vF0S&dy&BRV#p>5+XDn|; zO(XgUCPj_{uV8}ANrF)bq3&I}FkkcpVL%ZNcvn!jJu**=y|$-SUZ;Ri(+gMU!h|A3 z;}rLHsAqmNwd|s@n7k#x|oNsgaCl*D$Y*|1+UMDnR1)&gAD*?ZM_6n#*0z zgB&C%vsGi(gTl?QkwPQjKE!t!=@%>fTF}HTX;dJli86~O9T&F z$VFB}QHmZNo_28G%dBtIk7>@IBZi2`PDvUY)6g&QAO2*zD3(&-mf_`2dm)VbjZ6&z z8J&R~26@p|klR~I%~>==o2X^39EN}ds#n6;gWU{*2p7*pf}S&S8c z{m?Uk4Cq*x;ar7J?E@Ci=bWKJDMh*ZC4?}sIUeTeYA+&iLS?ZxBrjh8L14~;pOfB8@i z>0Md9*FNOKBf3=Gyv>gE#?t77;V_<)C6E+IcMp6{=zLePPOt&|m76tL+)_ zy(6uRie<2&c3n`Y_!smIrR=o^-IYcm900tPOyTSSMPNZDM9miL0YPj51fW%-Dc^%x zlMS^|n?+ggP0}valhCYH#_i*XCCXXerinRBWYlG|{n3V)hHwmEYnVzG*5wa+U={fp z>eQQIX;8bU-9sVPT$WkR8INwNx> zd_=nx=?PX*ZsN;LSPX2se4A~ zvBuLK6_NN#huIZ?jYyon+0^s|A}oL>ct})a0F#hGDdb4eVU#|k0*o>p zjM&2h)WB`R1bh?(|5BI*Ka2-UBr8P_MC9p1LlEm7vX5ke4DHz>quP&lO=NDij-owS zd@W8BzBQ7-0{YV4u{io|u+V55NClOdGc zaMy#84oMh>VU|Qjz(;)Hs4jRnCqre*0(@6{{hHA^zRX@HY*sO;7)DQURS%};YLBbUaO4o_Lh0-BH zE|dZ%90t-_Z14F)um+M+EWsWe11HD>6o5fLWUW8YfGFGtCv*e|fI%x1LMHTs2@rw_ z*g`7=O-L-<|C(gSPP}E#*{e$4p_00yD{>o8W^9DvUd2vi!(3;JiB_c9V*q`d;^?Dg z@R`m^5|iE_za?%-by_&0&hP9PVU*iJBnegi8pcHhxI~tIvB_1sMD6?sAT?+7pc~)% z&%-#3D7lJBh!R>-sul``5b2vhRmRm|3&4z6r0T@1GzI}S>PcLxUp^rTC7@yY9-#4< zD1Kbr3RP+d%>7=j(QfNU5+98d%Z z2&+JB0vOA&A(X%%S3*22fEM5J2b^&R+yVsx8MhsplbVqQ0*cy62R*4IF>>7NN}Azq zpr}TL!tm?yZJO-_?E$1_Qs66p+FRWyC$S0Sd%J8!SUV%)&mL!3NBN0Yt%iBIk_AkMK1}aPPm%Ls6rY%l}4PRs-%wcv4spL#e*nFlfH=v7Kp+Yz-SVc!XBikny?+w zEC33;h*FqsJa9rhv;rsG0v6O7jQWEKFFZ!m)ZCm66V*u&_glz8TnaQHK|)#g#X zPgT`5gb}Y=|KK=B;VuOpK{^p*MO>4$V&vYKB|;@lu1E&DXIA0p^OoJm@G~A{M0G<= z^JucW!30&Qg?UkCoU+;MsEOZ@Oc?G6wdunS>;MutL1-WW9N<6<^usO001_a9A)JB} zAVmzkcMRM@K~Mk=I6(|t1bgGaV|0KD)CQGqgaU{`6j+1;bi@lV01d3b|0$fp4CDiF z_Jab%!9Yxb3V?zL1OZjdf%!bdJ!pYsEIAV9KWbupJgo zTmc8TNJJ@MLf zM2#**YVDGB`o*QiGss+r&-w$DfkHjh*3WY8VkC5psg0;zr3c$?|Bz(Ukd5qnY$QeW zz(v?V92f!%#K1iuK|kz3WedUR?EtiX!9hR*B-?`%xPm@7F$!EjKLo=U5X2vJoxuu( zF04RHLoy>QLnzDuA%MaPNW%iGKpNV^hd+b@{J{#ixJAqX9^A!>ONq8rCaV6lw8AQP+OhFO|#PP0CxGu4Ls&#Mg5`BHf$iC~e1*Ir% z6%iiemN}Ae=r$~o6zUa;MMP68T-yDdIhcTkKcvDZENw0w;aXT(?XaRvRVK0d(>~ze zM5-+5RE&FO*5k?{cFg>@x@V?-osE$&Ss`CI5oEiqWj>|+|G4f(0h(h?(xQ*yrRo8e zzN(8=WXBXfhdxXtbl5`F2gX)zOog`IvN!7aqX0UW^Ic!CBT zKnu*@o`}d4pupZtfgvcs0syr=3^ib^I8OoVi(|cjJ?6vParFeU8g@1nka3@;+o|Cey1p@bt1aa4%$qey-BHZELP z(4IbxG8LNinDC=Llq_{JG^mlKPk%t;@!aRp_YQPCY(SV@iV`0`cSFchJuQ-!5quXt+?Q-OGLwLJn^fdj?#*& z7Z>`8wXP5v$uERRJ7~pzwDX6P1L_$nBPe5AskwZbYe=TBM7&D1^h#pNFqC9cNvN7& zI*G5CLedPkziQ+PF}kwqizd#*3Tr1hX@twh8$Xn)Gr;&aZLN;3>mKLM?9 zuY#Tuicr2n%nY){v_$Adk!F-pF4!zu%TB=})ybfw@RA7+Pe7?hCR=Ej>`l7N;>n*} zb?PWk9c?Tuwl%wo4Y$trky1pk`1$lE|Kcvd0gjb$a3Ya|ZixX0Asi&`i-h>WmRfyK zm==ejD!>7U8Vm|Rg_qd0hlUXr!es<|W|(CxJXXN0&7eNeVg^Q{FoYaKqLC$sei)fS zixrO5ucn1(m_eEmmet1*6grrpjylSKMvD;`S;1aL7||jJf2KHjhJ2I&z#m0M7)p&Q z#>A~toOOPTO`dc1d1oQF8hTSXFRfInL7TdW*Il`sbkY>}x)iY=Ynt@u3bp*`rOZAO z2$a{1997jLjhYEE!_vB_Mo)2b_cc$=^z~4!4y`d&9nXduEur4BYU{CP8q8R!IeHq` zj!@cEMjjov>#ac9Mlw}9B}cL&|4^CLv+=Li!h6NRhWZoI(v_AJ-DOl1ZyyHWZD3h; z7g&~*U218hJC;siNl95cr9q@zkOt`nap^`%Q7`~O@=uAVC`u_|frJvu%lmCU%$aj$ z&dfP8&)mQ3ZqsWMi*i)KM|*}Uwa$8mj+AQUr+qTs(y@BkrwjllOJj21=OUD>p~bFolbdCxV^ z@XfP}p(r_RJ9sOOd{spFY60h6HB&}nDSiOUFFp6&CR_#6)~xpwz6`NG=u?~1HH!l= zx~<6ej1UR9yYDh{c3-kF)^A^?_sJ8)K=PBfbmi{zRNhezY07ucvTZWVuJTMMQ8L`| zE!lw=<;nHTQ+$JbRk-J*ZDp+w4R15|+=1w(M` z_*Hqi+#G_9-(oc;yk7GoL3lXbF}2p6HfCitzo%=};!nu9Zkil-Sf!Qb1SrE9) zygBGx*;ygA%4bI#rMQsmalNA4*jDmU3A;d#e{4mWb1L2WgGM0%p{l)As6(poU2!iS z&4ekcBV8Hi<2tR+uN-VLX@z^A{`re=TH5SJ!!i1myiQoUGm^zr1TbU4szYwlQwhC!*eHZ&YESBd`i+=9<3tL{3L$2 zfM0b5_H~4+rWveSNX{^VDV6cb4;F{Moc^0PdPcMu$#p8_YS&(SaYL8l_P)-&gSS1j z5qNmx~OheMtk{(!1EX#D^kqo>?f6U-Qk=p?;|gQ$^JvEWQ*Bd{%?J| z1dM6TtEQy@;gOcct-w-0LA#OW9xzU(+~ly~@?HDKP#swh2hloqJ*BHILfqydA!E=-WXCv&jV63%!+wp0BQvt;ske1}-hwkiF!n)bh>$ z`?mr;$H~v`!I6W%`b)eV7vZv2>P(K=&)-_T50^c!ii~T>ah}3Gn4W7v9lX-VKWeTd zShi-J3EFS=*)@NEB)Xh9rRJzIEt~RA-hE8e9vl6&ybj>eOEYN2 z6i3PmUU~Jt&^K3u-Qj?UM+8(!N=o&=YxRZ*W>D3t)(i4cY}APJKi-o zU01*SbV>X$cS)Vl-do;CdjD&Jx@6-N&N-#~tTn4ttN%Vva=*u_UC$G~0BM5|lZCDM z4RKau#I=$y|2bd1!PA@bN8D8H%DQxvpI{VEw#Dr-{s_IaZ1FLI{Vd42wHB(*1*eW< zrXFS0;(in5YNWdX(7)fp2VdWuRc3K`3_KXyKhIdutrHVc5J46v)>x(5d`6Wj^oJ=H zTe!X`&5e{DXZe=JSQKPe_~Uqj_wlm=LAZIUfV(T*vqoJWTQo|DysDWr29@X-P}e38 za#w66s0{;P96`LSr3Q4SiBo2vpM_$g@mm!sSw1zK`&(Z;+-6@pO{WiqhU6PJZ>Z6d zNASn|syDySs(=S;JydiJ`K};jX{xCPOWnG7TT-UyYdZvfS(JH`x)goq zs3)abjxUn%AWaQ$>Aydb^s68(v=&!bHuf%A3;CiMGoxjsl6L@=$i7rLA)b)&m!iwc zF{b}fva9*+C&&|IDiq%5{4%nUhvqO%|6I%yX!GF9NIYgs+h8~dj+n?pv{BMNKAiaI zx^cT5E`d(>`_df$0cvNHAgfbtX!X-PDkb&Ior*ELj-*5zfp|JrWKAe&Dispqg6kN7 z{BfbPCG(hEMCRiSf3>5xs;~nC%pt&X(pJ{4)*Zsv6d`zpvUjNO*EGU)V~fBC)avn) z>vwIuR(k@ao;ALFh?ZpYtCknMgFyoeb9w^4QvEmKZFh8bU+@g;t0e1fp0v&QHi+R{ zWTk_|xI`a9eAhpA;Ql~wjZMM=25}O2wu5+R1c2_5K2C&8!%gP#2S9^>tZS(_wK4+H$?a(+Dg!QWjkF5zghUHeUVi!o?mvU^xi zmZQ2O=s^IoLZcwJ$$+NG0P8TG*@Vh6FaRqi zquyROgxF0Y7+905Z;#2P;Me z@8WSqGN=i2#tXHLT!r@}8tScJehflFR%M*kNT=1UBxwuuq zJn&LO;=oQOFXE2rl%GygJKHz8^SL1;IWbuR#q6I|G`e^Mgv*AQgn)h?RH02Z5f=uf z34ld$5a&rUT$#p`ndpyrFmNE^f(%FLi zFMp*MEBpku08m21>2=d~_{44rBi;xPsNSay+!`71%jpq%0?OD8$>#CZ#u2N0>&1&h zpdU@MUwoXU+87Cz?ub+tm@$nf%Nr_$)bJ+)XkcUk3?m(W6_^S}CQ_IWSD8h-aY0lH zp8oVDh{kn@1~$O0w~vt?qC4P$weu%W33LC5XZ$nBa-l}I0$9V&U6>B4;1{Bq6%}>> zbhVM-<^r-D4Wh^LVTfU7$N;yu=;0|(unYuxkc-4y6 z)D%NFe zw|aBr&r2ges|N`fvGqA0jvvo6r>;lBConximWyIxoA=!PmbC7RD@ts?-12@B@&TUH zYMU*^~F=n`%o1Wj!XZYJ`1=%O{F!Qc{@Q;)cbl3|V zNXA+fNVn!fv$pbRZBXj*D9(QXBWj659~yMbJaJt?i>{cNuYmdlCHqHunO@xYBy)Fd zu!QW3r|QhJB#^zinr)r$Af&Z~Q5bbSRg8r|8l_SQ3QIjMCJ zO-(7e67yV~VSCHV9F=90(K+vD+9qN-e7@`P=8cBSqVOq6tVL7`n}A=CCU}!^wvGGW zq{>4+OXO`Q4_ryf@lrA>ijWU5{;ug0JIW^lKyu9~UFeGt7RKBG8VM>z-BM2REe-K4 zH)()QXayvB8+R=dur|mnj0edNa*M3c+gQu^k{LyHn3@6BaYzV(2Yijn{jeK)4Nv!D zkY3gjn$Gj3hf0uNy+Gd;Pc<`)tG;Jx(yP0`LMXTnJXSqkfL0TjNd{K`pBm)*M+7g{ zK)(>da1cnA3KiiAKSkNGXh8v0r;vi@@OPUZ3AaXBZ_;my7RnlaVHvghDG@ll4e*oy zNPC<~*K#DqZU5bgGbKjhyj4!o_v1s_3M1{p-8|uhO<)@Djs$%$hgm|>6nMOME7|9; z$fP(Y#6dJWhij(pW21PRr#a#Bvb@J$!PFhGkz`dr!xW3^>Z4oTo>wrxPx&rC=vG$E)b&jrf>1+8v?kfA*EmXYb)k4aF~; z+!fmVKT74=bq)TN-gH~z{-<3{Y1l7erfgdi|Uz)g+ne8PrCeKwcR5D^Sf3Y#O1f+-?%}Io`w%Df(hY=e2 zX8Ffj>Q(;Zse|)`oX2a@joWI;_gVNIzkGM~rPl30y;}=>sJ616iVon2c$<2MRn$%Q zkvsF`-v>p4J&UQ{Oi6`Y*Jsjyl-8|Tz*BxZzDPK-l;H5yPf6wt76{}XE2W(mXciQ@ zI|k0q6Zn(Yy5ZX)MfxwZb~V61X1ebfzzDwWvzWs#o3*pDMYDR64r2G?C*fhqeEhBU z`i7hxS)Np4ElUrTu8g937*TFElm-8+7hAoCSf`;3s1YOXQSIYzJpL+_9juj;8+;u0 zMXD&@H*cJ_Bh0r*^GJ+ItRjJ*H4NbWPQ-i&E_8DVew{vCD-iBN6Ok%%?FQufG~yS> z+rT`-+u& zwPvpurN_U9Iv>u;7%F3H{j@Yo7MBX>?|# za<$BD?>I@Lh<{%qr@nsm-j+RCWm_K>d@U}A_|?a?eW!J%`rphs?-f9jg<-?X<+lu- zO(D-35nV&OaX91YCk`!y@t%j?bXfe?hk4H-n?m#zm+@F2_8E7LvuNacc8~=HunD9RF+nJ!u`sAKP|p z7pwjla{KKJI-S2Ror1LYxECnh%DvBL2Orus%z(%PTADNvfA3{?y1pn3b^X7*;%^K%$vud zQ?hW!fC7~XolRk%W4NxL#-UWm(5c8L!wCC~$1MIrC^g^bGiCY{r;#wgWZo8=|GR%^ zsw=oxuVKAbQtY(W&(laIIpc0{+VkL-=J5VoA5?=6T|Xs4gna@ktW@%MW)d6&bE;xS ztQuN>Z4`8!e`q$~DqKPY#w^5>S#^FfZ=9A*j4D`dgzA($tuT_8iF*Ujr6s1_NDgwF za;O@2oP_X@QFs6@W`2;Lyx z@0}MhIJL?ZLsSp-Z1#)j138AR=IaxG?E|fRfGG;APL6SB-$aW{xEY3C#Xr`A`n}G% zk>jinfAMWHog>V9?#(M0!*%`OylR{+57c5n?LuD0Q*KBOi6KOJms@7Mrv;f#xQ(ih zHFW|a%dcR+$|fSij{*j-C~?bI0WDTG(vNfKls1c;8rAN1-1S^jX>l8D8lf?Uyo2?dIPjXQ(ah(NQ;zYTt)DIu3%}_6 z4kpZ(2wswC{bMCGS)tn!6?2oNK|77eQxrBK>Hn%$nqApR+48d%)zV>2?2r7GLwVSG z*D$S>mu>~isYR=g!F@X_=U(KzAsEHr5T>gYbJkI%7U#w%uR6xmqSF?AsW)-UcEh7y z?f#;}*j49GsmVv*SB}xYOcF(;v|#?Z1{Dc=^1>zN!d)Oq?3*JOifGViq^swY0Z6vW z`MiS8XIPo+;;gD4G*3u;8v}#hEf=2n>pSyo=^XG2K)j7}f~ zKXSfB{I9Oiv|97HHo;t3myHztccl1cfO#Ds#mS}Ar7+am+b+R~Db@Y%HNASQH|G~Q zbDd3}!d$^@I&UT)&cBfu4X?^=0UZ{#;c^2ufm$1r{AYF6$$opxcK-f13$oQzdd`#4 z(a8sHsAlx{P~+w&hQ0i8I^1M}~p9%my@}{s~*D12N)6R}^FV!mJGa2Ejz?j&I7Z&Ouj=K{% zk{vN#gnJ#GBZ75owZFI@$7q#Sqhk&=YN&1)dHD*C4j1@Ax55aWDk&$os`v^gcl-SWB^ zZ)3Xdso&Y=L6dHaT4=FEuYh$=2U0eU24T9ZE*`GNcXAQ)aQfXwbVVu+2Du7n-U8Df zN^0_)b<*pkn&Vu@MzkHxX`w6$(0<8ywP|mV*2TZZf9Mz7XF#Y<>t|#7`3hQ%It3x? zdgI?~X2S=382%7lBj@=KceyMGFL|;}yp2|eL09W$Q`?A;q4yOc$69K@PChOUE0n;z zJPms-H%121Kn{QLdUynv&cXR%&HZwWhmioExue(FVEJiG3QkqWRWpc^Z~osJeIr>D zg5XKycv}NP?dl_ZS2DuchtPBQ(&5yVjD#~Xlw}nw4L-*wCJJ5Di4e8f52})Ub%q%; zSI5+Pg5bAI2C+Eu3XLPW^P*`-^eBjk6p~4ie!C7`>K~Q zwo^bOZ36kS-qae8{Z>9O51p>+4iwrSXOs|5eC5a?({Pqf^7v+MVvis$rwi7af; zOyAA5({c^dnJ;zQ@oVXZ{)fw^}Z)%e0pMr<;sk(uM!%UeL-i1|V zST`MUhNXan;`taKElzW*J4DSUCh0Nbzp3w*^F)WV$6pFwZ5l@@+)y@Mnr}9ehFk)5 zgQFjZqT19#0Es7@RNWyS<4RG-%JsU5Dv9vHgTS^sz{>D2(KlJ3^fv5gH9UV5%t zr+!RJ@GHb{oc-AqJluvu5ER!B#B(A>M4P}X9n=+<(};PD4>krdv!;IIML(jJYrv~e zLM7yOTcL4w`go|~ub1dHAqWG!im`WT2-5gyT^+8O`XCk9g?$ID{JV&o(w!(ZP5(|W zx~BM!`xy6H|*gUJC zaTqI{m+fF$i?!FS4{nU-O88=?Jp7%)c|5p#Oka#v6U^|zjrq>>C?YPtgvGXkr<*){ znMoQ7pVGpdD0<6A3~HoO&^#hrpq6lW$6ek_4H;+G?O)bQPJ@sSlDn8=elrUjC=mo+ z$mF-k9p4`g{_V_n^EGZTXy!Hop zB@Xh%QEO+*NKolK)u{a>PYgOIrmuinx4Oz)kT`}@c|<{LB|?53y?}wqx0+*e;tIEh z=x@D%Yi-dN#5^H_$;68&QWZd=1N9euAx?t*&{CIIK!#|xb~K#?5y*c?5ksSJWEmV9 zG+qTmbZ#T zCmj&@EM#;aEq92{TcJOC5Z;Y-H`>AlNcov1`8Hq$d*!vBj&QWeSdShF*bmy1b3K~* zIdh~95I~@Ej=&FdxIdLSr~xIGXHq>7+N5bEtSQA?#S})%sT?dQmnZ(0$aJ++;7=FR zx$#47wM1_F8WW*aLc#FTvurhZ>s2CE6@60ieGJ*QNe+I z##?PvH@*zSQO1bx>=aQR=1_gjp4N5KT}IgCmr!Yl^>IR4TM5r3zpw&dvT*_{Uk&=* zhG2xZK$SN05fQ?W1FFjxk%s8h&fnlkz-i9MAeor_Jy4&v7#aCA=z-*J62Okgxbld- zAVkFI@Xp8}qst)Ur!DT?2Xx#ypx_n8M|earPsU3~j-gkKJzIp0w?nC-m3**OgZr&) zcYf-e74N|%Tl4GsK>J8dj@J*E1NV6J4}^GJP~OR&&?;$x`Q&@MbiTb@CCRMkBq)=g zIW~Kr?Fx_l9ZQo*M&%wJDcwUkH$JDrV1cJMaza)m>o@Iioyxs+QHji6hHC}nNd8_u z2d8QU>+w8@jABNpy+uQGLt%8OOYTL~sd8N)dM;CO-s-oMOdew_Z3tS%4l69>Q5kwY zJi$bNo9R$e*-}1PBai1F5tulD?RuS`zb|!y7Li<|D_}%b1+o1lfj$9&c@`koRc7zv z0yHzh-W8R85sJzI{vOC2UbqouLCC@6|L2t=r$q~tV{$6y=ab%J}?2biK07CLS`;T-q2VqnS^SQ`8TrST)IM=4R zi3zY4I~RWWZndFiu(kGrwNbsv#rnA+M9H$+&)_Jj%1Y}IHt9$yX_ei&ynv&dmT&qE zR`Mqexa+Hh3DFVPDr4m*&5{?R29jjQ7XT| z3;Thk{B*@x*GS4QSdps>!VHWUc3eP;yMungKyss&Ih`o@+W)+rO;1`@B zVOTk0rCXdA9axoGvRFCwCGmz!L9*6$U1+$ca((!1bd+>Hhn9i2jG)cU`be54ox+?} zdn;mI6!euGCtr-&4Q4TsOWLa`GW+r;okgyUGJhWXTzl(gIuX;nE%mNJ5ml}13L@Ap zR)<<@KYNhp$;URf07uLjzZx~B31*}1RQ>c$`znjc5mUK0SeQLDJujW7wa5ee0)K5z z$q=OUY$!hkiO|k+-#Tuhoc^pWTQ= z&`&Yc;3`aCGv8{1fWKQy?UD9?qC%yWonj(xut1T&I>4T7&Uh)p8>GjWX(;_iNgEyymXZV< zWw8FGfCovUDN)+FdpZ1W{H!4E-NRejeJRRP<2yZVwz1x<_u9fZldTjDC(FY^p5CQ>F4ao?J^s+cRTt?`(DQqN zGVBQx;@|hN?60R*{kczj(siPeY!^{+{zeb{PS4ng8PygPW>rzxljty^D16;T`G#n+ zi*V(OCE-1yasIkHOe${w4=Y9zzU35f9?ZFMG|i3+<(ido&fkzHGBv2ky3O z6^ROtD&Tw(J<=adr~TkjzkRbEQ z#ydXYXUg1*u^BC@TVS7l^NiiU^*p)1Lo9gg4mj>{DY`cZsCXejsL`9QppI7{bgN+S zfXx|cz*G{z#R>lLkd<}?>hc)a)bcqhi?fA0an43N{XXS6Td&}07y+8o+%o?0TGP0^IyORg=S%uP2xRk~Zw8m;L+ zxh+s_CV8+V{AO*fkBCEGtc93$p#$y5mg}EK zrLcTXE~atHK~<2xh*9XJ=DdulGSF<)r3(k2d=U#mrQNW-2?0Lt=y33U-%#Ryf7vf| z8GkP3_fpnx)I5HigR7`RYmGz4>_f8|l+nFIhx3ET*#ooe!z-WQ z24wpBIN;d|gt`Lv&!$szIxHd5P^ljdDRe5caN`*iz5_x=!70ut^8pYE1&{6k+dhYD zQt0fQP!S~5;`r}2GQi&XkZg8jcIznJ?C=b5;_dwBZZ_TBnZxSm$1SMChU_En=f}1) z&v4hG=-+L=|N70kr{K1F!Pm#L8b055!#N)q@GrKul%_{02Fzj2>3vt|#5d^aoLqI0*m^?>+jZF))&P&Rj;p4j7%Q2e|!?L z_p;3xY*S}r=hR)VF&)7W#^KkT1tW)fF+R02Xi|H|bomARV5}H*#=}b zklk+4eh(ZY<;{DmNXVT|Y^`b#vOyf%(2V+r_DEAh*d-+8qq}nQ3y1OA_XMQlFK0`9 z^MTSwE3&6D$C}_1Uz9Cm2tC7Zo)J zK3k89kx<^MHtI60FiQVfFEEqoBfx)O%;K5wr_4>`4I$sH`r8E;e;m&9@R5Gvs*4l< znau)58ru7{PP<8c5SDgQ41WuKd*2_91@m4+68*go@Z~$N9w{$pFkt`rBYN}&tq;0P zZk$?*YdRGo?irsLESU9i-IblQG5l;bXK=mE@6|Qt@UYog`9dpm(|nJ`1&y!ld%~3x zCru`KF-vLqc+ZLM#wrLT%{W;vVVbv8s0_*T1ynGtlt@0wZb;&vuxV%#nl})xM4S-m z5;tD>DoMB0q>ClITG*}!UkuVWv;FLB$gzRP6WiF{Nv>izbV~OM1VoAidDwY`Aa0#D zIzBigtBB5s8h-4vo_vu(aNX^JgP(%2oeNtInNbT^XVsfWTg&I!!vcMyrwAJvfjthB z5c{U4$;a2qJDlK-!71?V##RLm4&KkSnUB^=th7VXAU#6ak`pmDY8`ZoZ=Dw1?*F=w zvB`aGRJNlg4lXjQE2-XeOLe-K0`N@8nzr~@St>ov?QEizqt>vt-4H8n?rJCyy&*_< z5@)1E8&^e2X!;(%TRxup3@X{smUitty)_wFz&ealz@mbVZw>i)NV_Jt5P}B!X*iq~*)h9pD=EY`Y zTBv^bq_saR)K{0P)`RJ3CCDlliK|Z-qqtw$6x`(b?)k%a4CVyN@1lMc3ro)@eQ?vJ z&Q0cW@Nn|Rh6r}rNk%iArv8iZ66j^miC(0iF+z`PB1LK=<(c2=S5#M=4JJl?`|M(7fsz+#L0PNmgbmIhz- zH>MCf+Q`xbYt_Gr(F|Q1=!fauro7oDC>>kCZ42%uM?ZdxwNDD~9#=U|vMtE@i{qCb+cHU*UrW)^FOINipa0taws!uh zzM50NCfjpoOJG;K_^=|e@>k4G<;0T1I@gJ*q~C;Y7qvqRZHpJXb<&oZX8isB+h0nN z++hLN9k(1rmNu5L=3SF(!9k2ky^hCimge})TZsv zMQoJs3uXgDzvA6a+BPm_--m^9lca1_s2@km700g;0RWz32owT12Z&uvZ~$gOg}@X> zaSdJ(4x+NCqK-bDm?WAB!G=aKaPjEj@M=f~I9!;GkwrsGM_-mvh=Jj76O)+z$?p65a5^6(34dZWdeP&)o6$yg8k}8j!0vjA5!jIO!EF~zXz{Dk>$;+>4WFn{{s)|?A zy2ObWQxucokY&M&Vz2}eQ7){Elm?tD{9Zh}E4BSUU(9XOnog^vr%!LMhe%FKsB!Vz#RyON?T2Ok$V zLC91Yt*0(eP{v4es48Ol^(;(GMff>51VC^E5{@y!3aQfK!&EPt0)yOD!$>A3OmH$U z|A4HGyOjmT5y^((Ah}D7$zt4L++xAqqu|7B6dqakL=H(keH*IC%LvxcRZ%VjSFDyaawE62rkO217#B^>nb@{BR@}2e%mf;vh^I7#zV% z5QAS_A|&SGA)q}6h|_ir)Lb+t)7Wu|jdk#7C(+aKhHa71x*1rge2=Z7?ch>gZmSZ<2wst2&A4$r2l>yP6j1`e`Cz zC+PJnx+LMQU7dr*MH-U?whf~~p4luYPEqZEGHTakTG(tIjcs#kNl=&mE40f8&WSbt z;%{pO*APy@b7=wN>EIX(ynYrJN>^3bgu}TW@$T39WD(df7o;ifI+kTFd6O~}raGEc zXN4TrIr4ga1GIeMpUI}HWJC(S^?kwSPDLq`qV3b*{Ps#mFmgZG%hMWI_zGjPq8}5|;-WorcQ~2aoDm6HKgS_DB zKPtQW4qht{O})4icd69QO|@g!e>q*>J{Z z|MkNA=Dkh@1rGidWcPdTl3J5+zQ;VHY(QvoSNSSAUYlnieKSRcWb=4Bm)Z(8!W)F# z6v*47tb63y!n!^yyH@&qDT}9ce=hQCe}O7?DSP}eYK80Fm#9!9*0G9PacN#9QO_QG z7LmA1H%eq$L-lJ6rX>Ybzdj13$@|fxEl}%3C>5@A_GK3+G>THvR%w_f3aD1J%hVUP zN1RUxG~~!Hi4^>pqWa}!=h=%E>~2K))D+2ch~-~{seG=kYfss#K5N|Gsi1H_zDBJ} zE~{<+QNV0^LFQW`A7x~6W+^pNPQ?{IJCddqKc@S&KiZ8Gz5Hms4{WCRdkCEHtf8Ix z8{&5s{SXxYAw!ZDpXo3?xSA#UqnDL*7Nm4TcIxK~hW^Q*{?!=J3@<~mTh`#0qE{os z$aTM<4w`*VHpZT@%%Ka|NHQI<;mC9$;#-TFL4^D z`+fZqF$ewHw_^6DWp4dF>iqpe<@ey_=YN0C8wZ~L=#se?x4(J+{?pS1%lk2>eYfuY zJA1W$KkjI4{qn#4x5k(L+P~2_di|3^YsLM$S)aI-dpT;{4G+2Gtxm@=8waTP2uUgK zN7`Se?7ebQs-3;_ugxs-XUz(o<(MX-dNy+R{R&((l}ML&KXS0;67ssx3+|oE5u1Li zh;zQwCy|8+9h9Qp!^bl7M@#NmXL`85E88o! zQNfQvnOt1%oS(Lafu5v05>IN_+Qtm%B`mU|4ps;c8g#Lqo$<%F-FPPj4V3?(lG_hz z0W`-(QtC{Z?qM4+D7%h=JW~->mY2&%X^OBW9f>DvvC$gpT+x$G4nS06&uxue+H;H2 z3k2kNZjRZ&(6=dK{0zp1npfuoGw!%o3FKbv{A;(IsMBy-YxmNDX}5CGWR-3t?R@5X z^;}Y7tEc3RV}odEi+dM<6XsszgmdM7MZABVl9bI5F5)85Fbk4-9(m=Oa!}st@E3s* zI}<^5%gRE2PeKE&S>BOl`cHo^bv0kp+#QR&H&$C>mOg{FFQpSS4up2oQw`JpF*hhX z)rxc*Sl<4zo6j5Tqj25V%2%CKjvQGtx^G~Fh74tUTWPa2<6%-_GFhhve(FcLC<2#U zl#hq#*OHD!^U46+8l}>q`w^<&=>Gj$H$ROapBIn5bVc}F5;HMpyZTV#LHpjmzQWqz z_zrLp7oxlT0wH1<$X(EYf8u7ORDQ(*)?KWI5c2)&HDASRRaBqoX%ug0SbY8~wEn@e zh=qs!()(%i7QUy;%3RDew110Q8r*{ngDUc32M+oM!4W67X;6gSuUQ-KYKAcPzL^LLW}M8%9IP`eJ!;!A z!ULtPFhdJ1Ab6NU%B8n?4HqsgdGB45j;cPSC~Rr#Y>Krc-jiZ zs=QLi{$zSZC&Jt&H`CkrvE_;Xlm#vo66<}f{^ zno~D!nPZW(EJD)c^7yW!HL9ZglaZ~v_`%0*?yCOSTDNEZ9z?!?DCAPpYuq7itJ{oN zR)B#f*J-$z=bN(GnB4)ce>qwzCNXdNv&vqJ%Fgaf+<6s3xvIRZa;ePHZ-pjPqU|4B zD|sLO?MHmyZ0ze4=t`=~&D7h#=boY(i@{gTX=Eq!tlZOFl+MJ+WS9FZzQ%nyY0e-%$-ahr?wcbIz(fL!dX-(hzybzhfLldgt zqQ5fC-KJ;h>nM+FM>f#FG4nHVP}-$|LBz_1!TQnQ_CzzoLi+=5n9-j|b~G*b0N?xN zJ0?TxdlcZoZQwe2p!u9VH8hhCw?rOLW?Nx^9o(h~PBmv+h!emL+=ecbCzTHzaw4bR z-1^rMuD&yuElH(tW!tJG?FVNCNLF$6_9#{F=dzKwmTGBWN&hw6MPY;1(Z2U(xiqP% zF{-@ibc((z_aKC1Oa7ih(oyZ(qde}9<9gwd5c{TFgPu0!=NZ7bs4qB*o>S~C2wkp>_!u*POU2_r-f zC=F0!Z*i?~Mf{t!i0t%qQMXHWX~ZK}Z!U@Lv!(BnLI~n^v9Zj*Ud((SbAoAe5+F zyc;93g2J+aqX7xC4Hh2`YzQ<~>xtJpADC+oE8hwCT#V3t^#VLu7_{VWSa1WGLbBvL zaILp=imr#&qFSdG`Y4&*jj{q56w;8+aF1&ntedV zuGYhsDAgR)9sqt!rNyIT&*XG#!5|bqzTppGrUd1})Bz#2KwXbW@zz~uHTE-(!icrNJ2`_EI+$$*IS=325-PMQj*YsmES@U3< zFsm)K;{gU$d1d`=6lWt)`%e-$=c;HU!}3a=&p^O28oEgauw4Zd=3F$Zg3Nb;|0IDh zVx(#*io29{MP6Bs3^?5c1})M`Q3LSg0M2loDH>Bkl2-n(g{_Y5KL9F53eED+QWs*Z zN(^mq3&mM!BMM?qv5qzSj&s(^_OoSc9bVS6D31rJC$iUS-9iHtob8p&P6xbyQ5jAb z8GPlPuQgmbB?I@+&dIQ>EEdSs;(Sf?o%?UE{x=4m47-_Fi;Y`gI2(X`B`Fj4!k?TM zYf)GH&IBqJnk*8$fa?HM(O6{)6*cp)%*_hfPMi603wb<%+MPv3%%YBzvX=3*pT{8B z0fyB&f2R!wHf&k0x9eIEe@`*$3pq_P!dT9l^jydEaZTVkZH1UEzH8X&KmxI`S16D@UKo6|msIZHL@s7bkB6Eq;F;mn$FCd`=Kz0Q8Ye^Qq2#WXA@(qR$i*`YaTvHg+w{BQ^mY2`P$vtkcRgo4Jk$Zj!44 zt&l87>BT`vv?3DSVG=>MA=BI$y*J%>?`94vgY3-q@Y+{0+uI4i@<8-VSbI$k z`74>`CJ7nbfn4{FTM$wR4bj-8t(ZlX z+Jitjw8Ps-$Sl-~w(K9NwniH$!=Cpy=Yh{Gn2d&qP{H?FifV2{?C8CmG9HLgK}mR; z?*jmJa)U4$WdNXwnT$sRkXQ;>L=t>B8+ro`kqSaN_4@-nOY2^eq`aDYE9{3zyr0P=NDLjf<>(H8ZmFNzLc6m5Uim2hxq z#at27Hxm188Qb_j0DnM$zkH&~I&5h=-Y{8OR!+S&ZW@YG%5!FewQH?LI?HuB$0iQ@ zz_)ZrYKo<}_O@mVJZhM=T>C|8Y!$+ewPv8^iB;BDYE^881w8vu13n;FJhu<>u$zO` z2oZc{fwe=5CBhCYglko7Ub$BLB@W(jW=e-cT62e*4VGcZfMlT3t|Lt0S20JTcUds3-IV!_o>9d=U? zmB$*ovM5!@jpOFWwU3%&U`KPkX*m<4CU zq{xp2QCjRwANE;ahHYLZOu98ysQjrmHOi1FN31+MIwU-*3CLSUz#Gc43l>7Jb<68p z$&GxyTi!v{tj00L$XV4%IER{wwoj&d%%`==DF@07EzSXbiSPtcfs(a1R zsoi1e^ISn-0#t3!ZAM!S|5e&LE!w;7&>ECmWXxr@EZVN6(y`rqlAYUCE!Gje*}aXA zjI7WTeb7$T)lt3KZur#s*v+15$!chgi+#li9@nkfS+fP(KOLE5tUBLY1lnCv-7V7Q zY}jqB#m!yM!hG3z3`|We(eiEEoea-;&DQ)&-3=|*knLF=4dVe0-11QY?NeH&*D5wsK_$mWuGx(J;scG` ztbM$5{Jc^g)I$x(7M|G`KHxpgdFm3>Bx8Ga$eI}oP3JC;krYs6uwOr?be=7*P?#h1g+W8z0Gm_ z;)5OPmOR@Tz1p5^T3nvqluhhkE!72m=2#ZqmVU^DzT?eD*ogh#$?VWGy~_*U*f<^L zujSw5jp4V0-GYu(#yr_GPU^kR(`!Dz?3?1MY}|D|O^{BR!hP=GZ9b39=d4cRy?pI_ zzVL#5=?l%<%l+@LzTP7);Mbl`5pQxpe&gI8+RL8O0B%q6oZWb=+O7Q7+fCEFHo)Jm z+k-8t+YHS@|Bcf0?BI-kQy|ad$+z>zo$NJ!@C85Qdo17eQ_duA)tr^%EuZScp1k<3 z;#GC;)1Gf#P-sq`51pVd;j;D99qT6q0(amA72ZE}=vX$7=0Y#)>>kbsU*vX9<#P@| zSpL@@f7aD*)i1AG%yR=CkN^qr0+s&V>;BcEeveO1+C|UYlpbQuOWc{x@o651damp# zP3or&(ssQ%LJ+fiP>cm|#&a|Wdk`$^(7Wz{3P=XdIPO&>k4Exv4zOQ@_=n!~l+OIP z?N=S=&W_k)-sE+p?;!3@{7lwN&&{RoKncJBey;?6p8)@xRAoSje4GJyFmObDKqr~L zC>UkW|2zOMFgn^GfS}&?Xg^P*y6u4-?S9qqC9TfheAhxA*gIZ2NZ|e7{wOsXz`%eu7X@zgV-O=@3I==p5n#ZeKuZA>PcG$1v0}=VO{1z*xzQ)Dk^K2)@`4?D1b`78U+UAvjV5e;(Qv!-4EU0>uIuxn~gNDSbHuj(AaV)!Lb4~ zkTe8Mv+cXXU<;$6Zy4&vED5!8;I1uRnCl4y{gFb71?;&gj&Ev!V2cdEk-{l*q(C8` zb)?WIpEyd8!W&S|fj|f!@|gz$6dLLWj5xrc0>y%CENBr32H+$PdBnLfgD8{Cr-T6> z=!Xd@%o-pARc>o7t=Cf1OhE=YbdXKeTtn@#|KPNfK?(;q6&bv8BGRW@9uyA3Qk|AmC(#9Q

    Who|}(Ak_oI3QwT{Qt;*yIk?GZ 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૖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

    O976mZVQC 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 literal 0 HcmV?d00001 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..3d08c6c --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,265 @@ +name: Build, Lint & Test Lib + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Built, Lint and Test Library + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 20 + + - name: Installing Dependencies + run: npm ci + + - name: Linting Library + run: npm run lint-lib + + - name: Testing Frontend + run: npm run test-lib-ci + + - name: Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: './coverage/angular-auth-oidc-client/lcov.info' + + - name: Coveralls Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true + + - name: Building Frontend + run: npm run build-lib-prod + + - name: Copying essential additional files + run: npm run copy-files + + - name: Show files + run: ls + + - name: Upload Artefact + uses: actions/upload-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: dist/angular-auth-oidc-client + + AngularLatestVersion: + needs: build_job + runs-on: ubuntu-latest + name: Angular latest + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 20 + + - name: Download Artefact + uses: actions/download-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: angular-auth-oidc-client-artefact + + - name: Install AngularCLI globally + run: sudo npm install -g @angular/cli + + - name: Show ng Version + run: ng version + + - name: Create Angular Project + run: sudo ng new angular-auth-oidc-client-test --skip-git + + - name: Npm Install & Install Library from local artefact + run: | + sudo cp -R angular-auth-oidc-client-artefact angular-auth-oidc-client-test/ + cd angular-auth-oidc-client-test + sudo npm install --unsafe-perm=true + sudo ng add ./angular-auth-oidc-client-artefact --authority-url-or-tenant-id "my-authority-url" --flow-type "OIDC Code Flow PKCE using refresh tokens" --use-local-package=true --skip-confirmation + + - name: Test Angular Application + working-directory: ./angular-auth-oidc-client-test + run: npm test -- --watch=false --browsers=ChromeHeadless + + - name: Build Angular Application + working-directory: ./angular-auth-oidc-client-test + run: sudo npm run build + + AngularLatestVersionWithSchematics: + needs: build_job + runs-on: ubuntu-latest + name: Angular latest & Schematics Job + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 20 + + - name: Download Artefact + uses: actions/download-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: angular-auth-oidc-client-artefact + + - name: Install AngularCLI globally + run: sudo npm install -g @angular/cli + + - name: Show ng Version + run: ng version + + - name: Create Angular Project + run: sudo ng new angular-auth-oidc-client-test --skip-git + + - name: Npm Install & Install Library from local artefact + run: | + sudo cp -R angular-auth-oidc-client-artefact angular-auth-oidc-client-test/ + cd angular-auth-oidc-client-test + sudo npm install --unsafe-perm=true + sudo ng add ./angular-auth-oidc-client-artefact --authority-url-or-tenant-id "my-authority-url" --flow-type "Default config" --use-local-package=true --skip-confirmation + + - name: Test Angular Application + working-directory: ./angular-auth-oidc-client-test + run: npm test -- --watch=false --browsers=ChromeHeadless + + - name: Build Angular Application + working-directory: ./angular-auth-oidc-client-test + run: sudo npm run build + + AngularLatestVersionWithNgModuleSchematics: + needs: build_job + runs-on: ubuntu-latest + name: Angular latest Standalone & Schematics Job + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 20 + + - name: Download Artefact + uses: actions/download-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: angular-auth-oidc-client-artefact + + - name: Install AngularCLI globally + run: sudo npm install -g @angular/cli + + - name: Show ng Version + run: ng version + + - name: Create Angular Project + run: sudo ng new angular-auth-oidc-client-test --skip-git --standalone=false + + - name: Npm Install & Install Library from local artefact + run: | + sudo cp -R angular-auth-oidc-client-artefact angular-auth-oidc-client-test/ + cd angular-auth-oidc-client-test + sudo npm install --unsafe-perm=true + sudo ng add ./angular-auth-oidc-client-artefact --authority-url-or-tenant-id "my-authority-url" --flow-type "OIDC Code Flow PKCE using refresh tokens" --use-local-package=true --skip-confirmation + + - name: Test Angular Application + working-directory: ./angular-auth-oidc-client-test + run: npm test -- --watch=false --browsers=ChromeHeadless + + - name: Build Angular Application + working-directory: ./angular-auth-oidc-client-test + run: sudo npm run build + + Angular16VersionWithRxJs6: + needs: build_job + runs-on: ubuntu-latest + name: Angular 16 & RxJs 6 + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 20 + + - name: Download Artefact + uses: actions/download-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: angular-auth-oidc-client-artefact + + - name: Install AngularCLI globally + run: sudo npm install -g @angular/cli@16 + + - name: Show ng Version + run: ng version + + - name: Create Angular Project + run: sudo ng new angular-auth-oidc-client-test --skip-git + + - name: npm install RxJs 6 + working-directory: ./angular-auth-oidc-client-test + run: sudo npm install rxjs@6.5.3 + + - name: Npm Install & Install Library from local artefact + run: | + sudo cp -R angular-auth-oidc-client-artefact angular-auth-oidc-client-test/ + cd angular-auth-oidc-client-test + sudo npm install --unsafe-perm=true + sudo ng add ./angular-auth-oidc-client-artefact --authority-url-or-tenant-id "my-authority-url" --flow-type "OIDC Code Flow PKCE using refresh tokens" --use-local-package=true --skip-confirmation + + - name: Test Angular Application + working-directory: ./angular-auth-oidc-client-test + run: npm test -- --watch=false --browsers=ChromeHeadless + + - name: Build Angular Application + working-directory: ./angular-auth-oidc-client-test + run: sudo npm run build + + LibWithAngularV16: + needs: build_job + runs-on: ubuntu-latest + name: Angular V16 + steps: + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 18 + + - name: Download Artefact + uses: actions/download-artifact@v3 + with: + name: angular_auth_oidc_client_artefact + path: angular-auth-oidc-client-artefact + + - name: Install AngularCLI globally + run: sudo npm install -g @angular/cli@16 + + - name: Show ng Version + run: ng version + + - name: Create Angular Project + run: sudo ng new angular-auth-oidc-client-test --skip-git + + - name: Npm Install & Install Library from local artefact + run: | + sudo cp -R angular-auth-oidc-client-artefact angular-auth-oidc-client-test/ + cd angular-auth-oidc-client-test + sudo npm install --unsafe-perm=true + sudo ng add ./angular-auth-oidc-client-artefact --authority-url-or-tenant-id "my-authority-url" --flow-type "OIDC Code Flow PKCE using refresh tokens" --use-local-package=true --skip-confirmation + + - name: Test Angular Application + working-directory: ./angular-auth-oidc-client-test + run: npm test -- --watch=false --browsers=ChromeHeadless + + - name: Build Angular Application + working-directory: ./angular-auth-oidc-client-test + run: sudo npm run build diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..ca942a2 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,61 @@ +name: Docs + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Docs Job + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 18 + + - name: Installing Dependencies + run: sudo npm install + + - name: Installing Dependencies for docs - in docs folder + run: sudo npm install + working-directory: docs/site/angular-auth-oidc-client + + - name: Building Documentation + run: sudo npm run build + working-directory: docs/site/angular-auth-oidc-client + + - name: Build And Deploy + if: ${{ github.actor == 'damienbod' || github.actor == 'FabianGosebrink' }} + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: 'upload' + ###### Repository/Build Configurations - These values can be configured to match you app requirements. ###### + app_location: '/docs/site/angular-auth-oidc-client' # App source code path + app_artifact_location: 'build' # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + action: 'close' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20529ac --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.angular/cache +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +/.angulardoc.json +debug.log + +/.husky +/.nx diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8a28fa4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,35 @@ +{ + "npm.packageManager": "pnpm", + "rust-analyzer.showUnlinkedFileNotification": false, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true + }, + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports.biome": "explicit" + }, + "emmet.showExpandedAbbreviation": "never", + "prettier.enable": false, + "tailwindCSS.experimental.configFile": "./packages/tailwind-config/config.ts", + "typescript.tsdk": "node_modules/typescript/lib", + "rust-analyzer.cargo.features": [ + "testcontainers" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..bcf2edd --- /dev/null +++ b/README.md @@ -0,0 +1,207 @@ +# Angular Lib for OpenID Connect & OAuth2 + +![Build Status](https://github.com/damienbod/angular-auth-oidc-client/actions/workflows/build.yml/badge.svg?branch=main) [![npm](https://img.shields.io/npm/v/angular-auth-oidc-client.svg)](https://www.npmjs.com/package/angular-auth-oidc-client) [![npm](https://img.shields.io/npm/dm/angular-auth-oidc-client.svg)](https://www.npmjs.com/package/angular-auth-oidc-client) [![npm](https://img.shields.io/npm/l/angular-auth-oidc-client.svg)](https://www.npmjs.com/package/angular-auth-oidc-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Coverage Status](https://coveralls.io/repos/github/damienbod/angular-auth-oidc-client/badge.svg?branch=main)](https://coveralls.io/github/damienbod/angular-auth-oidc-client?branch=main) + +

    + +

    + +Secure your Angular app using the latest standards for OpenID Connect & OAuth2. Provides support for token refresh, all modern OIDC Identity Providers and more. + +## Acknowledgements + +This library is certified by OpenID Foundation. (RP Implicit and Config RP) + +

    + +

    + +## Features + +- [Code samples](https://angular-auth-oidc-client.com/docs/samples/) for most of the common use cases +- Supports schematics via `ng add` support +- Supports all modern OIDC identity providers +- Supports OpenID Connect Code Flow with PKCE +- Supports Code Flow PKCE with Refresh tokens +- [Supports OpenID Connect Implicit Flow](http://openid.net/specs/openid-connect-implicit-1_0.html) +- [Supports OpenID Connect Session Management 1.0](http://openid.net/specs/openid-connect-session-1_0.html) +- [Supports RFC7009 - OAuth 2.0 Token Revocation](https://tools.ietf.org/html/rfc7009) +- [Supports RFC7636 - Proof Key for Code Exchange (PKCE)](https://tools.ietf.org/html/rfc7636) +- [Supports OAuth 2.0 Pushed authorisation requests (PAR) draft](https://tools.ietf.org/html/draft-ietf-oauth-par-06) +- Semantic releases +- Github actions +- Modern coding guidelines with prettier, husky +- Up to date documentation +- Implements OIDC validation as specified, complete client side validation for REQUIRED features +- Supports authentication using redirect or popup + +## Installation + +### Ng Add + +You can use the schematics and `ng add` the library. + +```shell +ng add angular-auth-oidc-client +``` + +And answer the questions. A module will be created which encapsulates your configuration. + +![angular-auth-oidc-client schematics](https://raw.githubusercontent.com/damienbod/angular-auth-oidc-client/main/.github/angular-auth-oidc-client-schematics-720.gif) + +### Npm / Yarn + +Navigate to the level of your `package.json` and type + +```shell + npm install angular-auth-oidc-client +``` + +or with yarn + +```shell + yarn add angular-auth-oidc-client +``` + +## Documentation + +[Read the docs here](https://angular-auth-oidc-client.com/) + +## Samples + +[Explore the Samples here](https://angular-auth-oidc-client.com/docs/samples/) + +## Quickstart + +For the example of the Code Flow. For further examples please check the [Samples](https://angular-auth-oidc-client.com/docs/samples/) Section. + +> If you have done the installation with the schematics, these modules and files should be available already! + +### Configuration + +Import the `AuthModule` in your module. + +```ts +import { NgModule } from '@angular/core'; +import { AuthModule, LogLevel } from 'angular-auth-oidc-client'; +// ... + +@NgModule({ + // ... + imports: [ + // ... + AuthModule.forRoot({ + config: { + authority: '', + redirectUrl: window.location.origin, + postLogoutRedirectUri: window.location.origin, + clientId: '', + scope: 'openid profile email offline_access', + responseType: 'code', + silentRenew: true, + useRefreshToken: true, + logLevel: LogLevel.Debug, + }, + }), + ], + // ... +}) +export class AppModule {} +``` + +And call the method `checkAuth()` from your `app.component.ts`. The method `checkAuth()` is needed to process the redirect from your Security Token Service and set the correct states. This method must be used to ensure the correct functioning of the library. + +```ts +import { Component, OnInit, inject } from '@angular/core'; +import { OidcSecurityService } from 'angular-auth-oidc-client'; + +@Component({ + /*...*/ +}) +export class AppComponent implements OnInit { + private readonly oidcSecurityService = inject(OidcSecurityService); + + ngOnInit() { + this.oidcSecurityService + .checkAuth() + .subscribe((loginResponse: LoginResponse) => { + const { isAuthenticated, userData, accessToken, idToken, configId } = + loginResponse; + + /*...*/ + }); + } + + login() { + this.oidcSecurityService.authorize(); + } + + logout() { + this.oidcSecurityService + .logoff() + .subscribe((result) => console.log(result)); + } +} +``` + +### Using the access token + +You can get the access token by calling the method `getAccessToken()` on the `OidcSecurityService` + +```ts +const token = this.oidcSecurityService.getAccessToken().subscribe(...); +``` + +And then you can use it in the HttpHeaders + +```ts +import { HttpHeaders } from '@angular/common/http'; + +const token = this.oidcSecurityServices.getAccessToken().subscribe((token) => { + const httpOptions = { + headers: new HttpHeaders({ + Authorization: 'Bearer ' + token, + }), + }; +}); +``` + +You can use the built in interceptor to add the accesstokens to your request + +```ts +AuthModule.forRoot({ + config: { + // ... + secureRoutes: ['https://my-secure-url.com/', 'https://my-second-secure-url.com/'], + }, +}), +``` + +```ts + providers: [ + { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, + ], +``` + +## Versions + +Current Version is Version 19.x + +- [Info about Version 18](https://github.com/damienbod/angular-auth-oidc-client/tree/version-18) +- [Info about Version 17](https://github.com/damienbod/angular-auth-oidc-client/tree/version-17) +- [Info about Version 16](https://github.com/damienbod/angular-auth-oidc-client/tree/version-16) +- [Info about Version 15](https://github.com/damienbod/angular-auth-oidc-client/tree/version-15) +- [Info about Version 14](https://github.com/damienbod/angular-auth-oidc-client/tree/version-14) +- [Info about Version 13](https://github.com/damienbod/angular-auth-oidc-client/tree/version-13) +- [Info about Version 12](https://github.com/damienbod/angular-auth-oidc-client/tree/version-12) +- [Info about Version 11](https://github.com/damienbod/angular-auth-oidc-client/tree/version-11) +- [Info about Version 10](https://github.com/damienbod/angular-auth-oidc-client/tree/version-10) + +## License + +[MIT](https://choosealicense.com/licenses/mit/) + +## Authors + +- [@DamienBod](https://www.github.com/damienbod) +- [@FabianGosebrink](https://www.github.com/FabianGosebrink) diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..170a920 --- /dev/null +++ b/biome.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "extends": ["ultracite"], + "linter": { + "rules": { + "style": { + "noNonNullAssertion": "off" + }, + "suspicious": { + "noExplicitAny": "off" + }, + "correctness": { + "noUnusedImports": { + "fix": "none", + "level": "warn" + } + } + } + }, + "files": { + "ignore": [ + ".vscode/*.json" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..05f83e2 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,50 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma'), + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false, // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true, // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join( + __dirname, + '../../coverage/angular-auth-oidc-client' + ), + subdir: '.', + reporters: [{ type: 'html' }, { type: 'text-summary' }, { type: 'lcov' }], + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + customLaunchers: { + ChromeHeadlessNoSandbox: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'], + }, + }, + singleRun: false, + restartOnFileChange: true, + }); +}; diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..cfcc968 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,41 @@ +# EXAMPLE USAGE +# Refer for explanation to following link: +# https://github.com/evilmartians/lefthook/blob/master/docs/full_guide.md +# +pre-push: + commands: + fix-prettier: + tags: frontend security + glob: '*.{js,ts}' + run: npm run fix-prettier {staged_files} + +pre-commit: + parallel: true + commands: + check-blockwords: + run: npm run check-blockwords + + lint: + run: npm run lint-lib +# +# pre-commit: +# parallel: true +# commands: +# eslint: +# glob: "*.{js,ts}" +# run: yarn eslint {staged_files} +# rubocop: +# tags: backend style +# glob: "*.rb" +# exclude: "application.rb|routes.rb" +# run: bundle exec rubocop --force-exclusion {all_files} +# govet: +# tags: backend style +# files: git ls-files -m +# glob: "*.go" +# run: go vet {files} +# scripts: +# "hello.js": +# runner: node +# "any.go": +# runner: go run diff --git a/license-banner.txt b/license-banner.txt new file mode 100644 index 0000000..62a24bb --- /dev/null +++ b/license-banner.txt @@ -0,0 +1,4 @@ +/** + * @license oidc-client-rx + * MIT license + */ diff --git a/package.json b/package.json new file mode 100644 index 0000000..fc2240c --- /dev/null +++ b/package.json @@ -0,0 +1,83 @@ +{ + "name": "oidc-client-rx", + "homepage": "https://github.com/lonelyhentxi/oidc-client-rx", + "author": "lonelyhentxi", + "description": "ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications", + "repository": { + "type": "git", + "url": "https://github.com/lonelyhentxi/oidc-client-rx.git" + }, + "bugs": { + "url": "https://github.com/lonelyhentxi/oidc-client-rx/issues" + }, + "version": "0.1.0", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch", + "test-lib": "ng test angular-auth-oidc-client --code-coverage", + "test-lib-ci": "ng test angular-auth-oidc-client --watch=false --browsers=ChromeHeadlessNoSandbox --code-coverage", + "lint-lib": "ng lint angular-auth-oidc-client", + "pack-lib": "npm run build-lib-prod && npm pack ./dist/angular-auth-oidc-client", + "publish-lib": "npm run build-lib-prod && npm publish ./dist/angular-auth-oidc-client", + "publish-lib-next": "npm run build-lib && npm publish --tag next ./dist/angular-auth-oidc-client", + "coveralls": "cat ./coverage/lcov.info | coveralls", + "lint": "ultracite lint", + "format": "ultracite format" + }, + "dependencies": { + "@ngify/http": "^2.0.4", + "injection-js": "git+https://github.com/mgechev/injection-js.git#81a10e0", + "rxjs": ">=7.4.0", + "shelljs": "^0.8.5", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@evilmartians/lefthook": "^1.0.3", + "@rslib/core": "^0.3.1", + "@types/jasmine": "^4.0.0", + "@types/node": "^22.10.1", + "copyfiles": "^2.4.1", + "coveralls": "^3.1.0", + "fs-extra": "^10.0.0", + "jasmine-core": "^4.0.0", + "jasmine-spec-reporter": "~7.0.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "^2.0.0", + "rfc4648": "^1.5.0", + "typescript": "^5.7.3" + }, + "keywords": [ + "rxjs", + "oidc", + "oauth2", + "openid", + "security", + "typescript", + "openidconnect", + "auth", + "authn", + "authentication", + "identity", + "certified", + "oauth", + "authorization", + "reactivex" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..3b9bf9a --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2614 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ngify/http': + specifier: ^2.0.4 + version: 2.0.4(rxjs@7.8.1) + injection-js: + specifier: git+https://github.com/mgechev/injection-js.git#81a10e0 + version: https://codeload.github.com/mgechev/injection-js/tar.gz/81a10e0 + rxjs: + specifier: '>=7.4.0' + version: 7.8.1 + shelljs: + specifier: ^0.8.5 + version: 0.8.5 + tslib: + specifier: ^2.3.0 + version: 2.8.1 + devDependencies: + '@evilmartians/lefthook': + specifier: ^1.0.3 + version: 1.10.7 + '@rslib/core': + specifier: ^0.3.1 + version: 0.3.1(typescript@5.7.3) + '@types/jasmine': + specifier: ^4.0.0 + version: 4.6.4 + '@types/node': + specifier: ^22.10.1 + version: 22.10.7 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + coveralls: + specifier: ^3.1.0 + version: 3.1.1 + fs-extra: + specifier: ^10.0.0 + version: 10.1.0 + jasmine-core: + specifier: ^4.0.0 + version: 4.6.1 + jasmine-spec-reporter: + specifier: ~7.0.0 + version: 7.0.0 + karma: + specifier: ~6.4.2 + version: 6.4.4 + karma-chrome-launcher: + specifier: ~3.2.0 + version: 3.2.0 + karma-coverage: + specifier: ~2.2.0 + version: 2.2.1 + karma-jasmine: + specifier: ~5.1.0 + version: 5.1.0(karma@6.4.4) + karma-jasmine-html-reporter: + specifier: ^2.0.0 + version: 2.1.0(jasmine-core@4.6.1)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) + rfc4648: + specifier: ^1.5.0 + version: 1.5.4 + typescript: + specifier: ^5.7.3 + version: 5.7.3 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.5': + resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.5': + resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.5': + resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} + engines: {node: '>=6.9.0'} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@evilmartians/lefthook@1.10.7': + resolution: {integrity: sha512-QQLKnBaaOFjl/sdu018AhqCoFI0bQSHRdC/kpCU4sANASwai/QBUzpzorR+xsi0++14/q7Nax04N60YF08fX4w==} + os: [darwin, linux, win32] + hasBin: true + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@module-federation/error-codes@0.8.4': + resolution: {integrity: sha512-55LYmrDdKb4jt+qr8qE8U3al62ZANp3FhfVaNPOaAmdTh0jHdD8M3yf5HKFlr5xVkVO4eV/F/J2NCfpbh+pEXQ==} + + '@module-federation/runtime-tools@0.8.4': + resolution: {integrity: sha512-fjVOsItJ1u5YY6E9FnS56UDwZgqEQUrWFnouRiPtK123LUuqUI9FH4redZoKWlE1PB0ir1Z3tnqy8eFYzPO38Q==} + + '@module-federation/runtime@0.8.4': + resolution: {integrity: sha512-yZeZ7z2Rx4gv/0E97oLTF3V6N25vglmwXGgoeju/W2YjsFvWzVtCDI7zRRb0mJhU6+jmSM8jP1DeQGbea/AiZQ==} + + '@module-federation/sdk@0.8.4': + resolution: {integrity: sha512-waABomIjg/5m1rPDBWYG4KUhS5r7OUUY7S+avpaVIY/tkPWB3ibRDKy2dNLLAMaLKq0u+B1qIdEp4NIWkqhqpg==} + + '@module-federation/webpack-bundler-runtime@0.8.4': + resolution: {integrity: sha512-HggROJhvHPUX7uqBD/XlajGygMNM1DG0+4OAkk8MBQe4a18QzrRNzZt6XQbRTSG4OaEoyRWhQHvYD3Yps405tQ==} + + '@ngify/core@2.0.4': + resolution: {integrity: sha512-MyZ6TrD4NEEEpy5yBoAtCyAXySpLvi6kBrvJk1vl9s4dkU5H+/bKBeAy5gPvdbLQ6c6NHD3Y4cnnMBbhdtVOnA==} + + '@ngify/http@2.0.4': + resolution: {integrity: sha512-3w3mMadsrkO0/xgLC5+79qqOJcRc+XvcBoOMZZBPFdiWg7wHWHULv48KHFVau+GbzvnXEza46W/xYyOMyR0F8g==} + peerDependencies: + rxjs: ^7.0.0 + + '@rsbuild/core@1.2.0-beta.0': + resolution: {integrity: sha512-gS1vTTbnYYjIpraEjRPhFMf1iH2rFrnV3cc3H6ZgAFQsksZzgYJyZBvAuigKPUW4SIl1mgnmMGWhLwZHgyZzOg==} + engines: {node: '>=16.7.0'} + hasBin: true + + '@rslib/core@0.3.1': + resolution: {integrity: sha512-CWGCoEEUC2/29MKcdtW6/QbjGR+7tEHZc9/w7pGG8fZAKtPAZx/lYNi/N63e/Q/MVWeU4GYRpG89EROFRantPQ==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + + '@rspack/binding-darwin-arm64@1.2.0-beta.0': + resolution: {integrity: sha512-g8NgY4OIjZf5LabAKOHNr2rs/WzVaxXpOSVsdHztQL6ETdeEpIPUul4p/5zivFNcrvJxVVeHzKJHyB5lqxDcTA==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.2.0-beta.0': + resolution: {integrity: sha512-+BH/1UpG96exJc6KhDOiSHAb05bUwxbYCd37HAJwcLxQgB7IEmPtBYvV5CtHysteM5NBtbNeeAcyXK+dIYvUew==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.2.0-beta.0': + resolution: {integrity: sha512-LdIBNy5WAXJ1J9nB3bEyvqz7mJrMN/7cCtPHMmFBR1aTFbh1NAjYZl24fc+f59aSV5jAU9wfTrOtqtSwnXg4tQ==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.2.0-beta.0': + resolution: {integrity: sha512-4tRi87UyEWV25X6Ul68kJJ/de/cwmASmrIUrCYmdWEdtWMN46UOz0OvxCYvcHTf0DCP8M1CZf0cSiRuG/hsxGA==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.2.0-beta.0': + resolution: {integrity: sha512-rWWrPwUH3V4yG46acZDIlqr7H/yCxbu+WdPhdIRBvgT7bisQkZa2HYx6MXmUXxx94U2iFy5bh+un0ho5FZOeCg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.2.0-beta.0': + resolution: {integrity: sha512-9pgL17Bk8aSrTBx6VfQbb313RInDjlY9DfgV5ybbSsWaFs/oAs4oPy+kepWWixfb9Y2q/74bSBPrBNTBYQpknw==} + cpu: [x64] + os: [linux] + + '@rspack/binding-win32-arm64-msvc@1.2.0-beta.0': + resolution: {integrity: sha512-JQ06Q3uTclIk4AvKUqx0Royx2PqVcUuumEUFVWERbd01fntkQqI3RFrPazBYAIvk5JmXk40+CKA1CsFef4RKOA==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.2.0-beta.0': + resolution: {integrity: sha512-rNz/sXjXLAqCZkDuTumqm9Aa47Hiu45+vkJ0XvbirJ0A+dzuyGjdtlinwLyZtCY+dVAlS+AcX5znJLlpTSnjjA==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.2.0-beta.0': + resolution: {integrity: sha512-LKFcgaeEo7G6YLE5aKIbeWzXUpVZc02u0q4as0TjTTRBHd8r21GeaGJVh1Xm9YBkHpIX8Ho1DMftYVd+F6gHzw==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.2.0-beta.0': + resolution: {integrity: sha512-ZUBWVKCVC3uunZhjH7FAVLP83r/6QvPmYViA6n0JF3ycBmcJLkHJb26v42j6d5EfYfTtNvfRUlzHckIkFDQeDQ==} + + '@rspack/core@1.2.0-beta.0': + resolution: {integrity: sha512-0o0EYNeCwbRrh1l+P6HEKGS3Y+SVE/+J6SqDGGBsOixt/YzFeYNeaePWUnFfQ8a27jp9s//Ix6iuxMYGjWmitA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/lite-tapable@1.0.1': + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} + engines: {node: '>=16.0.0'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + + '@types/jasmine@4.6.4': + resolution: {integrity: sha512-qCw5sVW+ylTnrEhe5kfX4l6MgU9REXIVDa/lWEcvTOUmd+LqDYwyjovDq+Zk9blElaEHOj1URDQ/djEBVRf+pw==} + + '@types/node@22.10.7': + resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + caniuse-lite@1.0.30001692: + resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + copyfiles@2.4.1: + resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} + hasBin: true + + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + coveralls@3.1.1: + resolution: {integrity: sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==} + engines: {node: '>=6'} + hasBin: true + + custom-event@1.0.1: + resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + di@0.0.1: + resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} + + dom-serialize@2.2.1: + resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.83: + resolution: {integrity: sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.2: + resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} + engines: {node: '>=10.2.0'} + + ent@2.2.2: + resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + injection-js@https://codeload.github.com/mgechev/injection-js/tar.gz/81a10e0: + resolution: {tarball: https://codeload.github.com/mgechev/injection-js/tar.gz/81a10e0} + version: 2.4.0 + engines: {node: '>=8.5'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-rslog@0.0.6: + resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} + engines: {node: '>=14.17.6'} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jasmine-core@4.6.1: + resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} + + jasmine-spec-reporter@7.0.0: + resolution: {integrity: sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + karma-chrome-launcher@3.2.0: + resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} + + karma-coverage@2.2.1: + resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==} + engines: {node: '>=10.0.0'} + + karma-jasmine-html-reporter@2.1.0: + resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==} + peerDependencies: + jasmine-core: ^4.0.0 || ^5.0.0 + karma: ^6.0.0 + karma-jasmine: ^5.0.0 + + karma-jasmine@5.1.0: + resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} + engines: {node: '>=12'} + peerDependencies: + karma: ^6.0.0 + + karma@6.4.4: + resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==} + engines: {node: '>= 10'} + hasBin: true + + lcov-parse@1.0.0: + resolution: {integrity: sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==} + hasBin: true + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-driver@1.2.7: + resolution: {integrity: sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==} + engines: {node: '>=0.8.6'} + + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + noms@0.0.0: + resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qjobs@1.2.0: + resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} + engines: {node: '>=0.9'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + rfc4648@1.5.4: + resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rsbuild-plugin-dts@0.3.1: + resolution: {integrity: sha512-oeD8ztSn0LBSNhUbIkYIxJKRMjd1Td2Dfhc1RefP0eouxkpnbQ+Dln3V5AVUGfDGK+BlubqEAF1gk3xAzLWA9w==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + engines: {node: '>=10.2.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@0.7.40: + resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + void-elements@2.0.1: + resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} + engines: {node: '>=0.10.0'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + + '@babel/parser@7.26.5': + dependencies: + '@babel/types': 7.26.5 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@babel/traverse@7.26.5': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.5': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@colors/colors@1.5.0': {} + + '@evilmartians/lefthook@1.10.7': {} + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@module-federation/error-codes@0.8.4': {} + + '@module-federation/runtime-tools@0.8.4': + dependencies: + '@module-federation/runtime': 0.8.4 + '@module-federation/webpack-bundler-runtime': 0.8.4 + + '@module-federation/runtime@0.8.4': + dependencies: + '@module-federation/error-codes': 0.8.4 + '@module-federation/sdk': 0.8.4 + + '@module-federation/sdk@0.8.4': + dependencies: + isomorphic-rslog: 0.0.6 + + '@module-federation/webpack-bundler-runtime@0.8.4': + dependencies: + '@module-federation/runtime': 0.8.4 + '@module-federation/sdk': 0.8.4 + + '@ngify/core@2.0.4': + dependencies: + tslib: 2.8.1 + + '@ngify/http@2.0.4(rxjs@7.8.1)': + dependencies: + '@ngify/core': 2.0.4 + rxjs: 7.8.1 + tslib: 2.8.1 + + '@rsbuild/core@1.2.0-beta.0': + dependencies: + '@rspack/core': 1.2.0-beta.0(@swc/helpers@0.5.15) + '@rspack/lite-tapable': 1.0.1 + '@swc/helpers': 0.5.15 + core-js: 3.39.0 + + '@rslib/core@0.3.1(typescript@5.7.3)': + dependencies: + '@rsbuild/core': 1.2.0-beta.0 + rsbuild-plugin-dts: 0.3.1(@rsbuild/core@1.2.0-beta.0)(typescript@5.7.3) + tinyglobby: 0.2.10 + optionalDependencies: + typescript: 5.7.3 + + '@rspack/binding-darwin-arm64@1.2.0-beta.0': + optional: true + + '@rspack/binding-darwin-x64@1.2.0-beta.0': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.2.0-beta.0': + optional: true + + '@rspack/binding-linux-arm64-musl@1.2.0-beta.0': + optional: true + + '@rspack/binding-linux-x64-gnu@1.2.0-beta.0': + optional: true + + '@rspack/binding-linux-x64-musl@1.2.0-beta.0': + optional: true + + '@rspack/binding-win32-arm64-msvc@1.2.0-beta.0': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.2.0-beta.0': + optional: true + + '@rspack/binding-win32-x64-msvc@1.2.0-beta.0': + optional: true + + '@rspack/binding@1.2.0-beta.0': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.2.0-beta.0 + '@rspack/binding-darwin-x64': 1.2.0-beta.0 + '@rspack/binding-linux-arm64-gnu': 1.2.0-beta.0 + '@rspack/binding-linux-arm64-musl': 1.2.0-beta.0 + '@rspack/binding-linux-x64-gnu': 1.2.0-beta.0 + '@rspack/binding-linux-x64-musl': 1.2.0-beta.0 + '@rspack/binding-win32-arm64-msvc': 1.2.0-beta.0 + '@rspack/binding-win32-ia32-msvc': 1.2.0-beta.0 + '@rspack/binding-win32-x64-msvc': 1.2.0-beta.0 + + '@rspack/core@1.2.0-beta.0(@swc/helpers@0.5.15)': + dependencies: + '@module-federation/runtime-tools': 0.8.4 + '@rspack/binding': 1.2.0-beta.0 + '@rspack/lite-tapable': 1.0.1 + caniuse-lite: 1.0.30001692 + optionalDependencies: + '@swc/helpers': 0.5.15 + + '@rspack/lite-tapable@1.0.1': {} + + '@socket.io/component-emitter@3.1.2': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@types/cookie@0.4.1': {} + + '@types/cors@2.8.17': + dependencies: + '@types/node': 22.10.7 + + '@types/jasmine@4.6.4': {} + + '@types/node@22.10.7': + dependencies: + undici-types: 6.20.0 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + + asynckit@0.4.0: {} + + aws-sign2@0.7.0: {} + + aws4@1.13.2: {} + + balanced-match@1.0.2: {} + + base64id@2.0.0: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + binary-extensions@2.3.0: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001692 + electron-to-chromium: 1.5.83 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + caniuse-lite@1.0.30001692: {} + + caseless@0.12.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colors@1.4.0: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + connect@3.7.0: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie@0.7.2: {} + + copyfiles@2.4.1: + dependencies: + glob: 7.2.3 + minimatch: 3.1.2 + mkdirp: 1.0.4 + noms: 0.0.0 + through2: 2.0.5 + untildify: 4.0.0 + yargs: 16.2.0 + + core-js@3.39.0: {} + + core-util-is@1.0.2: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + coveralls@3.1.1: + dependencies: + js-yaml: 3.14.1 + lcov-parse: 1.0.0 + log-driver: 1.2.7 + minimist: 1.2.8 + request: 2.88.2 + + custom-event@1.0.1: {} + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + date-format@4.0.14: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + di@0.0.1: {} + + dom-serialize@2.2.1: + dependencies: + custom-event: 1.0.1 + ent: 2.2.2 + extend: 3.0.2 + void-elements: 2.0.1 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.83: {} + + emoji-regex@8.0.0: {} + + encodeurl@1.0.2: {} + + engine.io-parser@5.2.3: {} + + engine.io@6.6.2: + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 22.10.7 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.5 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + ent@2.2.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + punycode: 1.4.1 + safe-regex-test: 1.1.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + esprima@4.0.1: {} + + eventemitter3@4.0.7: {} + + extend@3.0.2: {} + + extsprintf@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + flatted@3.3.2: {} + + follow-redirects@1.15.9: {} + + forever-agent@0.6.1: {} + + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + har-schema@2.0.0: {} + + har-validator@5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + html-escaper@2.0.2: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy@1.18.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-signature@1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + injection-js@https://codeload.github.com/mgechev/injection-js/tar.gz/81a10e0: + dependencies: + tslib: 2.8.1 + + interpret@1.4.0: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-typedarray@1.0.0: {} + + isarray@0.0.1: {} + + isarray@1.0.0: {} + + isbinaryfile@4.0.10: {} + + isexe@2.0.0: {} + + isomorphic-rslog@0.0.6: {} + + isstream@0.1.2: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jasmine-core@4.6.1: {} + + jasmine-spec-reporter@7.0.0: + dependencies: + colors: 1.4.0 + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + jsbn@0.1.1: {} + + jsesc@3.1.0: {} + + json-schema-traverse@0.4.1: {} + + json-schema@0.4.0: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsprim@1.4.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + karma-chrome-launcher@3.2.0: + dependencies: + which: 1.3.1 + + karma-coverage@2.2.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + karma-jasmine-html-reporter@2.1.0(jasmine-core@4.6.1)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4): + dependencies: + jasmine-core: 4.6.1 + karma: 6.4.4 + karma-jasmine: 5.1.0(karma@6.4.4) + + karma-jasmine@5.1.0(karma@6.4.4): + dependencies: + jasmine-core: 4.6.1 + karma: 6.4.4 + + karma@6.4.4: + dependencies: + '@colors/colors': 1.5.0 + body-parser: 1.20.3 + braces: 3.0.3 + chokidar: 3.6.0 + connect: 3.7.0 + di: 0.0.1 + dom-serialize: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + http-proxy: 1.18.1 + isbinaryfile: 4.0.10 + lodash: 4.17.21 + log4js: 6.9.1 + mime: 2.6.0 + minimatch: 3.1.2 + mkdirp: 0.5.6 + qjobs: 1.2.0 + range-parser: 1.2.1 + rimraf: 3.0.2 + socket.io: 4.8.1 + source-map: 0.6.1 + tmp: 0.2.3 + ua-parser-js: 0.7.40 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + lcov-parse@1.0.0: {} + + lodash@4.17.21: {} + + log-driver@1.2.7: {} + + log4js@6.9.1: + dependencies: + date-format: 4.0.14 + debug: 4.4.0 + flatted: 3.3.2 + rfdc: 1.4.1 + streamroller: 3.1.5 + transitivePeerDependencies: + - supports-color + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@2.6.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + negotiator@0.6.3: {} + + node-releases@2.0.19: {} + + noms@0.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 1.0.34 + + normalize-path@3.0.0: {} + + oauth-sign@0.9.0: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.3: {} + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + parseurl@1.3.3: {} + + path-is-absolute@1.0.1: {} + + path-parse@1.0.7: {} + + performance-now@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + process-nextick-args@2.0.1: {} + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + punycode@1.4.1: {} + + punycode@2.3.1: {} + + qjobs@1.2.0: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + qs@6.5.3: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + request@2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.13.2 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + + require-directory@2.1.1: {} + + requires-port@1.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rfc4648@1.5.4: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rsbuild-plugin-dts@0.3.1(@rsbuild/core@1.2.0-beta.0)(typescript@5.7.3): + dependencies: + '@rsbuild/core': 1.2.0-beta.0 + magic-string: 0.30.17 + picocolors: 1.1.1 + tinyglobby: 0.2.10 + optionalDependencies: + typescript: 5.7.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + setprototypeof@1.2.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + socket.io-adapter@2.5.5: + dependencies: + debug: 4.3.7 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + socket.io@4.8.1: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.6.2 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + streamroller@3.1.5: + dependencies: + date-format: 4.0.14 + debug: 4.4.0 + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@0.10.31: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tough-cookie@2.5.0: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + tweetnacl@0.14.5: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typescript@5.7.3: {} + + ua-parser-js@0.7.40: {} + + undici-types@6.20.0: {} + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + untildify@4.0.0: {} + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@3.4.0: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + void-elements@2.0.1: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.17.1: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@20.2.9: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 diff --git a/rslib.config.ts b/rslib.config.ts new file mode 100644 index 0000000..21b55eb --- /dev/null +++ b/rslib.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + source: { + tsconfigPath: './tsconfig.lib.json' + }, + lib: [ + { + format: 'esm', + syntax: 'es2021', + dts: true, + }, + { + format: 'cjs', + syntax: 'es2021', + }, + ], + output: { + target: 'web', + }, +}); diff --git a/src/api/data.service.spec.ts b/src/api/data.service.spec.ts new file mode 100644 index 0000000..ba33128 --- /dev/null +++ b/src/api/data.service.spec.ts @@ -0,0 +1,192 @@ +import { + HttpHeaders, + provideHttpClient, + withInterceptorsFromDi, +} from '@angular/common/http'; +import { + HttpTestingController, + provideHttpClientTesting, +} from '@angular/common/http/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { DataService } from './data.service'; +import { HttpBaseService } from './http-base.service'; + +describe('Data Service', () => { + let dataService: DataService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + DataService, + HttpBaseService, + provideHttpClient(withInterceptorsFromDi()), + provideHttpClientTesting(), + ], + }); + }); + + beforeEach(() => { + dataService = TestBed.inject(DataService); + httpMock = TestBed.inject(HttpTestingController); + }); + + it('should create', () => { + expect(dataService).toBeTruthy(); + }); + + describe('get', () => { + it('get call sets the accept header', waitForAsync(() => { + const url = 'testurl'; + + dataService + .get(url, { configId: 'configId1' }) + .subscribe((data: unknown) => { + expect(data).toBe('bodyData'); + }); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('GET'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('get call with token the accept header and the token', waitForAsync(() => { + const url = 'testurl'; + const token = 'token'; + + dataService + .get(url, { configId: 'configId1' }, token) + .subscribe((data: unknown) => { + expect(data).toBe('bodyData'); + }); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('GET'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + expect(req.request.headers.get('Authorization')).toBe('Bearer ' + token); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('call without ngsw-bypass param by default', waitForAsync(() => { + const url = 'testurl'; + + dataService + .get(url, { configId: 'configId1' }) + .subscribe((data: unknown) => { + expect(data).toBe('bodyData'); + }); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('GET'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + expect(req.request.params.get('ngsw-bypass')).toBeNull(); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('call with ngsw-bypass param', waitForAsync(() => { + const url = 'testurl'; + + dataService + .get(url, { configId: 'configId1', ngswBypass: true }) + .subscribe((data: unknown) => { + expect(data).toBe('bodyData'); + }); + const req = httpMock.expectOne(url + '?ngsw-bypass='); + + expect(req.request.method).toBe('GET'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + expect(req.request.params.get('ngsw-bypass')).toBe(''); + + req.flush('bodyData'); + + httpMock.verify(); + })); + }); + + describe('post', () => { + it('call sets the accept header when no other params given', waitForAsync(() => { + const url = 'testurl'; + + dataService + .post(url, { some: 'thing' }, { configId: 'configId1' }) + .subscribe(); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('POST'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('call sets custom headers ONLY (No ACCEPT header) when custom headers are given', waitForAsync(() => { + const url = 'testurl'; + let headers = new HttpHeaders(); + + headers = headers.set('X-MyHeader', 'Genesis'); + + dataService + .post(url, { some: 'thing' }, { configId: 'configId1' }, headers) + .subscribe(); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('POST'); + expect(req.request.headers.get('X-MyHeader')).toEqual('Genesis'); + expect(req.request.headers.get('X-MyHeader')).not.toEqual('Genesis333'); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('call without ngsw-bypass param by default', waitForAsync(() => { + const url = 'testurl'; + + dataService + .post(url, { some: 'thing' }, { configId: 'configId1' }) + .subscribe(); + const req = httpMock.expectOne(url); + + expect(req.request.method).toBe('POST'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + expect(req.request.params.get('ngsw-bypass')).toBeNull(); + + req.flush('bodyData'); + + httpMock.verify(); + })); + + it('call with ngsw-bypass param', waitForAsync(() => { + const url = 'testurl'; + + dataService + .post( + url, + { some: 'thing' }, + { configId: 'configId1', ngswBypass: true } + ) + .subscribe(); + const req = httpMock.expectOne(url + '?ngsw-bypass='); + + expect(req.request.method).toBe('POST'); + expect(req.request.headers.get('Accept')).toBe('application/json'); + expect(req.request.params.get('ngsw-bypass')).toBe(''); + + req.flush('bodyData'); + + httpMock.verify(); + })); + }); +}); diff --git a/src/api/data.service.ts b/src/api/data.service.ts new file mode 100644 index 0000000..2a034b6 --- /dev/null +++ b/src/api/data.service.ts @@ -0,0 +1,65 @@ +import { HttpHeaders, HttpParams } from '@ngify/http'; +import { Injectable, inject } from 'injection-js'; +import { Observable } from 'rxjs'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { HttpBaseService } from './http-base.service'; + +const NGSW_CUSTOM_PARAM = 'ngsw-bypass'; + +@Injectable() +export class DataService { + private readonly httpClient = inject(HttpBaseService); + + get( + url: string, + config: OpenIdConfiguration, + token?: string + ): Observable { + const headers = this.prepareHeaders(token); + const params = this.prepareParams(config); + + return this.httpClient.get(url, { + headers, + params, + }); + } + + post( + url: string | null, + body: unknown, + config: OpenIdConfiguration, + headersParams?: HttpHeaders + ): Observable { + const headers = headersParams || this.prepareHeaders(); + const params = this.prepareParams(config); + + return this.httpClient.post(url ?? '', body, { headers, params }); + } + + private prepareHeaders(token?: string): HttpHeaders { + let headers = new HttpHeaders(); + + headers = headers.set('Accept', 'application/json'); + + if (!!token) { + headers = headers.set( + 'Authorization', + 'Bearer ' + decodeURIComponent(token) + ); + } + + return headers; + } + + private prepareParams(config: OpenIdConfiguration): HttpParams { + let params = new HttpParams(); + + const { ngswBypass } = config; + + if (ngswBypass) { + params = params.set(NGSW_CUSTOM_PARAM, ''); + } + + return params; + } +} diff --git a/src/api/http-base.service.ts b/src/api/http-base.service.ts new file mode 100644 index 0000000..9673397 --- /dev/null +++ b/src/api/http-base.service.ts @@ -0,0 +1,22 @@ +import { HttpClient } from '@ngify/http'; +import { Injectable, inject } from 'injection-js'; +import { Observable } from 'rxjs'; + +@Injectable() +export class HttpBaseService { + constructor() {} + + private readonly http = inject(HttpClient); + + get(url: string, params?: { [key: string]: unknown }): Observable { + return this.http.get(url, params); + } + + post( + url: string, + body: unknown, + params?: { [key: string]: unknown } + ): Observable { + return this.http.post(url, body, params); + } +} diff --git a/src/auth-config.spec.ts b/src/auth-config.spec.ts new file mode 100644 index 0000000..c1e706d --- /dev/null +++ b/src/auth-config.spec.ts @@ -0,0 +1,17 @@ +import { PassedInitialConfig, createStaticLoader } from './auth-config'; + +describe('AuthConfig', () => { + describe('createStaticLoader', () => { + it('should throw an error if no config is provided', () => { + // Arrange + const passedConfig = {} as PassedInitialConfig; + + // Act + + // Assert + expect(() => createStaticLoader(passedConfig)).toThrowError( + 'No config provided!' + ); + }); + }); +}); diff --git a/src/auth-config.ts b/src/auth-config.ts new file mode 100644 index 0000000..9c785ec --- /dev/null +++ b/src/auth-config.ts @@ -0,0 +1,25 @@ +import { InjectionToken, Provider } from 'injection-js'; +import { + StsConfigLoader, + StsConfigStaticLoader, +} from './config/loader/config-loader'; +import { OpenIdConfiguration } from './config/openid-configuration'; + +export interface PassedInitialConfig { + config?: OpenIdConfiguration | OpenIdConfiguration[]; + loader?: Provider; +} + +export function createStaticLoader( + passedConfig: PassedInitialConfig +): StsConfigLoader { + if (!passedConfig?.config) { + throw new Error('No config provided!'); + } + + return new StsConfigStaticLoader(passedConfig.config); +} + +export const PASSED_CONFIG = new InjectionToken( + 'PASSED_CONFIG' +); diff --git a/src/auth-options.ts b/src/auth-options.ts new file mode 100644 index 0000000..436929b --- /dev/null +++ b/src/auth-options.ts @@ -0,0 +1,12 @@ +export interface AuthOptions { + customParams?: { [key: string]: string | number | boolean }; + urlHandler?(url: string): void; + /** overrides redirectUrl from configuration */ + redirectUrl?: string; +} + +export interface LogoutAuthOptions { + customParams?: { [key: string]: string | number | boolean }; + urlHandler?(url: string): void; + logoffMethod?: 'GET' | 'POST'; +} diff --git a/src/auth-state/auth-result.ts b/src/auth-state/auth-result.ts new file mode 100644 index 0000000..0d15085 --- /dev/null +++ b/src/auth-state/auth-result.ts @@ -0,0 +1,9 @@ +export interface AuthenticatedResult { + isAuthenticated: boolean; + allConfigsAuthenticated: ConfigAuthenticatedResult[]; +} + +export interface ConfigAuthenticatedResult { + configId: string; + isAuthenticated: boolean; +} diff --git a/src/auth-state/auth-state.service.spec.ts b/src/auth-state/auth-state.service.spec.ts new file mode 100644 index 0000000..7f1f239 --- /dev/null +++ b/src/auth-state/auth-state.service.spec.ts @@ -0,0 +1,638 @@ +import { TestBed } from '@angular/core/testing'; +import { Observable } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { PlatformProvider } from '../utils/platform-provider/platform.provider'; +import { TokenValidationService } from '../validation/token-validation.service'; +import { ValidationResult } from '../validation/validation-result'; +import { AuthStateService } from './auth-state.service'; + +describe('Auth State Service', () => { + let authStateService: AuthStateService; + let storagePersistenceService: StoragePersistenceService; + let eventsService: PublicEventsService; + let tokenValidationService: TokenValidationService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + AuthStateService, + PublicEventsService, + mockProvider(LoggerService), + mockProvider(TokenValidationService), + mockProvider(PlatformProvider), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + authStateService = TestBed.inject(AuthStateService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + eventsService = TestBed.inject(PublicEventsService); + tokenValidationService = TestBed.inject(TokenValidationService); + }); + + it('should create', () => { + expect(authStateService).toBeTruthy(); + }); + + it('public authorize$ is observable$', () => { + expect(authStateService.authenticated$).toEqual(jasmine.any(Observable)); + }); + + describe('setAuthorizedAndFireEvent', () => { + it('throws correct event with single config', () => { + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setAuthenticatedAndFireEvent([ + { configId: 'configId1' }, + ]); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: true, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: true }, + ], + }); + }); + + it('throws correct event with multiple configs', () => { + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setAuthenticatedAndFireEvent([ + { configId: 'configId1' }, + { configId: 'configId2' }, + ]); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: false }, + { configId: 'configId2', isAuthenticated: false }, + ], + }); + }); + + it('throws correct event with multiple configs, one is authenticated', () => { + const allConfigs = [{ configId: 'configId1' }, { configId: 'configId2' }]; + + spyOn(storagePersistenceService, 'getAccessToken') + .withArgs(allConfigs[0]) + .and.returnValue('someAccessToken') + .withArgs(allConfigs[1]) + .and.returnValue(''); + + spyOn(storagePersistenceService, 'getIdToken') + .withArgs(allConfigs[0]) + .and.returnValue('someIdToken') + .withArgs(allConfigs[1]) + .and.returnValue(''); + + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setAuthenticatedAndFireEvent(allConfigs); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: true }, + { configId: 'configId2', isAuthenticated: false }, + ], + }); + }); + }); + + describe('setUnauthorizedAndFireEvent', () => { + it('persist AuthState In Storage', () => { + const spy = spyOn(storagePersistenceService, 'resetAuthStateInStorage'); + + authStateService.setUnauthenticatedAndFireEvent( + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + expect(spy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + + it('throws correct event with single config', () => { + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setUnauthenticatedAndFireEvent( + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: false }, + ], + }); + }); + + it('throws correct event with multiple configs', () => { + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setUnauthenticatedAndFireEvent( + { configId: 'configId1' }, + [{ configId: 'configId1' }, { configId: 'configId2' }] + ); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: false }, + { configId: 'configId2', isAuthenticated: false }, + ], + }); + }); + + it('throws correct event with multiple configs, one is authenticated', () => { + spyOn(storagePersistenceService, 'getAccessToken') + .withArgs({ configId: 'configId1' }) + .and.returnValue('someAccessToken') + .withArgs({ configId: 'configId2' }) + .and.returnValue(''); + + spyOn(storagePersistenceService, 'getIdToken') + .withArgs({ configId: 'configId1' }) + .and.returnValue('someIdToken') + .withArgs({ configId: 'configId2' }) + .and.returnValue(''); + + const spy = spyOn( + (authStateService as any).authenticatedInternal$, + 'next' + ); + + authStateService.setUnauthenticatedAndFireEvent( + { configId: 'configId1' }, + [{ configId: 'configId1' }, { configId: 'configId2' }] + ); + + expect(spy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: 'configId1', isAuthenticated: true }, + { configId: 'configId2', isAuthenticated: false }, + ], + }); + }); + }); + + describe('updateAndPublishAuthState', () => { + it('calls eventsService', () => { + spyOn(eventsService, 'fireEvent'); + + authStateService.updateAndPublishAuthState({ + isAuthenticated: false, + isRenewProcess: false, + validationResult: {} as ValidationResult, + }); + + expect(eventsService.fireEvent).toHaveBeenCalledOnceWith( + EventTypes.NewAuthenticationResult, + jasmine.any(Object) + ); + }); + }); + + describe('setAuthorizationData', () => { + it('stores accessToken', () => { + const spy = spyOn(storagePersistenceService, 'write'); + const authResult = { + id_token: 'idtoken', + access_token: 'accesstoken', + expires_in: 330, + token_type: 'Bearer', + refresh_token: '9UuSQKx_UaGJSEvfHW2NK6FxAPSVvK-oVyeOb1Sstz0', + scope: 'openid profile email taler_api offline_access', + state: '7bad349c97cd7391abb6dfc41ec8c8e8ee8yeprJL', + session_state: + 'gjNckdb8h4HS5us_3oz68oqsAhvNMOMpgsJNqrhy7kM.rBe66j0WPYpSx_c4vLM-5w', + }; + + authStateService.setAuthorizationData( + 'accesstoken', + authResult, + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + expect(spy).toHaveBeenCalledTimes(2); + expect(spy.calls.allArgs()).toEqual([ + ['authzData', 'accesstoken', { configId: 'configId1' }], + [ + 'access_token_expires_at', + jasmine.any(Number), + { configId: 'configId1' }, + ], + ]); + }); + + it('does not crash and store accessToken when authResult is null', () => { + const spy = spyOn(storagePersistenceService, 'write'); + const authResult = null; + + authStateService.setAuthorizationData( + 'accesstoken', + authResult, + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('calls setAuthenticatedAndFireEvent() method', () => { + const spy = spyOn(authStateService, 'setAuthenticatedAndFireEvent'); + const authResult = { + id_token: 'idtoken', + access_token: 'accesstoken', + expires_in: 330, + token_type: 'Bearer', + refresh_token: '9UuSQKx_UaGJSEvfHW2NK6FxAPSVvK-oVyeOb1Sstz0', + scope: 'openid profile email taler_api offline_access', + state: '7bad349c97cd7391abb6dfc41ec8c8e8ee8yeprJL', + session_state: + 'gjNckdb8h4HS5us_3oz68oqsAhvNMOMpgsJNqrhy7kM.rBe66j0WPYpSx_c4vLM-5w', + }; + + authStateService.setAuthorizationData( + 'not used', + authResult, + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + + expect(spy).toHaveBeenCalled(); + }); + }); + + describe('getAccessToken', () => { + it('isAuthorized is false returns null', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + const result = authStateService.getAccessToken({ configId: 'configId1' }); + + expect(result).toBe(''); + }); + + it('returns false if storagePersistenceService returns something falsy but authorized', () => { + spyOn(authStateService, 'isAuthenticated').and.returnValue(true); + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + const result = authStateService.getAccessToken({ configId: 'configId1' }); + + expect(result).toBe(''); + }); + + it('isAuthorized is true returns decodeURIComponent(token)', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + const result = authStateService.getAccessToken({ configId: 'configId1' }); + + expect(result).toBe(decodeURIComponent('HenloLegger')); + }); + }); + + describe('getAuthenticationResult', () => { + it('isAuthorized is false returns null', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + + spyOn(storagePersistenceService, 'getAuthenticationResult') + .withArgs({ configId: 'configId1' }) + .and.returnValue({}); + + const result = authStateService.getAuthenticationResult({ + configId: 'configId1', + }); + + expect(result).toBe(null); + }); + + it('returns false if storagePersistenceService returns something falsy but authorized', () => { + spyOn(authStateService, 'isAuthenticated').and.returnValue(true); + spyOn(storagePersistenceService, 'getAuthenticationResult') + .withArgs({ configId: 'configId1' }) + .and.returnValue({}); + + const result = authStateService.getAuthenticationResult({ + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('isAuthorized is true returns object', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + spyOn(storagePersistenceService, 'getAuthenticationResult') + .withArgs({ configId: 'configId1' }) + .and.returnValue({ scope: 'HenloFuriend' }); + + const result = authStateService.getAuthenticationResult({ + configId: 'configId1', + }); + + expect(result?.scope).toBe('HenloFuriend'); + }); + }); + + describe('getIdToken', () => { + it('isAuthorized is false returns null', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + const result = authStateService.getIdToken({ configId: 'configId1' }); + + expect(result).toBe(''); + }); + + it('isAuthorized is true returns decodeURIComponent(token)', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + const result = authStateService.getIdToken({ configId: 'configId1' }); + + expect(result).toBe(decodeURIComponent('HenloFuriend')); + }); + }); + + describe('getRefreshToken', () => { + it('isAuthorized is false returns null', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + const result = authStateService.getRefreshToken({ + configId: 'configId1', + }); + + expect(result).toBe(''); + }); + + it('isAuthorized is true returns decodeURIComponent(token)', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + 'HenloRefreshLegger' + ); + const result = authStateService.getRefreshToken({ + configId: 'configId1', + }); + + expect(result).toBe(decodeURIComponent('HenloRefreshLegger')); + }); + }); + + describe('areAuthStorageTokensValid', () => { + it('isAuthorized is false returns false', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue(''); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + const result = authStateService.areAuthStorageTokensValid({ + configId: 'configId1', + }); + + expect(result).toBeFalse(); + }); + + it('isAuthorized is true and id_token is expired returns true', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + + spyOn( + authStateService as any, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(true); + spyOn( + authStateService as any, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(false); + const result = authStateService.areAuthStorageTokensValid({ + configId: 'configId1', + }); + + expect(result).toBeFalse(); + }); + + it('isAuthorized is true and access_token is expired returns true', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + + spyOn( + authStateService as any, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(false); + spyOn( + authStateService as any, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(true); + const result = authStateService.areAuthStorageTokensValid({ + configId: 'configId1', + }); + + expect(result).toBeFalse(); + }); + + it('isAuthorized is true and id_token is not expired returns true', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + + spyOn( + authStateService as any, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(false); + spyOn( + authStateService as any, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(false); + const result = authStateService.areAuthStorageTokensValid({ + configId: 'configId1', + }); + + expect(result).toBeTrue(); + }); + + it('authState is AuthorizedState.Authorized and id_token is not expired fires event', () => { + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'HenloLegger' + ); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'HenloFuriend' + ); + + spyOn( + authStateService as any, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(false); + spyOn( + authStateService as any, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(false); + const result = authStateService.areAuthStorageTokensValid({ + configId: 'configId1', + }); + + expect(result).toBeTrue(); + }); + }); + + describe('hasIdTokenExpiredAndRenewCheckIsEnabled', () => { + it('tokenValidationService gets called with id token if id_token is set', () => { + const config = { + configId: 'configId1', + renewTimeBeforeTokenExpiresInSeconds: 30, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn(storagePersistenceService, 'getIdToken') + .withArgs(config) + .and.returnValue('idToken'); + const spy = spyOn( + tokenValidationService, + 'hasIdTokenExpired' + ).and.callFake((_a, _b) => true); + + authStateService.hasIdTokenExpiredAndRenewCheckIsEnabled(config); + + expect(spy).toHaveBeenCalledOnceWith('idToken', config, 30); + }); + + it('fires event if idToken is expired', () => { + spyOn(tokenValidationService, 'hasIdTokenExpired').and.callFake( + (_a, _b) => true + ); + + const spy = spyOn(eventsService, 'fireEvent'); + const config = { + configId: 'configId1', + renewTimeBeforeTokenExpiresInSeconds: 30, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authnResult', config) + .and.returnValue('idToken'); + + const result = + authStateService.hasIdTokenExpiredAndRenewCheckIsEnabled(config); + + expect(result).toBe(true); + expect(spy).toHaveBeenCalledOnceWith(EventTypes.IdTokenExpired, true); + }); + + it('does NOT fire event if idToken is NOT expired', () => { + spyOn(tokenValidationService, 'hasIdTokenExpired').and.callFake( + (_a, _b) => false + ); + + const spy = spyOn(eventsService, 'fireEvent'); + const config = { + configId: 'configId1', + renewTimeBeforeTokenExpiresInSeconds: 30, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authnResult', config) + .and.returnValue('idToken'); + const result = + authStateService.hasIdTokenExpiredAndRenewCheckIsEnabled(config); + + expect(result).toBe(false); + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('hasAccessTokenExpiredIfExpiryExists', () => { + it('negates the result of internal call of `validateAccessTokenNotExpired`', () => { + const validateAccessTokenNotExpiredResult = true; + const expectedResult = !validateAccessTokenNotExpiredResult; + const date = new Date(new Date().toUTCString()); + const config = { + configId: 'configId1', + renewTimeBeforeTokenExpiresInSeconds: 5, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('access_token_expires_at', config) + .and.returnValue(date); + const spy = spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(validateAccessTokenNotExpiredResult); + const result = + authStateService.hasAccessTokenExpiredIfExpiryExists(config); + + expect(spy).toHaveBeenCalledOnceWith(date, config, 5); + expect(result).toEqual(expectedResult); + }); + + it('throws event when token is expired', () => { + const validateAccessTokenNotExpiredResult = false; + const expectedResult = !validateAccessTokenNotExpiredResult; + // spyOn(configurationProvider, 'getOpenIDConfiguration').and.returnValue({ renewTimeBeforeTokenExpiresInSeconds: 5 }); + const date = new Date(new Date().toUTCString()); + const config = { + configId: 'configId1', + renewTimeBeforeTokenExpiresInSeconds: 5, + }; + + spyOn(eventsService, 'fireEvent'); + + spyOn(storagePersistenceService, 'read') + .withArgs('access_token_expires_at', config) + .and.returnValue(date); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(validateAccessTokenNotExpiredResult); + authStateService.hasAccessTokenExpiredIfExpiryExists(config); + expect(eventsService.fireEvent).toHaveBeenCalledOnceWith( + EventTypes.TokenExpired, + expectedResult + ); + }); + }); +}); diff --git a/src/auth-state/auth-state.service.ts b/src/auth-state/auth-state.service.ts new file mode 100644 index 0000000..7c51a94 --- /dev/null +++ b/src/auth-state/auth-state.service.ts @@ -0,0 +1,330 @@ +import { Injectable, inject } from 'injection-js'; +import { BehaviorSubject, Observable, throwError } from 'rxjs'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { AuthResult } from '../flows/callback-context'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { TokenValidationService } from '../validation/token-validation.service'; +import { AuthenticatedResult } from './auth-result'; +import { AuthStateResult } from './auth-state'; + +const DEFAULT_AUTHRESULT = { + isAuthenticated: false, + allConfigsAuthenticated: [], +}; + +@Injectable() +export class AuthStateService { + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly loggerService = inject(LoggerService); + + private readonly publicEventsService = inject(PublicEventsService); + + private readonly tokenValidationService = inject(TokenValidationService); + + private readonly authenticatedInternal$ = + new BehaviorSubject(DEFAULT_AUTHRESULT); + + get authenticated$(): Observable { + return this.authenticatedInternal$ + .asObservable() + .pipe(distinctUntilChanged()); + } + + setAuthenticatedAndFireEvent(allConfigs: OpenIdConfiguration[]): void { + const result = this.composeAuthenticatedResult(allConfigs); + + this.authenticatedInternal$.next(result); + } + + setUnauthenticatedAndFireEvent( + currentConfig: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + this.storagePersistenceService.resetAuthStateInStorage(currentConfig); + + const result = this.composeUnAuthenticatedResult(allConfigs); + + this.authenticatedInternal$.next(result); + } + + updateAndPublishAuthState(authenticationResult: AuthStateResult): void { + this.publicEventsService.fireEvent( + EventTypes.NewAuthenticationResult, + authenticationResult + ); + } + + setAuthorizationData( + accessToken: string, + authResult: AuthResult | null, + currentConfig: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + this.loggerService.logDebug( + currentConfig, + `storing the accessToken '${accessToken}'` + ); + + this.storagePersistenceService.write( + 'authzData', + accessToken, + currentConfig + ); + this.persistAccessTokenExpirationTime(authResult, currentConfig); + this.setAuthenticatedAndFireEvent(allConfigs); + } + + getAccessToken(configuration: OpenIdConfiguration | null): string { + if (!configuration) { + return ''; + } + + if (!this.isAuthenticated(configuration)) { + return ''; + } + + const token = this.storagePersistenceService.getAccessToken(configuration); + + return this.decodeURIComponentSafely(token); + } + + getIdToken(configuration: OpenIdConfiguration | null): string { + if (!configuration) { + return ''; + } + + if (!this.isAuthenticated(configuration)) { + return ''; + } + + const token = this.storagePersistenceService.getIdToken(configuration); + + return this.decodeURIComponentSafely(token); + } + + getRefreshToken(configuration: OpenIdConfiguration | null): string { + if (!configuration) { + return ''; + } + + if (!this.isAuthenticated(configuration)) { + return ''; + } + + const token = this.storagePersistenceService.getRefreshToken(configuration); + + return this.decodeURIComponentSafely(token); + } + + getAuthenticationResult( + configuration: OpenIdConfiguration | null + ): AuthResult | null { + if (!configuration) { + return null; + } + + if (!this.isAuthenticated(configuration)) { + return null; + } + + return this.storagePersistenceService.getAuthenticationResult( + configuration + ); + } + + areAuthStorageTokensValid( + configuration: OpenIdConfiguration | null + ): boolean { + if (!configuration) { + return false; + } + + if (!this.isAuthenticated(configuration)) { + return false; + } + + if (this.hasIdTokenExpiredAndRenewCheckIsEnabled(configuration)) { + this.loggerService.logDebug( + configuration, + 'persisted idToken is expired' + ); + + return false; + } + + if (this.hasAccessTokenExpiredIfExpiryExists(configuration)) { + this.loggerService.logDebug( + configuration, + 'persisted accessToken is expired' + ); + + return false; + } + + this.loggerService.logDebug( + configuration, + 'persisted idToken and accessToken are valid' + ); + + return true; + } + + hasIdTokenExpiredAndRenewCheckIsEnabled( + configuration: OpenIdConfiguration + ): boolean { + const { + renewTimeBeforeTokenExpiresInSeconds, + triggerRefreshWhenIdTokenExpired, + disableIdTokenValidation, + } = configuration; + + if (!triggerRefreshWhenIdTokenExpired || disableIdTokenValidation) { + return false; + } + const tokenToCheck = + this.storagePersistenceService.getIdToken(configuration); + + const idTokenExpired = this.tokenValidationService.hasIdTokenExpired( + tokenToCheck, + configuration, + renewTimeBeforeTokenExpiresInSeconds + ); + + if (idTokenExpired) { + this.publicEventsService.fireEvent( + EventTypes.IdTokenExpired, + idTokenExpired + ); + } + + return idTokenExpired; + } + + hasAccessTokenExpiredIfExpiryExists( + configuration: OpenIdConfiguration + ): boolean { + const { renewTimeBeforeTokenExpiresInSeconds } = configuration; + const accessTokenExpiresIn = this.storagePersistenceService.read( + 'access_token_expires_at', + configuration + ); + const accessTokenHasNotExpired = + this.tokenValidationService.validateAccessTokenNotExpired( + accessTokenExpiresIn, + configuration, + renewTimeBeforeTokenExpiresInSeconds + ); + + const hasExpired = !accessTokenHasNotExpired; + + if (hasExpired) { + this.publicEventsService.fireEvent( + EventTypes.TokenExpired, + hasExpired + ); + } + + return hasExpired; + } + + isAuthenticated(configuration: OpenIdConfiguration | null): boolean { + if (!configuration) { + throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + + return false; + } + + const hasAccessToken = + !!this.storagePersistenceService.getAccessToken(configuration); + const hasIdToken = + !!this.storagePersistenceService.getIdToken(configuration); + + return hasAccessToken && hasIdToken; + } + + private decodeURIComponentSafely(token: string): string { + if (token) { + return decodeURIComponent(token); + } else { + return ''; + } + } + + private persistAccessTokenExpirationTime( + authResult: AuthResult | null, + configuration: OpenIdConfiguration + ): void { + if (authResult?.expires_in) { + const accessTokenExpiryTime = + new Date(new Date().toUTCString()).valueOf() + + authResult.expires_in * 1000; + + this.storagePersistenceService.write( + 'access_token_expires_at', + accessTokenExpiryTime, + configuration + ); + } + } + + private composeAuthenticatedResult( + allConfigs: OpenIdConfiguration[] + ): AuthenticatedResult { + if (allConfigs.length === 1) { + const { configId } = allConfigs[0]; + + return { + isAuthenticated: true, + allConfigsAuthenticated: [ + { configId: configId ?? '', isAuthenticated: true }, + ], + }; + } + + return this.checkAllConfigsIfTheyAreAuthenticated(allConfigs); + } + + private composeUnAuthenticatedResult( + allConfigs: OpenIdConfiguration[] + ): AuthenticatedResult { + if (allConfigs.length === 1) { + const { configId } = allConfigs[0]; + + return { + isAuthenticated: false, + allConfigsAuthenticated: [ + { configId: configId ?? '', isAuthenticated: false }, + ], + }; + } + + return this.checkAllConfigsIfTheyAreAuthenticated(allConfigs); + } + + private checkAllConfigsIfTheyAreAuthenticated( + allConfigs: OpenIdConfiguration[] + ): AuthenticatedResult { + const allConfigsAuthenticated = allConfigs.map((config) => ({ + configId: config.configId ?? '', + isAuthenticated: this.isAuthenticated(config), + })); + + const isAuthenticated = allConfigsAuthenticated.every( + (x) => !!x.isAuthenticated + ); + + return { allConfigsAuthenticated, isAuthenticated }; + } +} diff --git a/src/auth-state/auth-state.ts b/src/auth-state/auth-state.ts new file mode 100644 index 0000000..a8e2191 --- /dev/null +++ b/src/auth-state/auth-state.ts @@ -0,0 +1,7 @@ +import { ValidationResult } from '../validation/validation-result'; + +export interface AuthStateResult { + isAuthenticated: boolean; + validationResult: ValidationResult; + isRenewProcess: boolean; +} diff --git a/src/auth-state/check-auth.service.spec.ts b/src/auth-state/check-auth.service.spec.ts new file mode 100644 index 0000000..d7f9534 --- /dev/null +++ b/src/auth-state/check-auth.service.spec.ts @@ -0,0 +1,907 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { of, throwError } from 'rxjs'; +import { mockAbstractProvider, mockProvider } from '../../test/auto-mock'; +import { AutoLoginService } from '../auto-login/auto-login.service'; +import { CallbackService } from '../callback/callback.service'; +import { PeriodicallyTokenCheckService } from '../callback/periodically-token-check.service'; +import { RefreshSessionService } from '../callback/refresh-session.service'; +import { + StsConfigLoader, + StsConfigStaticLoader, +} from '../config/loader/config-loader'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { CheckSessionService } from '../iframe/check-session.service'; +import { SilentRenewService } from '../iframe/silent-renew.service'; +import { LoggerService } from '../logging/logger.service'; +import { LoginResponse } from '../login/login-response'; +import { PopUpService } from '../login/popup/popup.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { CurrentUrlService } from '../utils/url/current-url.service'; +import { AuthStateService } from './auth-state.service'; +import { CheckAuthService } from './check-auth.service'; + +describe('CheckAuthService', () => { + let checkAuthService: CheckAuthService; + let authStateService: AuthStateService; + let userService: UserService; + let checkSessionService: CheckSessionService; + let callBackService: CallbackService; + let silentRenewService: SilentRenewService; + let periodicallyTokenCheckService: PeriodicallyTokenCheckService; + let refreshSessionService: RefreshSessionService; + let popUpService: PopUpService; + let autoLoginService: AutoLoginService; + let storagePersistenceService: StoragePersistenceService; + let currentUrlService: CurrentUrlService; + let publicEventsService: PublicEventsService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [ + mockProvider(CheckSessionService), + mockProvider(SilentRenewService), + mockProvider(UserService), + mockProvider(LoggerService), + mockProvider(AuthStateService), + mockProvider(CallbackService), + mockProvider(RefreshSessionService), + mockProvider(PeriodicallyTokenCheckService), + mockProvider(PopUpService), + mockProvider(CurrentUrlService), + mockProvider(PublicEventsService), + mockAbstractProvider(StsConfigLoader, StsConfigStaticLoader), + AutoLoginService, + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + checkAuthService = TestBed.inject(CheckAuthService); + refreshSessionService = TestBed.inject(RefreshSessionService); + userService = TestBed.inject(UserService); + authStateService = TestBed.inject(AuthStateService); + checkSessionService = TestBed.inject(CheckSessionService); + callBackService = TestBed.inject(CallbackService); + silentRenewService = TestBed.inject(SilentRenewService); + periodicallyTokenCheckService = TestBed.inject( + PeriodicallyTokenCheckService + ); + popUpService = TestBed.inject(PopUpService); + autoLoginService = TestBed.inject(AutoLoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + currentUrlService = TestBed.inject(CurrentUrlService); + publicEventsService = TestBed.inject(PublicEventsService); + }); + + afterEach(() => { + storagePersistenceService.clear({} as OpenIdConfiguration); + }); + + it('should create', () => { + expect(checkAuthService).toBeTruthy(); + }); + + describe('checkAuth', () => { + it('uses config with matching state when url has state param and config with state param is stored', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + 'the-state-param' + ); + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(storagePersistenceService, 'read') + .withArgs('authStateControl', allConfigs[0]) + .and.returnValue('the-state-param'); + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + allConfigs[0], + allConfigs, + undefined + ); + }); + })); + + it('throws error when url has state param and stored config with matching state param is not found', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + 'the-state-param' + ); + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(storagePersistenceService, 'read') + .withArgs('authStateControl', allConfigs[0]) + .and.returnValue('not-matching-state-param'); + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + expect(spy).not.toHaveBeenCalled(); + }, + }); + })); + + it('uses first/default config when no param is passed', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + null + ); + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + { configId: 'configId1', authority: 'some-authority' }, + allConfigs, + undefined + ); + }); + })); + + it('returns null and sendMessageToMainWindow if currently in a popup', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(popUpService as any, 'canAccessSessionStorage').and.returnValue( + true + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOnProperty(popUpService as any, 'windowInternal').and.returnValue({ + opener: {} as Window, + }); + spyOn(storagePersistenceService, 'read').and.returnValue(null); + + spyOn(popUpService, 'isCurrentlyInPopup').and.returnValue(true); + const popupSpy = spyOn(popUpService, 'sendMessageToMainWindow'); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId: '', + }); + expect(popupSpy).toHaveBeenCalled(); + }); + })); + + it('returns isAuthenticated: false with error message in case handleCallbackAndFireEvents throws an error', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(true); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + const spy = spyOn( + callBackService, + 'handleCallbackAndFireEvents' + ).and.returnValue(throwError(() => new Error('ERROR'))); + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: 'ERROR', + configId: 'configId1', + idToken: '', + userData: null, + accessToken: '', + }); + expect(spy).toHaveBeenCalled(); + }); + })); + + it('calls callbackService.handlePossibleStsCallback with current url when callback is true', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(true); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'getAccessToken').and.returnValue('at'); + spyOn(authStateService, 'getIdToken').and.returnValue('idt'); + + const spy = spyOn( + callBackService, + 'handleCallbackAndFireEvents' + ).and.returnValue(of({} as CallbackContext)); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: true, + userData: undefined, + accessToken: 'at', + configId: 'configId1', + idToken: 'idt', + }); + expect(spy).toHaveBeenCalled(); + }); + })); + + it('does NOT call handleCallbackAndFireEvents with current url when callback is false', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + const spy = spyOn( + callBackService, + 'handleCallbackAndFireEvents' + ).and.returnValue(of({} as CallbackContext)); + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'getAccessToken').and.returnValue('at'); + spyOn(authStateService, 'getIdToken').and.returnValue('idt'); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: true, + userData: undefined, + accessToken: 'at', + configId: 'configId1', + idToken: 'idt', + }); + expect(spy).not.toHaveBeenCalled(); + }); + })); + + it('does fire the auth and user data events when it is not a callback from the security token service and is authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(userService, 'getUserDataFromStore').and.returnValue({ + some: 'user-data', + }); + spyOn(authStateService, 'getAccessToken').and.returnValue('at'); + spyOn(authStateService, 'getIdToken').and.returnValue('idt'); + + const setAuthorizedAndFireEventSpy = spyOn( + authStateService, + 'setAuthenticatedAndFireEvent' + ); + const userServiceSpy = spyOn(userService, 'publishUserDataIfExists'); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: true, + userData: { + some: 'user-data', + }, + accessToken: 'at', + configId: 'configId1', + idToken: 'idt', + }); + expect(setAuthorizedAndFireEventSpy).toHaveBeenCalled(); + expect(userServiceSpy).toHaveBeenCalled(); + }); + })); + + it('does NOT fire the auth and user data events when it is not a callback from the security token service and is NOT authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOn(authStateService, 'getAccessToken').and.returnValue('at'); + spyOn(authStateService, 'getIdToken').and.returnValue('it'); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + + const setAuthorizedAndFireEventSpy = spyOn( + authStateService, + 'setAuthenticatedAndFireEvent' + ); + const userServiceSpy = spyOn(userService, 'publishUserDataIfExists'); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + userData: undefined, + accessToken: 'at', + configId: 'configId1', + idToken: 'it', + }); + expect(setAuthorizedAndFireEventSpy).not.toHaveBeenCalled(); + expect(userServiceSpy).not.toHaveBeenCalled(); + }); + })); + + it('if authenticated return true', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'getAccessToken').and.returnValue('at'); + spyOn(authStateService, 'getIdToken').and.returnValue('idt'); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + checkAuthService + .checkAuth(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: true, + userData: undefined, + accessToken: 'at', + configId: 'configId1', + idToken: 'idt', + }); + }); + })); + + it('if authenticated set auth and fires event ', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + const spy = spyOn(authStateService, 'setAuthenticatedAndFireEvent'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('if authenticated publishUserdataIfExists', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + const spy = spyOn(userService, 'publishUserDataIfExists'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('if authenticated callbackService startTokenValidationPeriodically', waitForAsync(() => { + const config = { + authority: 'authority', + tokenRefreshInSeconds: 7, + }; + const allConfigs = [config]; + + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + const spy = spyOn( + periodicallyTokenCheckService, + 'startTokenValidationPeriodically' + ); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('if isCheckSessionConfigured call checkSessionService.start()', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(checkSessionService, 'isCheckSessionConfigured').and.returnValue( + true + ); + const spy = spyOn(checkSessionService, 'start'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('if isSilentRenewConfigured call getOrCreateIframe()', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(silentRenewService, 'isSilentRenewConfigured').and.returnValue( + true + ); + const spy = spyOn(silentRenewService, 'getOrCreateIframe'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('calls checkSavedRedirectRouteAndNavigate if authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const spy = spyOn(autoLoginService, 'checkSavedRedirectRouteAndNavigate'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledOnceWith(allConfigs[0]); + }); + })); + + it('does not call checkSavedRedirectRouteAndNavigate if not authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const spy = spyOn(autoLoginService, 'checkSavedRedirectRouteAndNavigate'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalledTimes(0); + }); + })); + + it('fires CheckingAuth-Event on start and finished event on end', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + + const fireEventSpy = spyOn(publicEventsService, 'fireEvent'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(fireEventSpy.calls.allArgs()).toEqual([ + [EventTypes.CheckingAuth], + [EventTypes.CheckingAuthFinished], + ]); + }); + })); + + it('fires CheckingAuth-Event on start and CheckingAuthFinishedWithError event on end if exception occurs', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + const fireEventSpy = spyOn(publicEventsService, 'fireEvent'); + + spyOn(callBackService, 'isCallback').and.returnValue(true); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + throwError(() => new Error('ERROR')) + ); + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(fireEventSpy.calls.allArgs()).toEqual([ + [EventTypes.CheckingAuth], + [EventTypes.CheckingAuthFinishedWithError, 'ERROR'], + ]); + }); + })); + + it('fires CheckingAuth-Event on start and finished event on end if not authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(currentUrlService, 'getCurrentUrl').and.returnValue( + 'http://localhost:4200' + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + + const fireEventSpy = spyOn(publicEventsService, 'fireEvent'); + + checkAuthService.checkAuth(allConfigs[0], allConfigs).subscribe(() => { + expect(fireEventSpy.calls.allArgs()).toEqual([ + [EventTypes.CheckingAuth], + [EventTypes.CheckingAuthFinished], + ]); + }); + })); + }); + + describe('checkAuthIncludingServer', () => { + it('if isSilentRenewConfigured call getOrCreateIframe()', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + + spyOn(silentRenewService, 'isSilentRenewConfigured').and.returnValue( + true + ); + const spy = spyOn(silentRenewService, 'getOrCreateIframe'); + + checkAuthService + .checkAuthIncludingServer(allConfigs[0], allConfigs) + .subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('does forceRefreshSession get called and is NOT authenticated', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + of({ + idToken: 'idToken', + accessToken: 'access_token', + isAuthenticated: false, + userData: null, + configId: 'configId1', + }) + ); + + checkAuthService + .checkAuthIncludingServer(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toBeTruthy(); + }); + })); + + it('should start check session and validation after forceRefreshSession has been called and is authenticated after forcing with silentrenew', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(checkSessionService, 'isCheckSessionConfigured').and.returnValue( + true + ); + spyOn(silentRenewService, 'isSilentRenewConfigured').and.returnValue( + true + ); + + const checkSessionServiceStartSpy = spyOn(checkSessionService, 'start'); + const periodicallyTokenCheckServiceSpy = spyOn( + periodicallyTokenCheckService, + 'startTokenValidationPeriodically' + ); + const getOrCreateIframeSpy = spyOn( + silentRenewService, + 'getOrCreateIframe' + ); + + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + of({ + idToken: 'idToken', + accessToken: 'access_token', + isAuthenticated: true, + userData: null, + configId: 'configId1', + }) + ); + + checkAuthService + .checkAuthIncludingServer(allConfigs[0], allConfigs) + .subscribe(() => { + expect(checkSessionServiceStartSpy).toHaveBeenCalledOnceWith( + allConfigs[0] + ); + expect(periodicallyTokenCheckServiceSpy).toHaveBeenCalledTimes(1); + expect(getOrCreateIframeSpy).toHaveBeenCalledOnceWith(allConfigs[0]); + }); + })); + + it('should start check session and validation after forceRefreshSession has been called and is authenticated after forcing without silentrenew', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority' }, + ]; + + spyOn(callBackService, 'isCallback').and.returnValue(false); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOn(callBackService, 'handleCallbackAndFireEvents').and.returnValue( + of({} as CallbackContext) + ); + spyOn(checkSessionService, 'isCheckSessionConfigured').and.returnValue( + true + ); + spyOn(silentRenewService, 'isSilentRenewConfigured').and.returnValue( + false + ); + + const checkSessionServiceStartSpy = spyOn(checkSessionService, 'start'); + const periodicallyTokenCheckServiceSpy = spyOn( + periodicallyTokenCheckService, + 'startTokenValidationPeriodically' + ); + const getOrCreateIframeSpy = spyOn( + silentRenewService, + 'getOrCreateIframe' + ); + + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + of({ + idToken: 'idToken', + accessToken: 'access_token', + isAuthenticated: true, + userData: null, + configId: 'configId1', + }) + ); + + checkAuthService + .checkAuthIncludingServer(allConfigs[0], allConfigs) + .subscribe(() => { + expect(checkSessionServiceStartSpy).toHaveBeenCalledOnceWith( + allConfigs[0] + ); + expect(periodicallyTokenCheckServiceSpy).toHaveBeenCalledTimes(1); + expect(getOrCreateIframeSpy).not.toHaveBeenCalled(); + }); + })); + }); + + describe('checkAuthMultiple', () => { + it('uses config with matching state when url has state param and config with state param is stored', waitForAsync(() => { + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority1' }, + { configId: 'configId2', authority: 'some-authority2' }, + ]; + + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + 'the-state-param' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authStateControl', allConfigs[0]) + .and.returnValue('the-state-param'); + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuthMultiple(allConfigs).subscribe((result) => { + expect(Array.isArray(result)).toBe(true); + expect(spy).toHaveBeenCalledTimes(2); + expect(spy.calls.argsFor(0)).toEqual([ + allConfigs[0], + allConfigs, + undefined, + ]); + expect(spy.calls.argsFor(1)).toEqual([ + allConfigs[1], + allConfigs, + undefined, + ]); + }); + })); + + it('uses config from passed configId if configId was passed and returns all results', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + null + ); + + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority1' }, + { configId: 'configId2', authority: 'some-authority2' }, + ]; + + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuthMultiple(allConfigs).subscribe((result) => { + expect(Array.isArray(result)).toBe(true); + expect(spy.calls.allArgs()).toEqual([ + [ + { configId: 'configId1', authority: 'some-authority1' }, + allConfigs, + undefined, + ], + [ + { configId: 'configId2', authority: 'some-authority2' }, + allConfigs, + undefined, + ], + ]); + }); + })); + + it('runs through all configs if no parameter is passed and has no state in url', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + null + ); + + const allConfigs = [ + { configId: 'configId1', authority: 'some-authority1' }, + { configId: 'configId2', authority: 'some-authority2' }, + ]; + + const spy = spyOn( + checkAuthService as any, + 'checkAuthWithConfig' + ).and.callThrough(); + + checkAuthService.checkAuthMultiple(allConfigs).subscribe((result) => { + expect(Array.isArray(result)).toBe(true); + expect(spy).toHaveBeenCalledTimes(2); + expect(spy.calls.argsFor(0)).toEqual([ + { configId: 'configId1', authority: 'some-authority1' }, + allConfigs, + undefined, + ]); + expect(spy.calls.argsFor(1)).toEqual([ + { configId: 'configId2', authority: 'some-authority2' }, + allConfigs, + undefined, + ]); + }); + })); + + it('throws error if url has state param but no config could be found', waitForAsync(() => { + spyOn(currentUrlService, 'getStateParamFromCurrentUrl').and.returnValue( + 'the-state-param' + ); + + const allConfigs: OpenIdConfiguration[] = []; + + checkAuthService.checkAuthMultiple(allConfigs).subscribe({ + error: (error) => { + expect(error.message).toEqual( + 'could not find matching config for state the-state-param' + ); + }, + }); + })); + }); +}); diff --git a/src/auth-state/check-auth.service.ts b/src/auth-state/check-auth.service.ts new file mode 100644 index 0000000..eaddadc --- /dev/null +++ b/src/auth-state/check-auth.service.ts @@ -0,0 +1,362 @@ +import { inject, Injectable } from 'injection-js'; +import { forkJoin, Observable, of, throwError } from 'rxjs'; +import { catchError, map, switchMap, tap } from 'rxjs/operators'; +import { AutoLoginService } from '../auto-login/auto-login.service'; +import { CallbackService } from '../callback/callback.service'; +import { PeriodicallyTokenCheckService } from '../callback/periodically-token-check.service'; +import { RefreshSessionService } from '../callback/refresh-session.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CheckSessionService } from '../iframe/check-session.service'; +import { SilentRenewService } from '../iframe/silent-renew.service'; +import { LoggerService } from '../logging/logger.service'; +import { LoginResponse } from '../login/login-response'; +import { PopUpService } from '../login/popup/popup.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { CurrentUrlService } from '../utils/url/current-url.service'; +import { AuthStateService } from './auth-state.service'; + +@Injectable() +export class CheckAuthService { + private readonly checkSessionService = inject(CheckSessionService); + + private readonly currentUrlService = inject(CurrentUrlService); + + private readonly silentRenewService = inject(SilentRenewService); + + private readonly userService = inject(UserService); + + private readonly loggerService = inject(LoggerService); + + private readonly authStateService = inject(AuthStateService); + + private readonly callbackService = inject(CallbackService); + + private readonly refreshSessionService = inject(RefreshSessionService); + + private readonly periodicallyTokenCheckService = inject( + PeriodicallyTokenCheckService + ); + + private readonly popupService = inject(PopUpService); + + private readonly autoLoginService = inject(AutoLoginService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly publicEventsService = inject(PublicEventsService); + + private getConfig( + configuration: OpenIdConfiguration, + url: string | undefined + ): OpenIdConfiguration | null { + const stateParamFromUrl = + this.currentUrlService.getStateParamFromCurrentUrl(url); + + return Boolean(stateParamFromUrl) + ? this.getConfigurationWithUrlState([configuration], stateParamFromUrl) + : configuration; + } + + checkAuth( + configuration: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[], + url?: string + ): Observable { + if (!configuration) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + this.publicEventsService.fireEvent(EventTypes.CheckingAuth); + + const stateParamFromUrl = + this.currentUrlService.getStateParamFromCurrentUrl(url); + const config = this.getConfig(configuration, url); + + if (!config) { + return throwError( + () => + new Error( + `could not find matching config for state ${stateParamFromUrl}` + ) + ); + } + + return this.checkAuthWithConfig(configuration, allConfigs, url); + } + + checkAuthMultiple( + allConfigs: OpenIdConfiguration[], + url?: string + ): Observable { + const stateParamFromUrl = + this.currentUrlService.getStateParamFromCurrentUrl(url); + + if (stateParamFromUrl) { + const config = this.getConfigurationWithUrlState( + allConfigs, + stateParamFromUrl + ); + + if (!config) { + return throwError( + () => + new Error( + `could not find matching config for state ${stateParamFromUrl}` + ) + ); + } + + return this.composeMultipleLoginResults(allConfigs, config, url); + } + + const configs = allConfigs; + const allChecks$ = configs.map((x) => + this.checkAuthWithConfig(x, configs, url) + ); + + return forkJoin(allChecks$); + } + + checkAuthIncludingServer( + configuration: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[] + ): Observable { + if (!configuration) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + return this.checkAuthWithConfig(configuration, allConfigs).pipe( + switchMap((loginResponse) => { + const { isAuthenticated } = loginResponse; + + if (isAuthenticated) { + return of(loginResponse); + } + + return this.refreshSessionService + .forceRefreshSession(configuration, allConfigs) + .pipe( + tap((loginResponseAfterRefreshSession) => { + if (loginResponseAfterRefreshSession?.isAuthenticated) { + this.startCheckSessionAndValidation(configuration, allConfigs); + } + }) + ); + }) + ); + } + + private checkAuthWithConfig( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + url?: string + ): Observable { + if (!config) { + const errorMessage = + 'Please provide at least one configuration before setting up the module'; + + this.loggerService.logError(config, errorMessage); + + const result: LoginResponse = { + isAuthenticated: false, + errorMessage, + userData: null, + idToken: '', + accessToken: '', + configId: '', + }; + + return of(result); + } + + const currentUrl = url || this.currentUrlService.getCurrentUrl(); + + if (!currentUrl) { + const errorMessage = 'No URL found!'; + + this.loggerService.logError(config, errorMessage); + + const result: LoginResponse = { + isAuthenticated: false, + errorMessage, + userData: null, + idToken: '', + accessToken: '', + configId: '', + }; + + return of(result); + } + + const { configId, authority } = config; + + this.loggerService.logDebug( + config, + `Working with config '${configId}' using '${authority}'` + ); + + if (this.popupService.isCurrentlyInPopup(config)) { + this.popupService.sendMessageToMainWindow(currentUrl, config); + + const result: LoginResponse = { + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId: '', + }; + + return of(result); + } + + const isCallback = this.callbackService.isCallback(currentUrl, config); + + this.loggerService.logDebug( + config, + `currentUrl to check auth with: '${currentUrl}'` + ); + + const callback$ = isCallback + ? this.callbackService.handleCallbackAndFireEvents( + currentUrl, + config, + allConfigs + ) + : of({}); + + return callback$.pipe( + map(() => { + const isAuthenticated = + this.authStateService.areAuthStorageTokensValid(config); + + this.loggerService.logDebug( + config, + `checkAuth completed. Firing events now. isAuthenticated: ${isAuthenticated}` + ); + + if (isAuthenticated) { + this.startCheckSessionAndValidation(config, allConfigs); + + if (!isCallback) { + this.authStateService.setAuthenticatedAndFireEvent(allConfigs); + this.userService.publishUserDataIfExists(config, allConfigs); + } + } + this.publicEventsService.fireEvent(EventTypes.CheckingAuthFinished); + + const result: LoginResponse = { + isAuthenticated, + userData: this.userService.getUserDataFromStore(config), + accessToken: this.authStateService.getAccessToken(config), + idToken: this.authStateService.getIdToken(config), + configId, + }; + + return result; + }), + tap(({ isAuthenticated }) => { + if (isAuthenticated) { + this.autoLoginService.checkSavedRedirectRouteAndNavigate(config); + } + }), + catchError(({ message }) => { + this.loggerService.logError(config, message); + this.publicEventsService.fireEvent( + EventTypes.CheckingAuthFinishedWithError, + message + ); + + const result: LoginResponse = { + isAuthenticated: false, + errorMessage: message, + userData: null, + idToken: '', + accessToken: '', + configId, + }; + + return of(result); + }) + ); + } + + private startCheckSessionAndValidation( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + if (this.checkSessionService.isCheckSessionConfigured(config)) { + this.checkSessionService.start(config); + } + + this.periodicallyTokenCheckService.startTokenValidationPeriodically( + allConfigs, + config + ); + + if (this.silentRenewService.isSilentRenewConfigured(config)) { + this.silentRenewService.getOrCreateIframe(config); + } + } + + private getConfigurationWithUrlState( + configurations: OpenIdConfiguration[], + stateFromUrl: string | null + ): OpenIdConfiguration | null { + if (!stateFromUrl) { + return null; + } + + for (const config of configurations) { + const storedState = this.storagePersistenceService.read( + 'authStateControl', + config + ); + + if (storedState === stateFromUrl) { + return config; + } + } + + return null; + } + + private composeMultipleLoginResults( + configurations: OpenIdConfiguration[], + activeConfig: OpenIdConfiguration, + url?: string + ): Observable { + const allOtherConfigs = configurations.filter( + (x) => x.configId !== activeConfig.configId + ); + + const currentConfigResult = this.checkAuthWithConfig( + activeConfig, + configurations, + url + ); + + const allOtherConfigResults = allOtherConfigs.map((config) => { + const { redirectUrl } = config; + + return this.checkAuthWithConfig(config, configurations, redirectUrl); + }); + + return forkJoin([currentConfigResult, ...allOtherConfigResults]); + } +} diff --git a/src/auth.module.spec.ts b/src/auth.module.spec.ts new file mode 100644 index 0000000..8e06b77 --- /dev/null +++ b/src/auth.module.spec.ts @@ -0,0 +1,61 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../test/auto-mock'; +import { PASSED_CONFIG } from './auth-config'; +import { AuthModule } from './auth.module'; +import { ConfigurationService } from './config/config.service'; +import { + StsConfigHttpLoader, + StsConfigLoader, + StsConfigStaticLoader, +} from './config/loader/config-loader'; + +describe('AuthModule', () => { + describe('APP_CONFIG', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [AuthModule.forRoot({ config: { authority: 'something' } })], + providers: [mockProvider(ConfigurationService)], + }).compileComponents(); + })); + + it('should create', () => { + expect(AuthModule).toBeDefined(); + expect(AuthModule.forRoot({})).toBeDefined(); + }); + + it('should provide config', () => { + const config = TestBed.inject(PASSED_CONFIG); + + expect(config).toEqual({ config: { authority: 'something' } }); + }); + + it('should create StsConfigStaticLoader if config is passed', () => { + const configLoader = TestBed.inject(StsConfigLoader); + + expect(configLoader instanceof StsConfigStaticLoader).toBe(true); + }); + }); + + describe('StsConfigHttpLoader', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + AuthModule.forRoot({ + loader: { + provide: StsConfigLoader, + useFactory: () => new StsConfigHttpLoader(of({})), + }, + }), + ], + providers: [mockProvider(ConfigurationService)], + }).compileComponents(); + })); + + it('should create StsConfigStaticLoader if config is passed', () => { + const configLoader = TestBed.inject(StsConfigLoader); + + expect(configLoader instanceof StsConfigHttpLoader).toBe(true); + }); + }); +}); diff --git a/src/auth.module.ts b/src/auth.module.ts new file mode 100644 index 0000000..79c734c --- /dev/null +++ b/src/auth.module.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { + provideHttpClient, + withInterceptorsFromDi, +} from '@ngify/http'; +import { ModuleWithProviders, NgModule } from 'injection-js'; +import { PassedInitialConfig } from './auth-config'; +import { _provideAuth } from './provide-auth'; + +@NgModule({ + declarations: [], + exports: [], + imports: [CommonModule], + providers: [provideHttpClient(withInterceptorsFromDi())], +}) +export class AuthModule { + static forRoot( + passedConfig: PassedInitialConfig + ): ModuleWithProviders { + return { + ngModule: AuthModule, + providers: [..._provideAuth(passedConfig)], + }; + } +} diff --git a/src/auto-login/auto-login-all-routes.guard.spec.ts b/src/auto-login/auto-login-all-routes.guard.spec.ts new file mode 100644 index 0000000..0bdb75d --- /dev/null +++ b/src/auto-login/auto-login-all-routes.guard.spec.ts @@ -0,0 +1,402 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { Observable, of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CheckAuthService } from '../auth-state/check-auth.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoginResponse } from '../login/login-response'; +import { LoginService } from '../login/login.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { AutoLoginAllRoutesGuard } from './auto-login-all-routes.guard'; +import { AutoLoginService } from './auto-login.service'; + +describe(`AutoLoginAllRoutesGuard`, () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [ + AutoLoginService, + mockProvider(CheckAuthService), + mockProvider(LoginService), + mockProvider(StoragePersistenceService), + mockProvider(ConfigurationService), + ], + }); + }); + + describe('Class based', () => { + let guard: AutoLoginAllRoutesGuard; + let checkAuthService: CheckAuthService; + let loginService: LoginService; + let storagePersistenceService: StoragePersistenceService; + let configurationService: ConfigurationService; + let autoLoginService: AutoLoginService; + let router: Router; + + beforeEach(() => { + checkAuthService = TestBed.inject(CheckAuthService); + loginService = TestBed.inject(LoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + configurationService = TestBed.inject(ConfigurationService); + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of({ configId: 'configId1' }) + ); + + guard = TestBed.inject(AutoLoginAllRoutesGuard); + autoLoginService = TestBed.inject(AutoLoginService); + router = TestBed.inject(Router); + }); + + afterEach(() => { + storagePersistenceService.clear({}); + }); + + it('should create', () => { + expect(guard).toBeTruthy(); + }); + + describe('canActivate', () => { + it('should save current route and call `login` if not authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: false } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const canActivate$ = guard.canActivate( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivate$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canActivate$ = guard.canActivate( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivate$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ + configId: 'configId1', + }); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canActivate$ = guard.canActivate( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivate$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + + describe('canActivateChild', () => { + it('should save current route and call `login` if not authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: false } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canActivateChild$ = guard.canActivateChild( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivateChild$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canActivateChild$ = guard.canActivateChild( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivateChild$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ + configId: 'configId1', + }); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canActivateChild$ = guard.canActivateChild( + {} as ActivatedRouteSnapshot, + { + url: 'some-url1', + } as RouterStateSnapshot + ) as Observable; + + canActivateChild$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + + describe('canLoad', () => { + it('should save current route (empty) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: false } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canLoad$ = guard.canLoad(); + + canLoad$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should save current route (with router extractedUrl) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: false } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const _routerSpy = spyOn( + router, + 'getCurrentNavigation' + ).and.returnValue({ + extractedUrl: router.parseUrl( + 'some-url12/with/some-param?queryParam=true' + ), + extras: {}, + id: 1, + initialUrl: router.parseUrl(''), + previousNavigation: null, + trigger: 'imperative', + }); + const canLoad$ = guard.canLoad(); + + canLoad$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url12/with/some-param?queryParam=true' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canLoad$ = guard.canLoad() as Observable; + + canLoad$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ + configId: 'configId1', + }); + }); + })); + + it('should save current route (with router extractedUrl) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: false } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const _routerSpy = spyOn( + router, + 'getCurrentNavigation' + ).and.returnValue({ + extractedUrl: router.parseUrl( + 'some-url12/with/some-param?queryParam=true' + ), + extras: {}, + id: 1, + initialUrl: router.parseUrl(''), + previousNavigation: null, + trigger: 'imperative', + }); + const canLoad$ = guard.canLoad(); + + canLoad$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url12/with/some-param?queryParam=true' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ isAuthenticated: true } as LoginResponse) + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + const canLoad$ = guard.canLoad() as Observable; + + canLoad$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + }); +}); diff --git a/src/auto-login/auto-login-all-routes.guard.ts b/src/auto-login/auto-login-all-routes.guard.ts new file mode 100644 index 0000000..ef8d80b --- /dev/null +++ b/src/auto-login/auto-login-all-routes.guard.ts @@ -0,0 +1,101 @@ +import { inject, Injectable } from 'injection-js'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, + UrlTree, +} from '@angular/router'; +import { Observable } from 'rxjs'; +import { map, switchMap, take } from 'rxjs/operators'; +import { CheckAuthService } from '../auth-state/check-auth.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoginService } from '../login/login.service'; +import { AutoLoginService } from './auto-login.service'; + +/** + * @deprecated Please do not use the `AutoLoginAllRoutesGuard` anymore as it is not recommended anymore, deprecated and will be removed in future versions of this library. More information [Why is AutoLoginAllRoutesGuard not recommended?](https://github.com/damienbod/angular-auth-oidc-client/issues/1549) + */ +@Injectable() +export class AutoLoginAllRoutesGuard { + private readonly autoLoginService = inject(AutoLoginService); + + private readonly checkAuthService = inject(CheckAuthService); + + private readonly loginService = inject(LoginService); + + private readonly configurationService = inject(ConfigurationService); + + private readonly router = inject(Router); + + canLoad(): Observable { + const url = + this.router + .getCurrentNavigation() + ?.extractedUrl.toString() + .substring(1) ?? ''; + + return checkAuth( + url, + this.configurationService, + this.checkAuthService, + this.autoLoginService, + this.loginService + ); + } + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Observable { + return checkAuth( + state.url, + this.configurationService, + this.checkAuthService, + this.autoLoginService, + this.loginService + ); + } + + canActivateChild( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Observable { + return checkAuth( + state.url, + this.configurationService, + this.checkAuthService, + this.autoLoginService, + this.loginService + ); + } +} + +function checkAuth( + url: string, + configurationService: ConfigurationService, + checkAuthService: CheckAuthService, + autoLoginService: AutoLoginService, + loginService: LoginService +): Observable { + return configurationService.getOpenIDConfiguration().pipe( + switchMap((config) => { + const allConfigs = configurationService.getAllConfigurations(); + + return checkAuthService.checkAuth(config, allConfigs).pipe( + take(1), + map(({ isAuthenticated }) => { + if (isAuthenticated) { + autoLoginService.checkSavedRedirectRouteAndNavigate(config); + } + + if (!isAuthenticated) { + autoLoginService.saveRedirectRoute(config, url); + loginService.login(config); + } + + return isAuthenticated; + }) + ); + }) + ); +} diff --git a/src/auto-login/auto-login-partial-routes.guard.spec.ts b/src/auto-login/auto-login-partial-routes.guard.spec.ts new file mode 100644 index 0000000..672e12b --- /dev/null +++ b/src/auto-login/auto-login-partial-routes.guard.spec.ts @@ -0,0 +1,556 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { CheckAuthService } from '../auth-state/check-auth.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoginService } from '../login/login.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { + AutoLoginPartialRoutesGuard, + autoLoginPartialRoutesGuard, + autoLoginPartialRoutesGuardWithConfig, +} from './auto-login-partial-routes.guard'; +import { AutoLoginService } from './auto-login.service'; + +describe(`AutoLoginPartialRoutesGuard`, () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [ + AutoLoginService, + mockProvider(AuthStateService), + mockProvider(LoginService), + mockProvider(StoragePersistenceService), + mockProvider(CheckAuthService), + mockProvider(ConfigurationService), + ], + }); + }); + + describe('Class based', () => { + let guard: AutoLoginPartialRoutesGuard; + let loginService: LoginService; + let authStateService: AuthStateService; + let storagePersistenceService: StoragePersistenceService; + let configurationService: ConfigurationService; + let autoLoginService: AutoLoginService; + let router: Router; + + beforeEach(() => { + authStateService = TestBed.inject(AuthStateService); + loginService = TestBed.inject(LoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + configurationService = TestBed.inject(ConfigurationService); + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of({ configId: 'configId1' }) + ); + + guard = TestBed.inject(AutoLoginPartialRoutesGuard); + autoLoginService = TestBed.inject(AutoLoginService); + router = TestBed.inject(Router); + }); + + afterEach(() => { + storagePersistenceService.clear({}); + }); + + it('should create', () => { + expect(guard).toBeTruthy(); + }); + + describe('canActivate', () => { + it('should save current route and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivate( + {} as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ + configId: 'configId1', + }); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).not.toHaveBeenCalled(); + }); + })); + + it('should save current route and call `login` if not authenticated already and add custom params', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivate( + { data: { custom: 'param' } } as unknown as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + { customParams: { custom: 'param' } } + ); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivate( + {} as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + + describe('canActivateChild', () => { + it('should save current route and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivateChild( + {} as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ + configId: 'configId1', + }); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).not.toHaveBeenCalled(); + }); + })); + + it('should save current route and call `login` if not authenticated already with custom params', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivateChild( + { data: { custom: 'param' } } as unknown as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url1' + ); + expect(loginSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + { customParams: { custom: 'param' } } + ); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard + .canActivateChild( + {} as ActivatedRouteSnapshot, + { url: 'some-url1' } as RouterStateSnapshot + ) + .subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + + describe('canLoad', () => { + it('should save current route (empty) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard.canLoad().subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should save current route (with router extractedUrl) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + spyOn(router, 'getCurrentNavigation').and.returnValue({ + extractedUrl: router.parseUrl( + 'some-url12/with/some-param?queryParam=true' + ), + extras: {}, + id: 1, + initialUrl: router.parseUrl(''), + previousNavigation: null, + trigger: 'imperative', + }); + + guard.canLoad().subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url12/with/some-param?queryParam=true' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + guard.canLoad().subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + }); + + describe('functional', () => { + describe('autoLoginPartialRoutesGuard', () => { + let loginService: LoginService; + let authStateService: AuthStateService; + let storagePersistenceService: StoragePersistenceService; + let configurationService: ConfigurationService; + let autoLoginService: AutoLoginService; + let router: Router; + + beforeEach(() => { + authStateService = TestBed.inject(AuthStateService); + loginService = TestBed.inject(LoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + configurationService = TestBed.inject(ConfigurationService); + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of({ configId: 'configId1' }) + ); + + autoLoginService = TestBed.inject(AutoLoginService); + router = TestBed.inject(Router); + }); + + afterEach(() => { + storagePersistenceService.clear({}); + }); + + it('should save current route (empty) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const guard$ = TestBed.runInInjectionContext( + autoLoginPartialRoutesGuard + ); + + guard$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should save current route (with router extractedUrl) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(router, 'getCurrentNavigation').and.returnValue({ + extractedUrl: router.parseUrl( + 'some-url12/with/some-param?queryParam=true' + ), + extras: {}, + id: 1, + initialUrl: router.parseUrl(''), + previousNavigation: null, + trigger: 'imperative', + }); + + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const guard$ = TestBed.runInInjectionContext( + autoLoginPartialRoutesGuard + ); + + guard$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'some-url12/with/some-param?queryParam=true' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should save current route and call `login` if not authenticated already and add custom params', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const guard$ = TestBed.runInInjectionContext(() => + autoLoginPartialRoutesGuard({ + data: { custom: 'param' }, + } as unknown as ActivatedRouteSnapshot) + ); + + guard$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '' + ); + expect(loginSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + { customParams: { custom: 'param' } } + ); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call `checkSavedRedirectRouteAndNavigate` if authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const guard$ = TestBed.runInInjectionContext( + autoLoginPartialRoutesGuard + ); + + guard$.subscribe(() => { + expect(saveRedirectRouteSpy).not.toHaveBeenCalled(); + expect(loginSpy).not.toHaveBeenCalled(); + expect( + checkSavedRedirectRouteAndNavigateSpy + ).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + }); + })); + }); + + describe('autoLoginPartialRoutesGuardWithConfig', () => { + let loginService: LoginService; + let authStateService: AuthStateService; + let storagePersistenceService: StoragePersistenceService; + let configurationService: ConfigurationService; + let autoLoginService: AutoLoginService; + + beforeEach(() => { + authStateService = TestBed.inject(AuthStateService); + loginService = TestBed.inject(LoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + configurationService = TestBed.inject(ConfigurationService); + + spyOn(configurationService, 'getOpenIDConfiguration').and.callFake( + (configId) => of({ configId }) + ); + + autoLoginService = TestBed.inject(AutoLoginService); + }); + + afterEach(() => { + storagePersistenceService.clear({}); + }); + + it('should save current route (empty) and call `login` if not authenticated already', waitForAsync(() => { + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const checkSavedRedirectRouteAndNavigateSpy = spyOn( + autoLoginService, + 'checkSavedRedirectRouteAndNavigate' + ); + const saveRedirectRouteSpy = spyOn( + autoLoginService, + 'saveRedirectRoute' + ); + const loginSpy = spyOn(loginService, 'login'); + + const guard$ = TestBed.runInInjectionContext( + autoLoginPartialRoutesGuardWithConfig('configId1') + ); + + guard$.subscribe(() => { + expect(saveRedirectRouteSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '' + ); + expect(loginSpy).toHaveBeenCalledOnceWith({ configId: 'configId1' }); + expect(checkSavedRedirectRouteAndNavigateSpy).not.toHaveBeenCalled(); + }); + })); + }); + }); +}); diff --git a/src/auto-login/auto-login-partial-routes.guard.ts b/src/auto-login/auto-login-partial-routes.guard.ts new file mode 100644 index 0000000..96144f1 --- /dev/null +++ b/src/auto-login/auto-login-partial-routes.guard.ts @@ -0,0 +1,148 @@ +import { inject, Injectable } from 'injection-js'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AuthOptions } from '../auth-options'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoginService } from '../login/login.service'; +import { AutoLoginService } from './auto-login.service'; + +@Injectable() +export class AutoLoginPartialRoutesGuard { + private readonly autoLoginService = inject(AutoLoginService); + + private readonly authStateService = inject(AuthStateService); + + private readonly loginService = inject(LoginService); + + private readonly configurationService = inject(ConfigurationService); + + private readonly router = inject(Router); + + canLoad(): Observable { + const url = + this.router + .getCurrentNavigation() + ?.extractedUrl.toString() + .substring(1) ?? ''; + + return checkAuth( + url, + this.configurationService, + this.authStateService, + this.autoLoginService, + this.loginService + ); + } + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Observable { + const authOptions: AuthOptions | undefined = route?.data + ? { customParams: route.data } + : undefined; + + return checkAuth( + state.url, + this.configurationService, + this.authStateService, + this.autoLoginService, + this.loginService, + authOptions + ); + } + + canActivateChild( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Observable { + const authOptions: AuthOptions | undefined = route?.data + ? { customParams: route.data } + : undefined; + + return checkAuth( + state.url, + this.configurationService, + this.authStateService, + this.autoLoginService, + this.loginService, + authOptions + ); + } +} + +export function autoLoginPartialRoutesGuard( + route?: ActivatedRouteSnapshot, + state?: RouterStateSnapshot, + configId?: string +): Observable { + const configurationService = inject(ConfigurationService); + const authStateService = inject(AuthStateService); + const loginService = inject(LoginService); + const autoLoginService = inject(AutoLoginService); + const router = inject(Router); + const authOptions: AuthOptions | undefined = route?.data + ? { customParams: route.data } + : undefined; + + const url = + router.getCurrentNavigation()?.extractedUrl.toString().substring(1) ?? ''; + + return checkAuth( + url, + configurationService, + authStateService, + autoLoginService, + loginService, + authOptions, + configId + ); +} + +export function autoLoginPartialRoutesGuardWithConfig( + configId: string +): ( + route?: ActivatedRouteSnapshot, + state?: RouterStateSnapshot +) => Observable { + return (route?: ActivatedRouteSnapshot, state?: RouterStateSnapshot) => + autoLoginPartialRoutesGuard(route, state, configId); +} + +function checkAuth( + url: string, + configurationService: ConfigurationService, + authStateService: AuthStateService, + autoLoginService: AutoLoginService, + loginService: LoginService, + authOptions?: AuthOptions, + configId?: string +): Observable { + return configurationService.getOpenIDConfiguration(configId).pipe( + map((configuration) => { + const isAuthenticated = + authStateService.areAuthStorageTokensValid(configuration); + + if (isAuthenticated) { + autoLoginService.checkSavedRedirectRouteAndNavigate(configuration); + } + + if (!isAuthenticated) { + autoLoginService.saveRedirectRoute(configuration, url); + if (authOptions) { + loginService.login(configuration, authOptions); + } else { + loginService.login(configuration); + } + } + + return isAuthenticated; + }) + ); +} diff --git a/src/auto-login/auto-login.service.spec.ts b/src/auto-login/auto-login.service.spec.ts new file mode 100644 index 0000000..b0f685a --- /dev/null +++ b/src/auto-login/auto-login.service.spec.ts @@ -0,0 +1,84 @@ +import { TestBed } from '@angular/core/testing'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { AutoLoginService } from './auto-login.service'; + +describe('AutoLoginService ', () => { + let autoLoginService: AutoLoginService; + let storagePersistenceService: StoragePersistenceService; + let router: Router; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [AutoLoginService, mockProvider(StoragePersistenceService)], + }); + }); + + beforeEach(() => { + router = TestBed.inject(Router); + autoLoginService = TestBed.inject(AutoLoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + }); + + it('should create', () => { + expect(autoLoginService).toBeTruthy(); + }); + + describe('checkSavedRedirectRouteAndNavigate', () => { + it('if not route is saved, router and delete are not called', () => { + const deleteSpy = spyOn(storagePersistenceService, 'remove'); + const routerSpy = spyOn(router, 'navigateByUrl'); + const readSpy = spyOn(storagePersistenceService, 'read').and.returnValue( + null + ); + + autoLoginService.checkSavedRedirectRouteAndNavigate({ + configId: 'configId1', + }); + + expect(deleteSpy).not.toHaveBeenCalled(); + expect(routerSpy).not.toHaveBeenCalled(); + expect(readSpy).toHaveBeenCalledOnceWith('redirect', { + configId: 'configId1', + }); + }); + + it('if route is saved, router and delete are called', () => { + const deleteSpy = spyOn(storagePersistenceService, 'remove'); + const routerSpy = spyOn(router, 'navigateByUrl'); + const readSpy = spyOn(storagePersistenceService, 'read').and.returnValue( + 'saved-route' + ); + + autoLoginService.checkSavedRedirectRouteAndNavigate({ + configId: 'configId1', + }); + + expect(deleteSpy).toHaveBeenCalledOnceWith('redirect', { + configId: 'configId1', + }); + expect(routerSpy).toHaveBeenCalledOnceWith('saved-route'); + expect(readSpy).toHaveBeenCalledOnceWith('redirect', { + configId: 'configId1', + }); + }); + }); + + describe('saveRedirectRoute', () => { + it('calls storageService with correct params', () => { + const writeSpy = spyOn(storagePersistenceService, 'write'); + + autoLoginService.saveRedirectRoute( + { configId: 'configId1' }, + 'some-route' + ); + + expect(writeSpy).toHaveBeenCalledOnceWith('redirect', 'some-route', { + configId: 'configId1', + }); + }); + }); +}); diff --git a/src/auto-login/auto-login.service.ts b/src/auto-login/auto-login.service.ts new file mode 100644 index 0000000..e58f322 --- /dev/null +++ b/src/auto-login/auto-login.service.ts @@ -0,0 +1,53 @@ +import { inject, Injectable } from 'injection-js'; +import { Router } from '@angular/router'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; + +const STORAGE_KEY = 'redirect'; + +@Injectable() +export class AutoLoginService { + private readonly storageService = inject(StoragePersistenceService); + + private readonly router = inject(Router); + + checkSavedRedirectRouteAndNavigate(config: OpenIdConfiguration | null): void { + if (!config) { + return; + } + const savedRouteForRedirect = this.getStoredRedirectRoute(config); + + if (savedRouteForRedirect != null) { + this.deleteStoredRedirectRoute(config); + this.router.navigateByUrl(savedRouteForRedirect); + } + } + + /** + * Saves the redirect URL to storage. + * + * @param config The OpenId configuration. + * @param url The redirect URL to save. + */ + saveRedirectRoute(config: OpenIdConfiguration | null, url: string): void { + if (!config) { + return; + } + + this.storageService.write(STORAGE_KEY, url, config); + } + + /** + * Gets the stored redirect URL from storage. + */ + private getStoredRedirectRoute(config: OpenIdConfiguration): string { + return this.storageService.read(STORAGE_KEY, config); + } + + /** + * Removes the redirect URL from storage. + */ + private deleteStoredRedirectRoute(config: OpenIdConfiguration): void { + this.storageService.remove(STORAGE_KEY, config); + } +} diff --git a/src/callback/callback.service.spec.ts b/src/callback/callback.service.spec.ts new file mode 100644 index 0000000..75f67b6 --- /dev/null +++ b/src/callback/callback.service.spec.ts @@ -0,0 +1,144 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { UrlService } from '../utils/url/url.service'; +import { CallbackService } from './callback.service'; +import { CodeFlowCallbackService } from './code-flow-callback.service'; +import { ImplicitFlowCallbackService } from './implicit-flow-callback.service'; + +describe('CallbackService ', () => { + let callbackService: CallbackService; + let implicitFlowCallbackService: ImplicitFlowCallbackService; + let codeFlowCallbackService: CodeFlowCallbackService; + let flowHelper: FlowHelper; + let urlService: UrlService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + CallbackService, + mockProvider(UrlService), + FlowHelper, + mockProvider(ImplicitFlowCallbackService), + mockProvider(CodeFlowCallbackService), + ], + }); + }); + + beforeEach(() => { + callbackService = TestBed.inject(CallbackService); + flowHelper = TestBed.inject(FlowHelper); + implicitFlowCallbackService = TestBed.inject(ImplicitFlowCallbackService); + codeFlowCallbackService = TestBed.inject(CodeFlowCallbackService); + urlService = TestBed.inject(UrlService); + }); + + describe('isCallback', () => { + it('calls urlService.isCallbackFromSts with passed url', () => { + const urlServiceSpy = spyOn(urlService, 'isCallbackFromSts'); + + callbackService.isCallback('anyUrl'); + expect(urlServiceSpy).toHaveBeenCalledOnceWith('anyUrl', undefined); + }); + }); + + describe('stsCallback$', () => { + it('is of type Observable', () => { + expect(callbackService.stsCallback$).toBeInstanceOf(Observable); + }); + }); + + describe('handleCallbackAndFireEvents', () => { + it('calls authorizedCallbackWithCode if current flow is code flow', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const authorizedCallbackWithCodeSpy = spyOn( + codeFlowCallbackService, + 'authenticatedCallbackWithCode' + ).and.returnValue(of({} as CallbackContext)); + + callbackService + .handleCallbackAndFireEvents('anyUrl', { configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe(() => { + expect(authorizedCallbackWithCodeSpy).toHaveBeenCalledOnceWith( + 'anyUrl', + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + }); + })); + + it('calls authorizedImplicitFlowCallback without hash if current flow is implicit flow and callbackurl does not include a hash', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowAnyImplicitFlow').and.returnValue(true); + const authorizedCallbackWithCodeSpy = spyOn( + implicitFlowCallbackService, + 'authenticatedImplicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + + callbackService + .handleCallbackAndFireEvents('anyUrl', { configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe(() => { + expect(authorizedCallbackWithCodeSpy).toHaveBeenCalledWith( + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + }); + })); + + it('calls authorizedImplicitFlowCallback with hash if current flow is implicit flow and callbackurl does include a hash', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowAnyImplicitFlow').and.returnValue(true); + const authorizedCallbackWithCodeSpy = spyOn( + implicitFlowCallbackService, + 'authenticatedImplicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + + callbackService + .handleCallbackAndFireEvents( + 'anyUrlWithAHash#some-string', + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ) + .subscribe(() => { + expect(authorizedCallbackWithCodeSpy).toHaveBeenCalledWith( + { configId: 'configId1' }, + [{ configId: 'configId1' }], + 'some-string' + ); + }); + })); + + it('emits callbackinternal no matter which flow it is', waitForAsync(() => { + const callbackSpy = spyOn( + (callbackService as any).stsCallbackInternal$, + 'next' + ); + + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const authenticatedCallbackWithCodeSpy = spyOn( + codeFlowCallbackService, + 'authenticatedCallbackWithCode' + ).and.returnValue(of({} as CallbackContext)); + + callbackService + .handleCallbackAndFireEvents('anyUrl', { configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe(() => { + expect(authenticatedCallbackWithCodeSpy).toHaveBeenCalledOnceWith( + 'anyUrl', + { configId: 'configId1' }, + [{ configId: 'configId1' }] + ); + expect(callbackSpy).toHaveBeenCalled(); + }); + })); + }); +}); diff --git a/src/callback/callback.service.ts b/src/callback/callback.service.ts new file mode 100644 index 0000000..7af6984 --- /dev/null +++ b/src/callback/callback.service.ts @@ -0,0 +1,73 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, Subject } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { UrlService } from '../utils/url/url.service'; +import { CodeFlowCallbackService } from './code-flow-callback.service'; +import { ImplicitFlowCallbackService } from './implicit-flow-callback.service'; + +@Injectable() +export class CallbackService { + private readonly urlService = inject(UrlService); + + private readonly flowHelper = inject(FlowHelper); + + private readonly implicitFlowCallbackService = inject( + ImplicitFlowCallbackService + ); + + private readonly codeFlowCallbackService = inject(CodeFlowCallbackService); + + private readonly stsCallbackInternal$ = new Subject(); + + get stsCallback$(): Observable { + return this.stsCallbackInternal$.asObservable(); + } + + isCallback(currentUrl: string, config?: OpenIdConfiguration): boolean { + if (!currentUrl) { + return false; + } + + return this.urlService.isCallbackFromSts(currentUrl, config); + } + + handleCallbackAndFireEvents( + currentCallbackUrl: string, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + let callback$: Observable = new Observable(); + + if (this.flowHelper.isCurrentFlowCodeFlow(config)) { + callback$ = this.codeFlowCallbackService.authenticatedCallbackWithCode( + currentCallbackUrl, + config, + allConfigs + ); + } else if (this.flowHelper.isCurrentFlowAnyImplicitFlow(config)) { + if (currentCallbackUrl?.includes('#')) { + const hash = currentCallbackUrl.substring( + currentCallbackUrl.indexOf('#') + 1 + ); + + callback$ = + this.implicitFlowCallbackService.authenticatedImplicitFlowCallback( + config, + allConfigs, + hash + ); + } else { + callback$ = + this.implicitFlowCallbackService.authenticatedImplicitFlowCallback( + config, + allConfigs + ); + } + } + + return callback$.pipe(tap(() => this.stsCallbackInternal$.next())); + } +} diff --git a/src/callback/code-flow-callback.service.spec.ts b/src/callback/code-flow-callback.service.spec.ts new file mode 100644 index 0000000..3e9996c --- /dev/null +++ b/src/callback/code-flow-callback.service.spec.ts @@ -0,0 +1,198 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { CodeFlowCallbackService } from './code-flow-callback.service'; +import { IntervalService } from './interval.service'; + +describe('CodeFlowCallbackService ', () => { + let codeFlowCallbackService: CodeFlowCallbackService; + let intervalService: IntervalService; + let flowsService: FlowsService; + let flowsDataService: FlowsDataService; + let router: Router; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [ + CodeFlowCallbackService, + mockProvider(FlowsService), + mockProvider(FlowsDataService), + mockProvider(IntervalService), + ], + }); + }); + + beforeEach(() => { + codeFlowCallbackService = TestBed.inject(CodeFlowCallbackService); + intervalService = TestBed.inject(IntervalService); + flowsDataService = TestBed.inject(FlowsDataService); + flowsService = TestBed.inject(FlowsService); + router = TestBed.inject(Router); + }); + + it('should create', () => { + expect(codeFlowCallbackService).toBeTruthy(); + }); + + describe('authenticatedCallbackWithCode', () => { + it('calls flowsService.processCodeFlowCallback with correct url', () => { + const spy = spyOn( + flowsService, + 'processCodeFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + //spyOn(configurationProvider, 'getOpenIDConfiguration').and.returnValue({ triggerAuthorizationResultEvent: true }); + + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: true, + }; + + codeFlowCallbackService.authenticatedCallbackWithCode( + 'some-url1', + config, + [config] + ); + expect(spy).toHaveBeenCalledOnceWith('some-url1', config, [config]); + }); + + it('does only call resetCodeFlowInProgress if triggerAuthorizationResultEvent is true and isRenewProcess is true', waitForAsync(() => { + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: '', + }; + const spy = spyOn( + flowsService, + 'processCodeFlowCallback' + ).and.returnValue(of(callbackContext)); + const flowsDataSpy = spyOn(flowsDataService, 'resetCodeFlowInProgress'); + const routerSpy = spyOn(router, 'navigateByUrl'); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: true, + }; + + codeFlowCallbackService + .authenticatedCallbackWithCode('some-url2', config, [config]) + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-url2', config, [config]); + expect(routerSpy).not.toHaveBeenCalled(); + expect(flowsDataSpy).toHaveBeenCalled(); + }); + })); + + it('calls router and resetCodeFlowInProgress if triggerAuthorizationResultEvent is false and isRenewProcess is false', waitForAsync(() => { + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: null, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: '', + }; + const spy = spyOn( + flowsService, + 'processCodeFlowCallback' + ).and.returnValue(of(callbackContext)); + const flowsDataSpy = spyOn(flowsDataService, 'resetCodeFlowInProgress'); + const routerSpy = spyOn(router, 'navigateByUrl'); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + postLoginRoute: 'postLoginRoute', + }; + + codeFlowCallbackService + .authenticatedCallbackWithCode('some-url3', config, [config]) + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-url3', config, [config]); + expect(routerSpy).toHaveBeenCalledOnceWith('postLoginRoute'); + expect(flowsDataSpy).toHaveBeenCalled(); + }); + })); + + it('resetSilentRenewRunning, resetCodeFlowInProgress and stopPeriodicallTokenCheck in case of error', waitForAsync(() => { + spyOn(flowsService, 'processCodeFlowCallback').and.returnValue( + throwError(() => new Error('error')) + ); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const resetCodeFlowInProgressSpy = spyOn( + flowsDataService, + 'resetCodeFlowInProgress' + ); + const stopPeriodicallTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + postLoginRoute: 'postLoginRoute', + }; + + codeFlowCallbackService + .authenticatedCallbackWithCode('some-url4', config, [config]) + .subscribe({ + error: (err) => { + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + expect(resetCodeFlowInProgressSpy).toHaveBeenCalled(); + expect(stopPeriodicallTokenCheckSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it(`navigates to unauthorizedRoute in case of error and in case of error and + triggerAuthorizationResultEvent is false`, waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(flowsService, 'processCodeFlowCallback').and.returnValue( + throwError(() => new Error('error')) + ); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const stopPeriodicallTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + const routerSpy = spyOn(router, 'navigateByUrl'); + + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + unauthorizedRoute: 'unauthorizedRoute', + }; + + codeFlowCallbackService + .authenticatedCallbackWithCode('some-url5', config, [config]) + .subscribe({ + error: (err) => { + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + expect(stopPeriodicallTokenCheckSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + expect(routerSpy).toHaveBeenCalledOnceWith('unauthorizedRoute'); + }, + }); + })); + }); +}); diff --git a/src/callback/code-flow-callback.service.ts b/src/callback/code-flow-callback.service.ts new file mode 100644 index 0000000..21374f4 --- /dev/null +++ b/src/callback/code-flow-callback.service.ts @@ -0,0 +1,56 @@ +import { inject, Injectable } from 'injection-js'; +import { Router } from '@angular/router'; +import { Observable, throwError } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { IntervalService } from './interval.service'; + +@Injectable() +export class CodeFlowCallbackService { + private readonly flowsService = inject(FlowsService); + + private readonly router = inject(Router); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly intervalService = inject(IntervalService); + + authenticatedCallbackWithCode( + urlToCheck: string, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const isRenewProcess = this.flowsDataService.isSilentRenewRunning(config); + const { triggerAuthorizationResultEvent } = config; + + const postLoginRoute = config.postLoginRoute || '/'; + const unauthorizedRoute = config.unauthorizedRoute || '/'; + + return this.flowsService + .processCodeFlowCallback(urlToCheck, config, allConfigs) + .pipe( + tap((callbackContext) => { + this.flowsDataService.resetCodeFlowInProgress(config); + if ( + !triggerAuthorizationResultEvent && + !callbackContext.isRenewProcess + ) { + this.router.navigateByUrl(postLoginRoute); + } + }), + catchError((error) => { + this.flowsDataService.resetSilentRenewRunning(config); + this.flowsDataService.resetCodeFlowInProgress(config); + this.intervalService.stopPeriodicTokenCheck(); + if (!triggerAuthorizationResultEvent && !isRenewProcess) { + this.router.navigateByUrl(unauthorizedRoute); + } + + return throwError(() => new Error(error)); + }) + ); + } +} diff --git a/src/callback/implicit-flow-callback.service.spec.ts b/src/callback/implicit-flow-callback.service.spec.ts new file mode 100644 index 0000000..830de5e --- /dev/null +++ b/src/callback/implicit-flow-callback.service.spec.ts @@ -0,0 +1,185 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { ImplicitFlowCallbackService } from './implicit-flow-callback.service'; +import { IntervalService } from './interval.service'; + +describe('ImplicitFlowCallbackService ', () => { + let implicitFlowCallbackService: ImplicitFlowCallbackService; + let intervalService: IntervalService; + let flowsService: FlowsService; + let flowsDataService: FlowsDataService; + let router: Router; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [ + mockProvider(FlowsService), + mockProvider(FlowsDataService), + mockProvider(IntervalService), + ], + }); + }); + + beforeEach(() => { + implicitFlowCallbackService = TestBed.inject(ImplicitFlowCallbackService); + intervalService = TestBed.inject(IntervalService); + flowsDataService = TestBed.inject(FlowsDataService); + flowsService = TestBed.inject(FlowsService); + router = TestBed.inject(Router); + }); + + it('should create', () => { + expect(implicitFlowCallbackService).toBeTruthy(); + }); + + describe('authorizedImplicitFlowCallback', () => { + it('calls flowsService.processImplicitFlowCallback with hash if given', () => { + const spy = spyOn( + flowsService, + 'processImplicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: true, + }; + + implicitFlowCallbackService.authenticatedImplicitFlowCallback( + config, + [config], + 'some-hash' + ); + + expect(spy).toHaveBeenCalledOnceWith(config, [config], 'some-hash'); + }); + + it('does nothing if triggerAuthorizationResultEvent is true and isRenewProcess is true', waitForAsync(() => { + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: '', + }; + const spy = spyOn( + flowsService, + 'processImplicitFlowCallback' + ).and.returnValue(of(callbackContext)); + const routerSpy = spyOn(router, 'navigateByUrl'); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: true, + }; + + implicitFlowCallbackService + .authenticatedImplicitFlowCallback(config, [config], 'some-hash') + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], 'some-hash'); + expect(routerSpy).not.toHaveBeenCalled(); + }); + })); + + it('calls router if triggerAuthorizationResultEvent is false and isRenewProcess is false', waitForAsync(() => { + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: null, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: '', + }; + const spy = spyOn( + flowsService, + 'processImplicitFlowCallback' + ).and.returnValue(of(callbackContext)); + const routerSpy = spyOn(router, 'navigateByUrl'); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + postLoginRoute: 'postLoginRoute', + }; + + implicitFlowCallbackService + .authenticatedImplicitFlowCallback(config, [config], 'some-hash') + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], 'some-hash'); + expect(routerSpy).toHaveBeenCalledOnceWith('postLoginRoute'); + }); + })); + + it('resetSilentRenewRunning and stopPeriodicallyTokenCheck in case of error', waitForAsync(() => { + spyOn(flowsService, 'processImplicitFlowCallback').and.returnValue( + throwError(() => new Error('error')) + ); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const stopPeriodicallyTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + postLoginRoute: 'postLoginRoute', + }; + + implicitFlowCallbackService + .authenticatedImplicitFlowCallback(config, [config], 'some-hash') + .subscribe({ + error: (err) => { + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + expect(stopPeriodicallyTokenCheckSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it(`navigates to unauthorizedRoute in case of error and in case of error and + triggerAuthorizationResultEvent is false`, waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(flowsService, 'processImplicitFlowCallback').and.returnValue( + throwError(() => new Error('error')) + ); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const stopPeriodicallTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + const routerSpy = spyOn(router, 'navigateByUrl'); + const config = { + configId: 'configId1', + triggerAuthorizationResultEvent: false, + unauthorizedRoute: 'unauthorizedRoute', + }; + + implicitFlowCallbackService + .authenticatedImplicitFlowCallback(config, [config], 'some-hash') + .subscribe({ + error: (err) => { + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + expect(stopPeriodicallTokenCheckSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + expect(routerSpy).toHaveBeenCalledOnceWith('unauthorizedRoute'); + }, + }); + })); + }); +}); diff --git a/src/callback/implicit-flow-callback.service.ts b/src/callback/implicit-flow-callback.service.ts new file mode 100644 index 0000000..f52de47 --- /dev/null +++ b/src/callback/implicit-flow-callback.service.ts @@ -0,0 +1,55 @@ +import { inject, Injectable } from 'injection-js'; +import { Router } from '@angular/router'; +import { Observable, throwError } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { IntervalService } from './interval.service'; + +@Injectable() +export class ImplicitFlowCallbackService { + private readonly flowsService = inject(FlowsService); + + private readonly router = inject(Router); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly intervalService = inject(IntervalService); + + authenticatedImplicitFlowCallback( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + hash?: string + ): Observable { + const isRenewProcess = this.flowsDataService.isSilentRenewRunning(config); + const triggerAuthorizationResultEvent = Boolean( + config.triggerAuthorizationResultEvent + ); + const postLoginRoute = config.postLoginRoute ?? ''; + const unauthorizedRoute = config.unauthorizedRoute ?? ''; + + return this.flowsService + .processImplicitFlowCallback(config, allConfigs, hash) + .pipe( + tap((callbackContext) => { + if ( + !triggerAuthorizationResultEvent && + !callbackContext.isRenewProcess + ) { + this.router.navigateByUrl(postLoginRoute); + } + }), + catchError((error) => { + this.flowsDataService.resetSilentRenewRunning(config); + this.intervalService.stopPeriodicTokenCheck(); + if (!triggerAuthorizationResultEvent && !isRenewProcess) { + this.router.navigateByUrl(unauthorizedRoute); + } + + return throwError(() => new Error(error)); + }) + ); + } +} diff --git a/src/callback/interval.service.spec.ts b/src/callback/interval.service.spec.ts new file mode 100644 index 0000000..2e124f5 --- /dev/null +++ b/src/callback/interval.service.spec.ts @@ -0,0 +1,76 @@ +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { Subscription } from 'rxjs'; +import { IntervalService } from './interval.service'; + +describe('IntervalService', () => { + let intervalService: IntervalService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + { + provide: Document, + useValue: { + defaultView: { + setInterval: window.setInterval, + }, + }, + }, + ], + }); + }); + + beforeEach(() => { + intervalService = TestBed.inject(IntervalService); + }); + + it('should create', () => { + expect(intervalService).toBeTruthy(); + }); + + describe('stopPeriodicTokenCheck', () => { + it('calls unsubscribe and sets to null', () => { + intervalService.runTokenValidationRunning = new Subscription(); + const spy = spyOn( + intervalService.runTokenValidationRunning, + 'unsubscribe' + ); + + intervalService.stopPeriodicTokenCheck(); + + expect(spy).toHaveBeenCalled(); + expect(intervalService.runTokenValidationRunning).toBeNull(); + }); + + it('does nothing if `runTokenValidationRunning` is null', () => { + intervalService.runTokenValidationRunning = new Subscription(); + const spy = spyOn( + intervalService.runTokenValidationRunning, + 'unsubscribe' + ); + + intervalService.runTokenValidationRunning = null; + intervalService.stopPeriodicTokenCheck(); + + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('startPeriodicTokenCheck', () => { + it('starts check after correct milliseconds', fakeAsync(() => { + const periodicCheck = intervalService.startPeriodicTokenCheck(0.5); + const spy = jasmine.createSpy(); + const sub = periodicCheck.subscribe(() => { + spy(); + }); + + tick(500); + expect(spy).toHaveBeenCalledTimes(1); + + tick(500); + expect(spy).toHaveBeenCalledTimes(2); + + sub.unsubscribe(); + })); + }); +}); diff --git a/src/callback/interval.service.ts b/src/callback/interval.service.ts new file mode 100644 index 0000000..c8bbd6d --- /dev/null +++ b/src/callback/interval.service.ts @@ -0,0 +1,42 @@ +import { Injectable, NgZone, inject } from 'injection-js'; +import { Observable, Subscription } from 'rxjs'; +import { DOCUMENT } from '../../dom'; + +@Injectable() +export class IntervalService { + private readonly zone = inject(NgZone); + + private readonly document = inject(DOCUMENT); + + runTokenValidationRunning: Subscription | null = null; + + isTokenValidationRunning(): boolean { + return Boolean(this.runTokenValidationRunning); + } + + stopPeriodicTokenCheck(): void { + if (this.runTokenValidationRunning) { + this.runTokenValidationRunning.unsubscribe(); + this.runTokenValidationRunning = null; + } + } + + startPeriodicTokenCheck(repeatAfterSeconds: number): Observable { + const millisecondsDelayBetweenTokenCheck = repeatAfterSeconds * 1000; + + return new Observable((subscriber) => { + let intervalId: number | undefined; + + this.zone.runOutsideAngular(() => { + intervalId = this.document?.defaultView?.setInterval( + () => this.zone.run(() => subscriber.next()), + millisecondsDelayBetweenTokenCheck + ); + }); + + return (): void => { + clearInterval(intervalId); + }; + }); + } +} diff --git a/src/callback/periodically-token-check.service.spec.ts b/src/callback/periodically-token-check.service.spec.ts new file mode 100644 index 0000000..93e470e --- /dev/null +++ b/src/callback/periodically-token-check.service.spec.ts @@ -0,0 +1,432 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ConfigurationService } from '../config/config.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { IntervalService } from './interval.service'; +import { PeriodicallyTokenCheckService } from './periodically-token-check.service'; +import { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service'; + +describe('PeriodicallyTokenCheckService', () => { + let periodicallyTokenCheckService: PeriodicallyTokenCheckService; + let intervalService: IntervalService; + let flowsDataService: FlowsDataService; + let flowHelper: FlowHelper; + let authStateService: AuthStateService; + let refreshSessionRefreshTokenService: RefreshSessionRefreshTokenService; + let userService: UserService; + let storagePersistenceService: StoragePersistenceService; + let resetAuthDataService: ResetAuthDataService; + let configurationService: ConfigurationService; + let publicEventsService: PublicEventsService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + mockProvider(ResetAuthDataService), + FlowHelper, + mockProvider(FlowsDataService), + mockProvider(LoggerService), + mockProvider(UserService), + mockProvider(AuthStateService), + mockProvider(RefreshSessionIframeService), + mockProvider(RefreshSessionRefreshTokenService), + mockProvider(IntervalService), + mockProvider(StoragePersistenceService), + mockProvider(PublicEventsService), + mockProvider(ConfigurationService), + ], + }); + }); + + beforeEach(() => { + periodicallyTokenCheckService = TestBed.inject( + PeriodicallyTokenCheckService + ); + intervalService = TestBed.inject(IntervalService); + flowsDataService = TestBed.inject(FlowsDataService); + flowHelper = TestBed.inject(FlowHelper); + authStateService = TestBed.inject(AuthStateService); + refreshSessionRefreshTokenService = TestBed.inject( + RefreshSessionRefreshTokenService + ); + userService = TestBed.inject(UserService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + publicEventsService = TestBed.inject(PublicEventsService); + configurationService = TestBed.inject(ConfigurationService); + + spyOn(intervalService, 'startPeriodicTokenCheck').and.returnValue(of(null)); + }); + + afterEach(() => { + if (!!intervalService.runTokenValidationRunning?.unsubscribe) { + intervalService.runTokenValidationRunning.unsubscribe(); + intervalService.runTokenValidationRunning = null; + } + }); + + it('should create', () => { + expect(periodicallyTokenCheckService).toBeTruthy(); + }); + + describe('startTokenValidationPeriodically', () => { + it('returns if no config has silentrenew enabled', waitForAsync(() => { + const configs = [ + { silentRenew: false, configId: 'configId1' }, + { silentRenew: false, configId: 'configId2' }, + ]; + + const result = + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + expect(result).toBeUndefined(); + })); + + it('returns if runTokenValidationRunning', waitForAsync(() => { + const configs = [{ silentRenew: true, configId: 'configId1' }]; + + spyOn(intervalService, 'isTokenValidationRunning').and.returnValue(true); + + const result = + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + expect(result).toBeUndefined(); + })); + + it('interval calls resetSilentRenewRunning when current flow is CodeFlowWithRefreshTokens', fakeAsync(() => { + const configs = [ + { silentRenew: true, configId: 'configId1', tokenRefreshInSeconds: 1 }, + ]; + + spyOn( + periodicallyTokenCheckService as any, + 'shouldStartPeriodicallyCheckForConfig' + ).and.returnValue(true); + const isCurrentFlowCodeFlowWithRefreshTokensSpy = spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + + spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(configs[0]) + ); + + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + tick(1000); + + intervalService.runTokenValidationRunning?.unsubscribe(); + intervalService.runTokenValidationRunning = null; + expect(isCurrentFlowCodeFlowWithRefreshTokensSpy).toHaveBeenCalled(); + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + })); + + it('interval calls resetSilentRenewRunning in case of error when current flow is CodeFlowWithRefreshTokens', fakeAsync(() => { + const configs = [ + { silentRenew: true, configId: 'configId1', tokenRefreshInSeconds: 1 }, + ]; + + spyOn( + periodicallyTokenCheckService as any, + 'shouldStartPeriodicallyCheckForConfig' + ).and.returnValue(true); + const resetSilentRenewRunning = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(throwError(() => new Error('error'))); + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(configs[0]) + ); + + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + tick(1000); + + expect( + periodicallyTokenCheckService.startTokenValidationPeriodically + ).toThrowError(); + expect(resetSilentRenewRunning).toHaveBeenCalledOnceWith(configs[0]); + })); + + it('interval throws silent renew failed event with data in case of an error', fakeAsync(() => { + const configs = [ + { silentRenew: true, configId: 'configId1', tokenRefreshInSeconds: 1 }, + ]; + + spyOn( + periodicallyTokenCheckService as any, + 'shouldStartPeriodicallyCheckForConfig' + ).and.returnValue(true); + spyOn(flowsDataService, 'resetSilentRenewRunning'); + const publicEventsServiceSpy = spyOn(publicEventsService, 'fireEvent'); + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(throwError(() => new Error('error'))); + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(configs[0]) + ); + + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + tick(1000); + + expect( + periodicallyTokenCheckService.startTokenValidationPeriodically + ).toThrowError(); + expect(publicEventsServiceSpy.calls.allArgs()).toEqual([ + [EventTypes.SilentRenewStarted], + [EventTypes.SilentRenewFailed, new Error('error')], + ]); + })); + + it('calls resetAuthorizationData and returns if no silent renew is configured', fakeAsync(() => { + const configs = [ + { silentRenew: true, configId: 'configId1', tokenRefreshInSeconds: 1 }, + ]; + + spyOn( + periodicallyTokenCheckService as any, + 'shouldStartPeriodicallyCheckForConfig' + ).and.returnValue(true); + + const configSpy = spyOn(configurationService, 'getOpenIDConfiguration'); + const configWithoutSilentRenew = { + silentRenew: false, + configId: 'configId1', + tokenRefreshInSeconds: 1, + }; + const configWithoutSilentRenew$ = of(configWithoutSilentRenew); + + configSpy.and.returnValue(configWithoutSilentRenew$); + + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + tick(1000); + intervalService.runTokenValidationRunning?.unsubscribe(); + intervalService.runTokenValidationRunning = null; + + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(1); + expect(resetAuthorizationDataSpy).toHaveBeenCalledOnceWith( + configWithoutSilentRenew, + configs + ); + })); + + it('calls refreshSessionWithRefreshTokens if current flow is Code flow with refresh tokens', fakeAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + periodicallyTokenCheckService as any, + 'shouldStartPeriodicallyCheckForConfig' + ).and.returnValue(true); + spyOn(storagePersistenceService, 'read').and.returnValue({}); + const configs = [ + { configId: 'configId1', silentRenew: true, tokenRefreshInSeconds: 1 }, + ]; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(configs[0] as OpenIdConfiguration) + ); + const refreshSessionWithRefreshTokensSpy = spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + + periodicallyTokenCheckService.startTokenValidationPeriodically( + configs, + configs[0] + ); + + tick(1000); + + intervalService.runTokenValidationRunning?.unsubscribe(); + intervalService.runTokenValidationRunning = null; + expect(refreshSessionWithRefreshTokensSpy).toHaveBeenCalled(); + })); + }); + + describe('shouldStartPeriodicallyCheckForConfig', () => { + it('returns false when there is no IdToken', () => { + spyOn(authStateService, 'getIdToken').and.returnValue(''); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeFalse(); + }); + + it('returns false when silent renew is running', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeFalse(); + }); + + it('returns false when code flow is in progress', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(flowsDataService, 'isCodeFlowInProgress').and.returnValue(true); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeFalse(); + }); + + it('returns false when there is no userdata from the store', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + spyOn(userService, 'getUserDataFromStore').and.returnValue(null); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeFalse(); + }); + + it('returns true when there is userDataFromStore, silentrenew is not running and there is an idtoken', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + + spyOn( + authStateService, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(true); + spyOn( + authStateService, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(true); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeTrue(); + }); + + it('returns false if tokens are not expired', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + spyOn( + authStateService, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(false); + spyOn( + authStateService, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(false); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeFalse(); + }); + + it('returns true if tokens are expired', () => { + spyOn(authStateService, 'getIdToken').and.returnValue('idToken'); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn(userService, 'getUserDataFromStore').and.returnValue( + 'some-userdata' + ); + + spyOn( + authStateService, + 'hasIdTokenExpiredAndRenewCheckIsEnabled' + ).and.returnValue(true); + spyOn( + authStateService, + 'hasAccessTokenExpiredIfExpiryExists' + ).and.returnValue(true); + + const result = ( + periodicallyTokenCheckService as any + ).shouldStartPeriodicallyCheckForConfig({ configId: 'configId1' }); + + expect(result).toBeTrue(); + }); + }); +}); diff --git a/src/callback/periodically-token-check.service.ts b/src/callback/periodically-token-check.service.ts new file mode 100644 index 0000000..a5691da --- /dev/null +++ b/src/callback/periodically-token-check.service.ts @@ -0,0 +1,258 @@ +import { inject, Injectable } from 'injection-js'; +import { forkJoin, Observable, of, throwError } from 'rxjs'; +import { catchError, switchMap } from 'rxjs/operators'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ConfigurationService } from '../config/config.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { IntervalService } from './interval.service'; +import { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service'; + +@Injectable() +export class PeriodicallyTokenCheckService { + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly flowHelper = inject(FlowHelper); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly loggerService = inject(LoggerService); + + private readonly userService = inject(UserService); + + private readonly authStateService = inject(AuthStateService); + + private readonly refreshSessionIframeService = inject( + RefreshSessionIframeService + ); + + private readonly refreshSessionRefreshTokenService = inject( + RefreshSessionRefreshTokenService + ); + + private readonly intervalService = inject(IntervalService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly publicEventsService = inject(PublicEventsService); + + private readonly configurationService = inject(ConfigurationService); + + startTokenValidationPeriodically( + allConfigs: OpenIdConfiguration[], + currentConfig: OpenIdConfiguration + ): void { + const configsWithSilentRenewEnabled = + this.getConfigsWithSilentRenewEnabled(allConfigs); + + if (configsWithSilentRenewEnabled.length <= 0) { + return; + } + + if (this.intervalService.isTokenValidationRunning()) { + return; + } + + const refreshTimeInSeconds = this.getSmallestRefreshTimeFromConfigs( + configsWithSilentRenewEnabled + ); + const periodicallyCheck$ = this.intervalService + .startPeriodicTokenCheck(refreshTimeInSeconds) + .pipe( + switchMap(() => { + const objectWithConfigIdsAndRefreshEvent: { + [id: string]: Observable; + } = {}; + + configsWithSilentRenewEnabled.forEach((config) => { + const identifier = config.configId as string; + const refreshEvent = this.getRefreshEvent(config, allConfigs); + + objectWithConfigIdsAndRefreshEvent[identifier] = refreshEvent; + }); + + return forkJoin(objectWithConfigIdsAndRefreshEvent); + }) + ); + + this.intervalService.runTokenValidationRunning = periodicallyCheck$ + .pipe(catchError((error) => throwError(() => new Error(error)))) + .subscribe({ + next: (objectWithConfigIds) => { + for (const [configId, _] of Object.entries(objectWithConfigIds)) { + this.configurationService + .getOpenIDConfiguration(configId) + .subscribe((config) => { + this.loggerService.logDebug( + config, + 'silent renew, periodic check finished!' + ); + + if ( + this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config) + ) { + this.flowsDataService.resetSilentRenewRunning(config); + } + }); + } + }, + error: (error) => { + this.loggerService.logError( + currentConfig, + 'silent renew failed!', + error + ); + }, + }); + } + + private getRefreshEvent( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const shouldStartRefreshEvent = + this.shouldStartPeriodicallyCheckForConfig(config); + + if (!shouldStartRefreshEvent) { + return of(null); + } + + const refreshEvent$ = this.createRefreshEventForConfig(config, allConfigs); + + this.publicEventsService.fireEvent(EventTypes.SilentRenewStarted); + + return refreshEvent$.pipe( + catchError((error) => { + this.loggerService.logError(config, 'silent renew failed!', error); + this.publicEventsService.fireEvent(EventTypes.SilentRenewFailed, error); + this.flowsDataService.resetSilentRenewRunning(config); + + return throwError(() => new Error(error)); + }) + ); + } + + private getSmallestRefreshTimeFromConfigs( + configsWithSilentRenewEnabled: OpenIdConfiguration[] + ): number { + const result = configsWithSilentRenewEnabled.reduce((prev, curr) => + (prev.tokenRefreshInSeconds ?? 0) < (curr.tokenRefreshInSeconds ?? 0) + ? prev + : curr + ); + + return result.tokenRefreshInSeconds ?? 0; + } + + private getConfigsWithSilentRenewEnabled( + allConfigs: OpenIdConfiguration[] + ): OpenIdConfiguration[] { + return allConfigs.filter((x) => x.silentRenew); + } + + private createRefreshEventForConfig( + configuration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + this.loggerService.logDebug(configuration, 'starting silent renew...'); + + return this.configurationService + .getOpenIDConfiguration(configuration.configId) + .pipe( + switchMap((config) => { + if (!config?.silentRenew) { + this.resetAuthDataService.resetAuthorizationData( + config, + allConfigs + ); + + return of(null); + } + + this.flowsDataService.setSilentRenewRunning(config); + + if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) { + // Retrieve Dynamically Set Custom Params for refresh body + const customParamsRefresh: { + [key: string]: string | number | boolean; + } = + this.storagePersistenceService.read( + 'storageCustomParamsRefresh', + config + ) || {}; + + const { customParamsRefreshTokenRequest } = config; + + const mergedParams = { + ...customParamsRefreshTokenRequest, + ...customParamsRefresh, + }; + + // Refresh Session using Refresh tokens + return this.refreshSessionRefreshTokenService.refreshSessionWithRefreshTokens( + config, + allConfigs, + mergedParams + ); + } + + // Retrieve Dynamically Set Custom Params + const customParams: { [key: string]: string | number | boolean } = + this.storagePersistenceService.read( + 'storageCustomParamsAuthRequest', + config + ); + + return this.refreshSessionIframeService.refreshSessionWithIframe( + config, + allConfigs, + customParams + ); + }) + ); + } + + private shouldStartPeriodicallyCheckForConfig( + config: OpenIdConfiguration + ): boolean { + const idToken = this.authStateService.getIdToken(config); + const isSilentRenewRunning = + this.flowsDataService.isSilentRenewRunning(config); + const isCodeFlowInProgress = + this.flowsDataService.isCodeFlowInProgress(config); + const userDataFromStore = this.userService.getUserDataFromStore(config); + + this.loggerService.logDebug( + config, + `Checking: silentRenewRunning: ${isSilentRenewRunning}, isCodeFlowInProgress: ${isCodeFlowInProgress} - has idToken: ${!!idToken} - has userData: ${!!userDataFromStore}` + ); + + const shouldBeExecuted = + !!userDataFromStore && + !isSilentRenewRunning && + !!idToken && + !isCodeFlowInProgress; + + if (!shouldBeExecuted) { + return false; + } + + const idTokenExpired = + this.authStateService.hasIdTokenExpiredAndRenewCheckIsEnabled(config); + const accessTokenExpired = + this.authStateService.hasAccessTokenExpiredIfExpiryExists(config); + + return idTokenExpired || accessTokenExpired; + } +} diff --git a/src/callback/refresh-session-refresh-token.service.spec.ts b/src/callback/refresh-session-refresh-token.service.spec.ts new file mode 100644 index 0000000..6aab19d --- /dev/null +++ b/src/callback/refresh-session-refresh-token.service.spec.ts @@ -0,0 +1,101 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsService } from '../flows/flows.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { LoggerService } from '../logging/logger.service'; +import { IntervalService } from './interval.service'; +import { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service'; + +describe('RefreshSessionRefreshTokenService', () => { + let refreshSessionRefreshTokenService: RefreshSessionRefreshTokenService; + let intervalService: IntervalService; + let resetAuthDataService: ResetAuthDataService; + let flowsService: FlowsService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + RefreshSessionRefreshTokenService, + mockProvider(LoggerService), + mockProvider(FlowsService), + mockProvider(ResetAuthDataService), + mockProvider(IntervalService), + ], + }); + }); + + beforeEach(() => { + flowsService = TestBed.inject(FlowsService); + refreshSessionRefreshTokenService = TestBed.inject( + RefreshSessionRefreshTokenService + ); + intervalService = TestBed.inject(IntervalService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + }); + + it('should create', () => { + expect(refreshSessionRefreshTokenService).toBeTruthy(); + }); + + describe('refreshSessionWithRefreshTokens', () => { + it('calls flowsService.processRefreshToken()', waitForAsync(() => { + const spy = spyOn(flowsService, 'processRefreshToken').and.returnValue( + of({} as CallbackContext) + ); + + refreshSessionRefreshTokenService + .refreshSessionWithRefreshTokens({ configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe(() => { + expect(spy).toHaveBeenCalled(); + }); + })); + + it('resetAuthorizationData in case of error', waitForAsync(() => { + spyOn(flowsService, 'processRefreshToken').and.returnValue( + throwError(() => new Error('error')) + ); + const resetSilentRenewRunningSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + + refreshSessionRefreshTokenService + .refreshSessionWithRefreshTokens({ configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe({ + error: (err) => { + expect(resetSilentRenewRunningSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it('finalize with stopPeriodicTokenCheck in case of error', fakeAsync(() => { + spyOn(flowsService, 'processRefreshToken').and.returnValue( + throwError(() => new Error('error')) + ); + const stopPeriodicallyTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + + refreshSessionRefreshTokenService + .refreshSessionWithRefreshTokens({ configId: 'configId1' }, [ + { configId: 'configId1' }, + ]) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + tick(); + expect(stopPeriodicallyTokenCheckSpy).toHaveBeenCalled(); + })); + }); +}); diff --git a/src/callback/refresh-session-refresh-token.service.ts b/src/callback/refresh-session-refresh-token.service.ts new file mode 100644 index 0000000..56cd31c --- /dev/null +++ b/src/callback/refresh-session-refresh-token.service.ts @@ -0,0 +1,44 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, throwError } from 'rxjs'; +import { catchError, finalize } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsService } from '../flows/flows.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { LoggerService } from '../logging/logger.service'; +import { IntervalService } from './interval.service'; + +@Injectable() +export class RefreshSessionRefreshTokenService { + private readonly loggerService = inject(LoggerService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly flowsService = inject(FlowsService); + + private readonly intervalService = inject(IntervalService); + + refreshSessionWithRefreshTokens( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + customParamsRefresh?: { [key: string]: string | number | boolean } + ): Observable { + this.loggerService.logDebug(config, 'BEGIN refresh session Authorize'); + let refreshTokenFailed = false; + + return this.flowsService + .processRefreshToken(config, allConfigs, customParamsRefresh) + .pipe( + catchError((error) => { + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + refreshTokenFailed = true; + + return throwError(() => new Error(error)); + }), + finalize( + () => + refreshTokenFailed && this.intervalService.stopPeriodicTokenCheck() + ) + ); + } +} diff --git a/src/callback/refresh-session.service.spec.ts b/src/callback/refresh-session.service.spec.ts new file mode 100644 index 0000000..4cc72ec --- /dev/null +++ b/src/callback/refresh-session.service.spec.ts @@ -0,0 +1,667 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { delay } from 'rxjs/operators'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { AuthWellKnownService } from '../config/auth-well-known/auth-well-known.service'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service'; +import { SilentRenewService } from '../iframe/silent-renew.service'; +import { LoggerService } from '../logging/logger.service'; +import { LoginResponse } from '../login/login-response'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service'; +import { + MAX_RETRY_ATTEMPTS, + RefreshSessionService, +} from './refresh-session.service'; + +describe('RefreshSessionService ', () => { + let refreshSessionService: RefreshSessionService; + let flowHelper: FlowHelper; + let authStateService: AuthStateService; + let silentRenewService: SilentRenewService; + let storagePersistenceService: StoragePersistenceService; + let flowsDataService: FlowsDataService; + let refreshSessionIframeService: RefreshSessionIframeService; + let refreshSessionRefreshTokenService: RefreshSessionRefreshTokenService; + let authWellKnownService: AuthWellKnownService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + FlowHelper, + mockProvider(FlowsDataService), + RefreshSessionService, + mockProvider(LoggerService), + mockProvider(SilentRenewService), + mockProvider(AuthStateService), + mockProvider(AuthWellKnownService), + mockProvider(RefreshSessionIframeService), + mockProvider(StoragePersistenceService), + mockProvider(RefreshSessionRefreshTokenService), + mockProvider(UserService), + mockProvider(PublicEventsService), + ], + }); + }); + + beforeEach(() => { + refreshSessionService = TestBed.inject(RefreshSessionService); + flowsDataService = TestBed.inject(FlowsDataService); + flowHelper = TestBed.inject(FlowHelper); + authStateService = TestBed.inject(AuthStateService); + refreshSessionIframeService = TestBed.inject(RefreshSessionIframeService); + refreshSessionRefreshTokenService = TestBed.inject( + RefreshSessionRefreshTokenService + ); + silentRenewService = TestBed.inject(SilentRenewService); + authWellKnownService = TestBed.inject(AuthWellKnownService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + }); + + it('should create', () => { + expect(refreshSessionService).toBeTruthy(); + }); + + describe('userForceRefreshSession', () => { + it('should persist params refresh when extra custom params given and useRefreshToken is true', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const writeSpy = spyOn(storagePersistenceService, 'write'); + const allConfigs = [ + { + configId: 'configId1', + useRefreshToken: true, + silentRenewTimeoutInSeconds: 10, + }, + ]; + + const extraCustomParams = { extra: 'custom' }; + + refreshSessionService + .userForceRefreshSession(allConfigs[0], allConfigs, extraCustomParams) + .subscribe(() => { + expect(writeSpy).toHaveBeenCalledOnceWith( + 'storageCustomParamsRefresh', + extraCustomParams, + allConfigs[0] + ); + }); + })); + + it('should persist storageCustomParamsAuthRequest when extra custom params given and useRefreshToken is false', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const allConfigs = [ + { + configId: 'configId1', + useRefreshToken: false, + silentRenewTimeoutInSeconds: 10, + }, + ]; + const writeSpy = spyOn(storagePersistenceService, 'write'); + + const extraCustomParams = { extra: 'custom' }; + + refreshSessionService + .userForceRefreshSession(allConfigs[0], allConfigs, extraCustomParams) + .subscribe(() => { + expect(writeSpy).toHaveBeenCalledOnceWith( + 'storageCustomParamsAuthRequest', + extraCustomParams, + allConfigs[0] + ); + }); + })); + + it('should NOT persist customparams if no customparams are given', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + const allConfigs = [ + { + configId: 'configId1', + useRefreshToken: false, + silentRenewTimeoutInSeconds: 10, + }, + ]; + const writeSpy = spyOn(storagePersistenceService, 'write'); + + refreshSessionService + .userForceRefreshSession(allConfigs[0], allConfigs) + .subscribe(() => { + expect(writeSpy).not.toHaveBeenCalled(); + }); + })); + + it('should call resetSilentRenewRunning in case of an error', waitForAsync(() => { + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + throwError(() => new Error('error')) + ); + spyOn(flowsDataService, 'resetSilentRenewRunning'); + const allConfigs = [ + { + configId: 'configId1', + useRefreshToken: false, + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .userForceRefreshSession(allConfigs[0], allConfigs) + .subscribe({ + next: () => { + fail('It should not return any result.'); + }, + error: (error) => { + expect(error).toBeInstanceOf(Error); + }, + complete: () => { + expect( + flowsDataService.resetSilentRenewRunning + ).toHaveBeenCalledOnceWith(allConfigs[0]); + }, + }); + })); + + it('should call resetSilentRenewRunning in case of no error', waitForAsync(() => { + spyOn(refreshSessionService, 'forceRefreshSession').and.returnValue( + of({} as LoginResponse) + ); + spyOn(flowsDataService, 'resetSilentRenewRunning'); + const allConfigs = [ + { + configId: 'configId1', + useRefreshToken: false, + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .userForceRefreshSession(allConfigs[0], allConfigs) + .subscribe({ + error: () => { + fail('It should not return any error.'); + }, + complete: () => { + expect( + flowsDataService.resetSilentRenewRunning + ).toHaveBeenCalledOnceWith(allConfigs[0]); + }, + }); + })); + }); + + describe('forceRefreshSession', () => { + it('only calls start refresh session and returns idToken and accessToken if auth is true', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOn(authStateService, 'getIdToken').and.returnValue('id-token'); + spyOn(authStateService, 'getAccessToken').and.returnValue('access-token'); + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result.idToken).toEqual('id-token'); + expect(result.accessToken).toEqual('access-token'); + }); + })); + + it('only calls start refresh session and returns null if auth is false', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId: 'configId1', + }); + }); + })); + + it('calls start refresh session and waits for completed, returns idtoken and accesstoken if auth is true', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + true + ); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue( + of({ + authResult: { + id_token: 'some-id_token', + access_token: 'some-access_token', + }, + } as CallbackContext) + ); + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result.idToken).toBeDefined(); + expect(result.accessToken).toBeDefined(); + }); + })); + + it('calls start refresh session and waits for completed, returns LoginResponse if auth is false', waitForAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue(of(null)); + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId: 'configId1', + }); + }); + })); + + it('occurs timeout error and retry mechanism exhausted max retry count throws error', fakeAsync(() => { + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue(of(null).pipe(delay(11000))); + + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const expectedInvokeCount = MAX_RETRY_ATTEMPTS; + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe({ + next: () => { + fail('It should not return any result.'); + }, + error: (error) => { + expect(error).toBeInstanceOf(Error); + expect(resetSilentRenewRunningSpy).toHaveBeenCalledTimes( + expectedInvokeCount + ); + }, + }); + + tick(allConfigs[0].silentRenewTimeoutInSeconds * 10000); + })); + + it('occurs unknown error throws it to subscriber', fakeAsync(() => { + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + const expectedErrorMessage = 'Test error message'; + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue(of(null)); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(throwError(() => new Error(expectedErrorMessage))); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe({ + next: () => { + fail('It should not return any result.'); + }, + error: (error) => { + expect(error).toBeInstanceOf(Error); + expect(error.message).toEqual(`Error: ${expectedErrorMessage}`); + expect(resetSilentRenewRunningSpy).not.toHaveBeenCalled(); + }, + }); + })); + + describe('NOT isCurrentFlowCodeFlowWithRefreshTokens', () => { + it('does return null when not authenticated', waitForAsync(() => { + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOn(authStateService, 'areAuthStorageTokensValid').and.returnValue( + false + ); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue(of(null)); + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId: 'configId1', + }); + }); + })); + + it('return value only returns once', waitForAsync(() => { + const allConfigs = [ + { + configId: 'configId1', + silentRenewTimeoutInSeconds: 10, + }, + ]; + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + spyOn( + refreshSessionService as any, + 'startRefreshSession' + ).and.returnValue(of(null)); + spyOnProperty( + silentRenewService, + 'refreshSessionWithIFrameCompleted$' + ).and.returnValue( + of({ + authResult: { + id_token: 'some-id_token', + access_token: 'some-access_token', + }, + } as CallbackContext) + ); + const spyInsideMap = spyOn( + authStateService, + 'areAuthStorageTokensValid' + ).and.returnValue(true); + + refreshSessionService + .forceRefreshSession(allConfigs[0], allConfigs) + .subscribe((result) => { + expect(result).toEqual({ + idToken: 'some-id_token', + accessToken: 'some-access_token', + isAuthenticated: true, + userData: undefined, + configId: 'configId1', + }); + expect(spyInsideMap).toHaveBeenCalledTimes(1); + }); + })); + }); + }); + + describe('startRefreshSession', () => { + it('returns null if no auth well known endpoint defined', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + + (refreshSessionService as any) + .startRefreshSession() + .subscribe((result: any) => { + expect(result).toBe(null); + }); + })); + + it('returns null if silent renew Is running', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + + (refreshSessionService as any) + .startRefreshSession() + .subscribe((result: any) => { + expect(result).toBe(null); + }); + })); + + it('calls `setSilentRenewRunning` when should be executed', waitForAsync(() => { + const setSilentRenewRunningSpy = spyOn( + flowsDataService, + 'setSilentRenewRunning' + ); + const allConfigs = [ + { + configId: 'configId1', + authWellknownEndpointUrl: 'https://authWell', + }, + ]; + + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + + (refreshSessionService as any) + .startRefreshSession(allConfigs[0], allConfigs) + .subscribe(() => { + expect(setSilentRenewRunningSpy).toHaveBeenCalled(); + }); + })); + + it('calls refreshSessionWithRefreshTokens when current flow is codeflow with refresh tokens', waitForAsync(() => { + spyOn(flowsDataService, 'setSilentRenewRunning'); + const allConfigs = [ + { + configId: 'configId1', + authWellknownEndpointUrl: 'https://authWell', + }, + ]; + + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(true); + const refreshSessionWithRefreshTokensSpy = spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + + (refreshSessionService as any) + .startRefreshSession(allConfigs[0], allConfigs) + .subscribe(() => { + expect(refreshSessionWithRefreshTokensSpy).toHaveBeenCalled(); + }); + })); + + it('calls refreshSessionWithIframe when current flow is NOT codeflow with refresh tokens', waitForAsync(() => { + spyOn(flowsDataService, 'setSilentRenewRunning'); + const allConfigs = [ + { + configId: 'configId1', + authWellknownEndpointUrl: 'https://authWell', + }, + ]; + + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn( + flowHelper, + 'isCurrentFlowCodeFlowWithRefreshTokens' + ).and.returnValue(false); + const refreshSessionWithRefreshTokensSpy = spyOn( + refreshSessionRefreshTokenService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + + const refreshSessionWithIframeSpy = spyOn( + refreshSessionIframeService, + 'refreshSessionWithIframe' + ).and.returnValue(of(false)); + + (refreshSessionService as any) + .startRefreshSession(allConfigs[0], allConfigs) + .subscribe(() => { + expect(refreshSessionWithRefreshTokensSpy).not.toHaveBeenCalled(); + expect(refreshSessionWithIframeSpy).toHaveBeenCalled(); + }); + })); + }); +}); diff --git a/src/callback/refresh-session.service.ts b/src/callback/refresh-session.service.ts new file mode 100644 index 0000000..bea2425 --- /dev/null +++ b/src/callback/refresh-session.service.ts @@ -0,0 +1,245 @@ +import { inject, Injectable } from 'injection-js'; +import { + forkJoin, + Observable, + of, + throwError, + TimeoutError, + timer, +} from 'rxjs'; +import { + map, + mergeMap, + retryWhen, + switchMap, + take, + tap, + timeout, +} from 'rxjs/operators'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { AuthWellKnownService } from '../config/auth-well-known/auth-well-known.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service'; +import { SilentRenewService } from '../iframe/silent-renew.service'; +import { LoggerService } from '../logging/logger.service'; +import { LoginResponse } from '../login/login-response'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { UserService } from '../user-data/user.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service'; + +export const MAX_RETRY_ATTEMPTS = 3; + +@Injectable() +export class RefreshSessionService { + private readonly flowHelper = inject(FlowHelper); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly loggerService = inject(LoggerService); + + private readonly silentRenewService = inject(SilentRenewService); + + private readonly authStateService = inject(AuthStateService); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + private readonly refreshSessionIframeService = inject( + RefreshSessionIframeService + ); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly refreshSessionRefreshTokenService = inject( + RefreshSessionRefreshTokenService + ); + + private readonly userService = inject(UserService); + + userForceRefreshSession( + config: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[], + extraCustomParams?: { [key: string]: string | number | boolean } + ): Observable { + if (!config) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + this.persistCustomParams(extraCustomParams, config); + + return this.forceRefreshSession(config, allConfigs, extraCustomParams).pipe( + tap(() => this.flowsDataService.resetSilentRenewRunning(config)) + ); + } + + forceRefreshSession( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + extraCustomParams?: { [key: string]: string | number | boolean } + ): Observable { + const { customParamsRefreshTokenRequest, configId } = config; + const mergedParams = { + ...customParamsRefreshTokenRequest, + ...extraCustomParams, + }; + + if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) { + return this.startRefreshSession(config, allConfigs, mergedParams).pipe( + map(() => { + const isAuthenticated = + this.authStateService.areAuthStorageTokensValid(config); + + if (isAuthenticated) { + return { + idToken: this.authStateService.getIdToken(config), + accessToken: this.authStateService.getAccessToken(config), + userData: this.userService.getUserDataFromStore(config), + isAuthenticated, + configId, + } as LoginResponse; + } + + return { + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId, + }; + }) + ); + } + + const { silentRenewTimeoutInSeconds } = config; + const timeOutTime = (silentRenewTimeoutInSeconds ?? 0) * 1000; + + return forkJoin([ + this.startRefreshSession(config, allConfigs, extraCustomParams), + this.silentRenewService.refreshSessionWithIFrameCompleted$.pipe(take(1)), + ]).pipe( + timeout(timeOutTime), + retryWhen((errors) => { + return errors.pipe( + mergeMap((error, index) => { + const scalingDuration = 1000; + const currentAttempt = index + 1; + + if ( + !(error instanceof TimeoutError) || + currentAttempt > MAX_RETRY_ATTEMPTS + ) { + return throwError(() => new Error(error)); + } + + this.loggerService.logDebug( + config, + `forceRefreshSession timeout. Attempt #${currentAttempt}` + ); + + this.flowsDataService.resetSilentRenewRunning(config); + + return timer(currentAttempt * scalingDuration); + }) + ); + }), + map(([_, callbackContext]) => { + const isAuthenticated = + this.authStateService.areAuthStorageTokensValid(config); + + if (isAuthenticated) { + return { + idToken: callbackContext?.authResult?.id_token ?? '', + accessToken: callbackContext?.authResult?.access_token ?? '', + userData: this.userService.getUserDataFromStore(config), + isAuthenticated, + configId, + }; + } + + return { + isAuthenticated: false, + errorMessage: '', + userData: null, + idToken: '', + accessToken: '', + configId, + }; + }) + ); + } + + private persistCustomParams( + extraCustomParams: { [key: string]: string | number | boolean } | undefined, + config: OpenIdConfiguration + ): void { + const { useRefreshToken } = config; + + if (extraCustomParams) { + if (useRefreshToken) { + this.storagePersistenceService.write( + 'storageCustomParamsRefresh', + extraCustomParams, + config + ); + } else { + this.storagePersistenceService.write( + 'storageCustomParamsAuthRequest', + extraCustomParams, + config + ); + } + } + } + + private startRefreshSession( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + extraCustomParams?: { [key: string]: string | number | boolean } + ): Observable { + const isSilentRenewRunning = + this.flowsDataService.isSilentRenewRunning(config); + + this.loggerService.logDebug( + config, + `Checking: silentRenewRunning: ${isSilentRenewRunning}` + ); + const shouldBeExecuted = !isSilentRenewRunning; + + if (!shouldBeExecuted) { + return of(null); + } + + return this.authWellKnownService + .queryAndStoreAuthWellKnownEndPoints(config) + .pipe( + switchMap(() => { + this.flowsDataService.setSilentRenewRunning(config); + + if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) { + // Refresh Session using Refresh tokens + return this.refreshSessionRefreshTokenService.refreshSessionWithRefreshTokens( + config, + allConfigs, + extraCustomParams + ); + } + + return this.refreshSessionIframeService.refreshSessionWithIframe( + config, + allConfigs, + extraCustomParams + ); + }) + ); + } +} diff --git a/src/config/auth-well-known/auth-well-known-data.service.spec.ts b/src/config/auth-well-known/auth-well-known-data.service.spec.ts new file mode 100644 index 0000000..383f906 --- /dev/null +++ b/src/config/auth-well-known/auth-well-known-data.service.spec.ts @@ -0,0 +1,237 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { createRetriableStream } from '../../../test/create-retriable-stream.helper'; +import { DataService } from '../../api/data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { AuthWellKnownDataService } from './auth-well-known-data.service'; +import { AuthWellKnownEndpoints } from './auth-well-known-endpoints'; + +const DUMMY_WELL_KNOWN_DOCUMENT = { + issuer: 'https://identity-server.test/realms/main', + authorization_endpoint: + 'https://identity-server.test/realms/main/protocol/openid-connect/auth', + token_endpoint: + 'https://identity-server.test/realms/main/protocol/openid-connect/token', + userinfo_endpoint: + 'https://identity-server.test/realms/main/protocol/openid-connect/userinfo', + end_session_endpoint: + 'https://identity-server.test/realms/main/master/protocol/openid-connect/logout', + jwks_uri: + 'https://identity-server.test/realms/main/protocol/openid-connect/certs', + check_session_iframe: + 'https://identity-server.test/realms/main/protocol/openid-connect/login-status-iframe.html', + introspection_endpoint: + 'https://identity-server.test/realms/main/protocol/openid-connect/token/introspect', +}; + +describe('AuthWellKnownDataService', () => { + let service: AuthWellKnownDataService; + let dataService: DataService; + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + AuthWellKnownDataService, + mockProvider(DataService), + mockProvider(LoggerService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(AuthWellKnownDataService); + loggerService = TestBed.inject(LoggerService); + dataService = TestBed.inject(DataService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getWellKnownDocument', () => { + it('should add suffix if it does not exist on current URL', waitForAsync(() => { + const dataServiceSpy = spyOn(dataService, 'get').and.returnValue( + of(null) + ); + const urlWithoutSuffix = 'myUrl'; + const urlWithSuffix = `${urlWithoutSuffix}/.well-known/openid-configuration`; + + (service as any) + .getWellKnownDocument(urlWithoutSuffix, { configId: 'configId1' }) + .subscribe(() => { + expect(dataServiceSpy).toHaveBeenCalledOnceWith(urlWithSuffix, { + configId: 'configId1', + }); + }); + })); + + it('should not add suffix if it does exist on current url', waitForAsync(() => { + const dataServiceSpy = spyOn(dataService, 'get').and.returnValue( + of(null) + ); + const urlWithSuffix = `myUrl/.well-known/openid-configuration`; + + (service as any) + .getWellKnownDocument(urlWithSuffix, { configId: 'configId1' }) + .subscribe(() => { + expect(dataServiceSpy).toHaveBeenCalledOnceWith(urlWithSuffix, { + configId: 'configId1', + }); + }); + })); + + it('should not add suffix if it does exist in the middle of current url', waitForAsync(() => { + const dataServiceSpy = spyOn(dataService, 'get').and.returnValue( + of(null) + ); + const urlWithSuffix = `myUrl/.well-known/openid-configuration/and/some/more/stuff`; + + (service as any) + .getWellKnownDocument(urlWithSuffix, { configId: 'configId1' }) + .subscribe(() => { + expect(dataServiceSpy).toHaveBeenCalledOnceWith(urlWithSuffix, { + configId: 'configId1', + }); + }); + })); + + it('should use the custom suffix provided in the config', waitForAsync(() => { + const dataServiceSpy = spyOn(dataService, 'get').and.returnValue( + of(null) + ); + const urlWithoutSuffix = `myUrl`; + const urlWithSuffix = `${urlWithoutSuffix}/.well-known/test-openid-configuration`; + + (service as any) + .getWellKnownDocument(urlWithoutSuffix, { + configId: 'configId1', + authWellknownUrlSuffix: '/.well-known/test-openid-configuration', + }) + .subscribe(() => { + expect(dataServiceSpy).toHaveBeenCalledOnceWith(urlWithSuffix, { + configId: 'configId1', + authWellknownUrlSuffix: '/.well-known/test-openid-configuration', + }); + }); + })); + + it('should retry once', waitForAsync(() => { + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('one')), + of(DUMMY_WELL_KNOWN_DOCUMENT) + ) + ); + + (service as any) + .getWellKnownDocument('anyurl', { configId: 'configId1' }) + .subscribe({ + next: (res: unknown) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_WELL_KNOWN_DOCUMENT); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('one')), + throwError(() => new Error('two')), + of(DUMMY_WELL_KNOWN_DOCUMENT) + ) + ); + + (service as any) + .getWellKnownDocument('anyurl', { configId: 'configId1' }) + .subscribe({ + next: (res: any) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_WELL_KNOWN_DOCUMENT); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('one')), + throwError(() => new Error('two')), + throwError(() => new Error('three')), + of(DUMMY_WELL_KNOWN_DOCUMENT) + ) + ); + + (service as any).getWellKnownDocument('anyurl', 'configId').subscribe({ + error: (err: unknown) => { + expect(err).toBeTruthy(); + }, + }); + })); + }); + + describe('getWellKnownEndPointsForConfig', () => { + it('calling internal getWellKnownDocument and maps', waitForAsync(() => { + spyOn(dataService, 'get').and.returnValue(of({ jwks_uri: 'jwks_uri' })); + + const spy = spyOn( + service as any, + 'getWellKnownDocument' + ).and.callThrough(); + + service + .getWellKnownEndPointsForConfig({ + configId: 'configId1', + authWellknownEndpointUrl: 'any-url', + }) + .subscribe((result) => { + expect(spy).toHaveBeenCalled(); + expect((result as any).jwks_uri).toBeUndefined(); + expect(result.jwksUri).toBe('jwks_uri'); + }); + })); + + it('throws error and logs if no authwellknownUrl is given', waitForAsync(() => { + const loggerSpy = spyOn(loggerService, 'logError'); + const config = { + configId: 'configId1', + authWellknownEndpointUrl: undefined, + }; + + service.getWellKnownEndPointsForConfig(config).subscribe({ + error: (error) => { + expect(loggerSpy).toHaveBeenCalledOnceWith( + config, + 'no authWellknownEndpoint given!' + ); + expect(error.message).toEqual('no authWellknownEndpoint given!'); + }, + }); + })); + + it('should merge the mapped endpoints with the provided endpoints', waitForAsync(() => { + spyOn(dataService, 'get').and.returnValue(of(DUMMY_WELL_KNOWN_DOCUMENT)); + + const expected: AuthWellKnownEndpoints = { + endSessionEndpoint: 'config-endSessionEndpoint', + revocationEndpoint: 'config-revocationEndpoint', + jwksUri: DUMMY_WELL_KNOWN_DOCUMENT.jwks_uri, + }; + + service + .getWellKnownEndPointsForConfig({ + configId: 'configId1', + authWellknownEndpointUrl: 'any-url', + authWellknownEndpoints: { + endSessionEndpoint: 'config-endSessionEndpoint', + revocationEndpoint: 'config-revocationEndpoint', + }, + }) + .subscribe((result) => { + expect(result).toEqual(jasmine.objectContaining(expected)); + }); + })); + }); +}); diff --git a/src/config/auth-well-known/auth-well-known-data.service.ts b/src/config/auth-well-known/auth-well-known-data.service.ts new file mode 100644 index 0000000..426e7c1 --- /dev/null +++ b/src/config/auth-well-known/auth-well-known-data.service.ts @@ -0,0 +1,68 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, throwError } from 'rxjs'; +import { map, retry } from 'rxjs/operators'; +import { DataService } from '../../api/data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { OpenIdConfiguration } from '../openid-configuration'; +import { AuthWellKnownEndpoints } from './auth-well-known-endpoints'; + +const WELL_KNOWN_SUFFIX = `/.well-known/openid-configuration`; + +@Injectable() +export class AuthWellKnownDataService { + private readonly loggerService = inject(LoggerService); + + private readonly http = inject(DataService); + + getWellKnownEndPointsForConfig( + config: OpenIdConfiguration + ): Observable { + const { authWellknownEndpointUrl, authWellknownEndpoints = {} } = config; + + if (!authWellknownEndpointUrl) { + const errorMessage = 'no authWellknownEndpoint given!'; + + this.loggerService.logError(config, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + + return this.getWellKnownDocument(authWellknownEndpointUrl, config).pipe( + map( + (wellKnownEndpoints) => + ({ + issuer: wellKnownEndpoints.issuer, + jwksUri: wellKnownEndpoints.jwks_uri, + authorizationEndpoint: wellKnownEndpoints.authorization_endpoint, + tokenEndpoint: wellKnownEndpoints.token_endpoint, + userInfoEndpoint: wellKnownEndpoints.userinfo_endpoint, + endSessionEndpoint: wellKnownEndpoints.end_session_endpoint, + checkSessionIframe: wellKnownEndpoints.check_session_iframe, + revocationEndpoint: wellKnownEndpoints.revocation_endpoint, + introspectionEndpoint: wellKnownEndpoints.introspection_endpoint, + parEndpoint: + wellKnownEndpoints.pushed_authorization_request_endpoint, + } as AuthWellKnownEndpoints) + ), + map((mappedWellKnownEndpoints) => ({ + ...mappedWellKnownEndpoints, + ...authWellknownEndpoints, + })) + ); + } + + private getWellKnownDocument( + wellKnownEndpoint: string, + config: OpenIdConfiguration + ): Observable { + let url = wellKnownEndpoint; + + const wellKnownSuffix = config.authWellknownUrlSuffix || WELL_KNOWN_SUFFIX; + + if (!wellKnownEndpoint.includes(wellKnownSuffix)) { + url = `${wellKnownEndpoint}${wellKnownSuffix}`; + } + + return this.http.get(url, config).pipe(retry(2)); + } +} diff --git a/src/config/auth-well-known/auth-well-known-endpoints.ts b/src/config/auth-well-known/auth-well-known-endpoints.ts new file mode 100644 index 0000000..e30862c --- /dev/null +++ b/src/config/auth-well-known/auth-well-known-endpoints.ts @@ -0,0 +1,12 @@ +export interface AuthWellKnownEndpoints { + issuer?: string; + jwksUri?: string; + authorizationEndpoint?: string; + tokenEndpoint?: string; + userInfoEndpoint?: string; + endSessionEndpoint?: string; + checkSessionIframe?: string; + revocationEndpoint?: string; + introspectionEndpoint?: string; + parEndpoint?: string; +} diff --git a/src/config/auth-well-known/auth-well-known.service.spec.ts b/src/config/auth-well-known/auth-well-known.service.spec.ts new file mode 100644 index 0000000..099d93e --- /dev/null +++ b/src/config/auth-well-known/auth-well-known.service.spec.ts @@ -0,0 +1,110 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { EventTypes } from '../../public-events/event-types'; +import { PublicEventsService } from '../../public-events/public-events.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { AuthWellKnownDataService } from './auth-well-known-data.service'; +import { AuthWellKnownService } from './auth-well-known.service'; + +describe('AuthWellKnownService', () => { + let service: AuthWellKnownService; + let dataService: AuthWellKnownDataService; + let storagePersistenceService: StoragePersistenceService; + let publicEventsService: PublicEventsService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + AuthWellKnownService, + PublicEventsService, + mockProvider(AuthWellKnownDataService), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(AuthWellKnownService); + dataService = TestBed.inject(AuthWellKnownDataService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + publicEventsService = TestBed.inject(PublicEventsService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getAuthWellKnownEndPoints', () => { + it('getAuthWellKnownEndPoints throws an error if not config provided', waitForAsync(() => { + service.queryAndStoreAuthWellKnownEndPoints(null).subscribe({ + error: (error) => { + expect(error).toEqual( + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + }, + }); + })); + + it('getAuthWellKnownEndPoints calls always dataservice', waitForAsync(() => { + const dataServiceSpy = spyOn( + dataService, + 'getWellKnownEndPointsForConfig' + ).and.returnValue(of({ issuer: 'anything' })); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ issuer: 'anything' }); + + service + .queryAndStoreAuthWellKnownEndPoints({ configId: 'configId1' }) + .subscribe((result) => { + expect(storagePersistenceService.read).not.toHaveBeenCalled(); + expect(dataServiceSpy).toHaveBeenCalled(); + expect(result).toEqual({ issuer: 'anything' }); + }); + })); + + it('getAuthWellKnownEndPoints stored the result if http call is made', waitForAsync(() => { + const dataServiceSpy = spyOn( + dataService, + 'getWellKnownEndPointsForConfig' + ).and.returnValue(of({ issuer: 'anything' })); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue(null); + const storeSpy = spyOn(service, 'storeWellKnownEndpoints'); + + service + .queryAndStoreAuthWellKnownEndPoints({ configId: 'configId1' }) + .subscribe((result) => { + expect(dataServiceSpy).toHaveBeenCalled(); + expect(storeSpy).toHaveBeenCalled(); + expect(result).toEqual({ issuer: 'anything' }); + }); + })); + + it('throws `ConfigLoadingFailed` event when error happens from http', waitForAsync(() => { + spyOn(dataService, 'getWellKnownEndPointsForConfig').and.returnValue( + throwError(() => new Error('error')) + ); + const publicEventsServiceSpy = spyOn(publicEventsService, 'fireEvent'); + + service + .queryAndStoreAuthWellKnownEndPoints({ configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + expect(publicEventsServiceSpy).toHaveBeenCalledTimes(1); + expect(publicEventsServiceSpy).toHaveBeenCalledOnceWith( + EventTypes.ConfigLoadingFailed, + null + ); + }, + }); + })); + }); +}); diff --git a/src/config/auth-well-known/auth-well-known.service.ts b/src/config/auth-well-known/auth-well-known.service.ts new file mode 100644 index 0000000..d041763 --- /dev/null +++ b/src/config/auth-well-known/auth-well-known.service.ts @@ -0,0 +1,58 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, throwError } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; +import { EventTypes } from '../../public-events/event-types'; +import { PublicEventsService } from '../../public-events/public-events.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { OpenIdConfiguration } from '../openid-configuration'; +import { AuthWellKnownDataService } from './auth-well-known-data.service'; +import { AuthWellKnownEndpoints } from './auth-well-known-endpoints'; + +@Injectable() +export class AuthWellKnownService { + private readonly dataService = inject(AuthWellKnownDataService); + + private readonly publicEventsService = inject(PublicEventsService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + storeWellKnownEndpoints( + config: OpenIdConfiguration, + mappedWellKnownEndpoints: AuthWellKnownEndpoints + ): void { + this.storagePersistenceService.write( + 'authWellKnownEndPoints', + mappedWellKnownEndpoints, + config + ); + } + + queryAndStoreAuthWellKnownEndPoints( + config: OpenIdConfiguration | null + ): Observable { + if (!config) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + return this.dataService.getWellKnownEndPointsForConfig(config).pipe( + tap((mappedWellKnownEndpoints) => + this.storeWellKnownEndpoints(config, mappedWellKnownEndpoints) + ), + catchError((error) => { + this.publicEventsService.fireEvent( + EventTypes.ConfigLoadingFailed, + null + ); + + return throwError(() => new Error(error)); + }) + ); + } +} diff --git a/src/config/config.service.spec.ts b/src/config/config.service.spec.ts new file mode 100644 index 0000000..394543e --- /dev/null +++ b/src/config/config.service.spec.ts @@ -0,0 +1,290 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockAbstractProvider, mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { PlatformProvider } from '../utils/platform-provider/platform.provider'; +import { AuthWellKnownService } from './auth-well-known/auth-well-known.service'; +import { ConfigurationService } from './config.service'; +import { StsConfigLoader, StsConfigStaticLoader } from './loader/config-loader'; +import { OpenIdConfiguration } from './openid-configuration'; +import { ConfigValidationService } from './validation/config-validation.service'; + +describe('Configuration Service', () => { + let configService: ConfigurationService; + let publicEventsService: PublicEventsService; + let authWellKnownService: AuthWellKnownService; + let storagePersistenceService: StoragePersistenceService; + let configValidationService: ConfigValidationService; + let platformProvider: PlatformProvider; + let stsConfigLoader: StsConfigLoader; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ConfigurationService, + mockProvider(LoggerService), + PublicEventsService, + mockProvider(StoragePersistenceService), + ConfigValidationService, + mockProvider(PlatformProvider), + mockProvider(AuthWellKnownService), + mockAbstractProvider(StsConfigLoader, StsConfigStaticLoader), + ], + }); + }); + + beforeEach(() => { + configService = TestBed.inject(ConfigurationService); + publicEventsService = TestBed.inject(PublicEventsService); + authWellKnownService = TestBed.inject(AuthWellKnownService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + stsConfigLoader = TestBed.inject(StsConfigLoader); + platformProvider = TestBed.inject(PlatformProvider); + configValidationService = TestBed.inject(ConfigValidationService); + }); + + it('should create', () => { + expect(configService).toBeTruthy(); + }); + + describe('hasManyConfigs', () => { + it('returns true if many configs are stored', () => { + (configService as any).configsInternal = { + configId1: { configId: 'configId1' }, + configId2: { configId: 'configId2' }, + }; + + const result = configService.hasManyConfigs(); + + expect(result).toBe(true); + }); + + it('returns false if only one config is stored', () => { + (configService as any).configsInternal = { + configId1: { configId: 'configId1' }, + }; + + const result = configService.hasManyConfigs(); + + expect(result).toBe(false); + }); + }); + + describe('getAllConfigurations', () => { + it('returns all configs as array', () => { + (configService as any).configsInternal = { + configId1: { configId: 'configId1' }, + configId2: { configId: 'configId2' }, + }; + + const result = configService.getAllConfigurations(); + + expect(Array.isArray(result)).toBe(true); + expect(result.length).toBe(2); + }); + }); + + describe('getOpenIDConfiguration', () => { + it(`if config is already saved 'loadConfigs' is not called`, waitForAsync(() => { + (configService as any).configsInternal = { + configId1: { configId: 'configId1' }, + configId2: { configId: 'configId2' }, + }; + const spy = spyOn(configService as any, 'loadConfigs'); + + configService.getOpenIDConfiguration('configId1').subscribe((config) => { + expect(config).toBeTruthy(); + expect(spy).not.toHaveBeenCalled(); + }); + })); + + it(`if config is NOT already saved 'loadConfigs' is called`, waitForAsync(() => { + const configs = [{ configId: 'configId1' }, { configId: 'configId2' }]; + const spy = spyOn(configService as any, 'loadConfigs').and.returnValue( + of(configs) + ); + + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + + configService.getOpenIDConfiguration('configId1').subscribe((config) => { + expect(config).toBeTruthy(); + expect(spy).toHaveBeenCalled(); + }); + })); + + it(`returns null if config is not valid`, waitForAsync(() => { + const configs = [{ configId: 'configId1' }]; + + spyOn(configService as any, 'loadConfigs').and.returnValue(of(configs)); + spyOn(configValidationService, 'validateConfig').and.returnValue(false); + const consoleSpy = spyOn(console, 'warn'); + + configService.getOpenIDConfiguration('configId1').subscribe((config) => { + expect(config).toBeNull(); + expect(consoleSpy).toHaveBeenCalledOnceWith(`[angular-auth-oidc-client] No configuration found for config id 'configId1'.`) + }); + })); + + it(`returns null if configs are stored but not existing ID is passed`, waitForAsync(() => { + (configService as any).configsInternal = { + configId1: { configId: 'configId1' }, + configId2: { configId: 'configId2' }, + }; + + configService + .getOpenIDConfiguration('notExisting') + .subscribe((config) => { + expect(config).toBeNull(); + }); + })); + + it(`sets authWellKnownEndPoints on config if authWellKnownEndPoints is stored`, waitForAsync(() => { + const configs = [{ configId: 'configId1' }]; + + spyOn(configService as any, 'loadConfigs').and.returnValue(of(configs)); + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + const consoleSpy = spyOn(console, 'warn'); + + spyOn(storagePersistenceService, 'read').and.returnValue({ + issuer: 'auth-well-known', + }); + + configService.getOpenIDConfiguration('configId1').subscribe((config) => { + expect(config?.authWellknownEndpoints).toEqual({ + issuer: 'auth-well-known', + }); + expect(consoleSpy).not.toHaveBeenCalled() + }); + })); + + it(`fires ConfigLoaded if authWellKnownEndPoints is stored`, waitForAsync(() => { + const configs = [{ configId: 'configId1' }]; + + spyOn(configService as any, 'loadConfigs').and.returnValue(of(configs)); + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + spyOn(storagePersistenceService, 'read').and.returnValue({ + issuer: 'auth-well-known', + }); + + const spy = spyOn(publicEventsService, 'fireEvent'); + + configService.getOpenIDConfiguration('configId1').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + EventTypes.ConfigLoaded, + jasmine.anything() + ); + }); + })); + + it(`stores, uses and fires event when authwellknownendpoints are passed`, waitForAsync(() => { + const configs = [ + { + configId: 'configId1', + authWellknownEndpoints: { issuer: 'auth-well-known' }, + }, + ]; + + spyOn(configService as any, 'loadConfigs').and.returnValue(of(configs)); + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + spyOn(storagePersistenceService, 'read').and.returnValue(null); + + const fireEventSpy = spyOn(publicEventsService, 'fireEvent'); + const storeWellKnownEndpointsSpy = spyOn( + authWellKnownService, + 'storeWellKnownEndpoints' + ); + + configService.getOpenIDConfiguration('configId1').subscribe((config) => { + expect(config).toBeTruthy(); + expect(fireEventSpy).toHaveBeenCalledOnceWith( + EventTypes.ConfigLoaded, + jasmine.anything() + ); + expect(storeWellKnownEndpointsSpy).toHaveBeenCalledOnceWith( + config as OpenIdConfiguration, + { + issuer: 'auth-well-known', + } + ); + }); + })); + }); + + describe('getOpenIDConfigurations', () => { + it(`returns correct result`, waitForAsync(() => { + spyOn(stsConfigLoader, 'loadConfigs').and.returnValue( + of([ + { configId: 'configId1' } as OpenIdConfiguration, + { configId: 'configId2' } as OpenIdConfiguration, + ]) + ); + + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + + configService.getOpenIDConfigurations('configId1').subscribe((result) => { + expect(result.allConfigs.length).toEqual(2); + expect(result.currentConfig).toBeTruthy(); + }); + })); + + it(`created configId when configId is not set`, waitForAsync(() => { + spyOn(stsConfigLoader, 'loadConfigs').and.returnValue( + of([ + { clientId: 'clientId1' } as OpenIdConfiguration, + { clientId: 'clientId2' } as OpenIdConfiguration, + ]) + ); + + spyOn(configValidationService, 'validateConfig').and.returnValue(true); + + configService.getOpenIDConfigurations().subscribe((result) => { + expect(result.allConfigs.length).toEqual(2); + const allConfigIds = result.allConfigs.map((x) => x.configId); + + expect(allConfigIds).toEqual(['0-clientId1', '1-clientId2']); + + expect(result.currentConfig).toBeTruthy(); + expect(result.currentConfig?.configId).toBeTruthy(); + }); + })); + + it(`returns empty array if config is not valid`, waitForAsync(() => { + spyOn(stsConfigLoader, 'loadConfigs').and.returnValue( + of([ + { configId: 'configId1' } as OpenIdConfiguration, + { configId: 'configId2' } as OpenIdConfiguration, + ]) + ); + + spyOn(configValidationService, 'validateConfigs').and.returnValue(false); + + configService + .getOpenIDConfigurations() + .subscribe(({ allConfigs, currentConfig }) => { + expect(allConfigs).toEqual([]); + expect(currentConfig).toBeNull(); + }); + })); + }); + + describe('setSpecialCases', () => { + it(`should set special cases when current platform is browser`, () => { + spyOn(platformProvider, 'isBrowser').and.returnValue(false); + + const config = { configId: 'configId1' } as OpenIdConfiguration; + + (configService as any).setSpecialCases(config); + + expect(config).toEqual({ + configId: 'configId1', + startCheckSession: false, + silentRenew: false, + useRefreshToken: false, + usePushedAuthorisationRequests: false, + }); + }); + }); +}); diff --git a/src/config/config.service.ts b/src/config/config.service.ts new file mode 100644 index 0000000..440ba89 --- /dev/null +++ b/src/config/config.service.ts @@ -0,0 +1,208 @@ +import {inject, Injectable, isDevMode} from 'injection-js'; +import { forkJoin, Observable, of } from 'rxjs'; +import { concatMap, map } from 'rxjs/operators'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { PlatformProvider } from '../utils/platform-provider/platform.provider'; +import { AuthWellKnownService } from './auth-well-known/auth-well-known.service'; +import { DEFAULT_CONFIG } from './default-config'; +import { StsConfigLoader } from './loader/config-loader'; +import { OpenIdConfiguration } from './openid-configuration'; +import { ConfigValidationService } from './validation/config-validation.service'; + +@Injectable() +export class ConfigurationService { + private readonly loggerService = inject(LoggerService); + + private readonly publicEventsService = inject(PublicEventsService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly platformProvider = inject(PlatformProvider); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + private readonly loader = inject(StsConfigLoader); + + private readonly configValidationService = inject(ConfigValidationService); + + private configsInternal: Record = {}; + + hasManyConfigs(): boolean { + return Object.keys(this.configsInternal).length > 1; + } + + getAllConfigurations(): OpenIdConfiguration[] { + return Object.values(this.configsInternal); + } + + getOpenIDConfiguration( + configId?: string + ): Observable { + if (this.configsAlreadySaved()) { + return of(this.getConfig(configId)); + } + + return this.getOpenIDConfigurations(configId).pipe( + map((result) => result.currentConfig) + ); + } + + getOpenIDConfigurations(configId?: string): Observable<{ + allConfigs: OpenIdConfiguration[]; + currentConfig: OpenIdConfiguration | null; + }> { + return this.loadConfigs().pipe( + concatMap((allConfigs) => this.prepareAndSaveConfigs(allConfigs)), + map((allPreparedConfigs) => ({ + allConfigs: allPreparedConfigs, + currentConfig: this.getConfig(configId), + })) + ); + } + + hasAtLeastOneConfig(): boolean { + return Object.keys(this.configsInternal).length > 0; + } + + private saveConfig(readyConfig: OpenIdConfiguration): void { + const { configId } = readyConfig; + + this.configsInternal[configId as string] = readyConfig; + } + + private loadConfigs(): Observable { + return this.loader.loadConfigs(); + } + + private configsAlreadySaved(): boolean { + return this.hasAtLeastOneConfig(); + } + + private getConfig(configId?: string): OpenIdConfiguration | null { + if (Boolean(configId)) { + const config = this.configsInternal[configId!]; + + if(!config && isDevMode()) { + console.warn(`[angular-auth-oidc-client] No configuration found for config id '${configId}'.`); + } + + return config || null; + } + + const [, value] = Object.entries(this.configsInternal)[0] || [[null, null]]; + + return value || null; + } + + private prepareAndSaveConfigs( + passedConfigs: OpenIdConfiguration[] + ): Observable { + if (!this.configValidationService.validateConfigs(passedConfigs)) { + return of([]); + } + + this.createUniqueIds(passedConfigs); + + const allHandleConfigs$ = passedConfigs.map((x) => this.handleConfig(x)); + const as = forkJoin(allHandleConfigs$).pipe( + map((config) => config.filter((conf) => Boolean(conf))), + map((c) => c as OpenIdConfiguration[]) + ); + + return as; + } + + private createUniqueIds(passedConfigs: OpenIdConfiguration[]): void { + passedConfigs.forEach((config, index) => { + if (!config.configId) { + config.configId = `${index}-${config.clientId}`; + } + }); + } + + private handleConfig( + passedConfig: OpenIdConfiguration + ): Observable { + if (!this.configValidationService.validateConfig(passedConfig)) { + this.loggerService.logError( + passedConfig, + 'Validation of config rejected with errors. Config is NOT set.' + ); + + return of(null); + } + + if (!passedConfig.authWellknownEndpointUrl) { + passedConfig.authWellknownEndpointUrl = passedConfig.authority; + } + + const usedConfig = this.prepareConfig(passedConfig); + + this.saveConfig(usedConfig); + + const configWithAuthWellKnown = + this.enhanceConfigWithWellKnownEndpoint(usedConfig); + + this.publicEventsService.fireEvent( + EventTypes.ConfigLoaded, + configWithAuthWellKnown + ); + + return of(usedConfig); + } + + private enhanceConfigWithWellKnownEndpoint( + configuration: OpenIdConfiguration + ): OpenIdConfiguration { + const alreadyExistingAuthWellKnownEndpoints = + this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (!!alreadyExistingAuthWellKnownEndpoints) { + configuration.authWellknownEndpoints = + alreadyExistingAuthWellKnownEndpoints; + + return configuration; + } + + const passedAuthWellKnownEndpoints = configuration.authWellknownEndpoints; + + if (!!passedAuthWellKnownEndpoints) { + this.authWellKnownService.storeWellKnownEndpoints( + configuration, + passedAuthWellKnownEndpoints + ); + configuration.authWellknownEndpoints = passedAuthWellKnownEndpoints; + + return configuration; + } + + return configuration; + } + + private prepareConfig( + configuration: OpenIdConfiguration + ): OpenIdConfiguration { + const openIdConfigurationInternal = { ...DEFAULT_CONFIG, ...configuration }; + + this.setSpecialCases(openIdConfigurationInternal); + + return openIdConfigurationInternal; + } + + private setSpecialCases(currentConfig: OpenIdConfiguration): void { + if (!this.platformProvider.isBrowser()) { + currentConfig.startCheckSession = false; + currentConfig.silentRenew = false; + currentConfig.useRefreshToken = false; + currentConfig.usePushedAuthorisationRequests = false; + } + } +} diff --git a/src/config/default-config.ts b/src/config/default-config.ts new file mode 100644 index 0000000..fd8900b --- /dev/null +++ b/src/config/default-config.ts @@ -0,0 +1,43 @@ +import { LogLevel } from '../logging/log-level'; +import { OpenIdConfiguration } from './openid-configuration'; + +export const DEFAULT_CONFIG: OpenIdConfiguration = { + authority: 'https://please_set', + authWellknownEndpointUrl: '', + authWellknownEndpoints: undefined, + redirectUrl: 'https://please_set', + checkRedirectUrlWhenCheckingIfIsCallback: true, + clientId: 'please_set', + responseType: 'code', + scope: 'openid email profile', + hdParam: '', + postLogoutRedirectUri: 'https://please_set', + startCheckSession: false, + silentRenew: false, + silentRenewUrl: 'https://please_set', + silentRenewTimeoutInSeconds: 20, + renewTimeBeforeTokenExpiresInSeconds: 0, + useRefreshToken: false, + usePushedAuthorisationRequests: false, + ignoreNonceAfterRefresh: false, + postLoginRoute: '/', + forbiddenRoute: '/forbidden', + unauthorizedRoute: '/unauthorized', + autoUserInfo: true, + autoCleanStateAfterAuthentication: true, + triggerAuthorizationResultEvent: false, + logLevel: LogLevel.Warn, + issValidationOff: false, + historyCleanupOff: false, + maxIdTokenIatOffsetAllowedInSeconds: 120, + disableIatOffsetValidation: false, + customParamsAuthRequest: {}, + customParamsRefreshTokenRequest: {}, + customParamsEndSessionRequest: {}, + customParamsCodeRequest: {}, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + tokenRefreshInSeconds: 4, + refreshTokenRetryInSeconds: 3, + ngswBypass: false, +}; diff --git a/src/config/loader/config-loader.spec.ts b/src/config/loader/config-loader.spec.ts new file mode 100644 index 0000000..3ee4514 --- /dev/null +++ b/src/config/loader/config-loader.spec.ts @@ -0,0 +1,86 @@ +import { waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { OpenIdConfiguration } from '../openid-configuration'; +import { StsConfigHttpLoader, StsConfigStaticLoader } from './config-loader'; + +describe('ConfigLoader', () => { + describe('StsConfigStaticLoader', () => { + describe('loadConfigs', () => { + it('returns an array if an array is passed', waitForAsync(() => { + const toPass = [ + { configId: 'configId1' } as OpenIdConfiguration, + { configId: 'configId2' } as OpenIdConfiguration, + ]; + + const loader = new StsConfigStaticLoader(toPass); + + const result$ = loader.loadConfigs(); + + result$.subscribe((result) => { + expect(Array.isArray(result)).toBeTrue(); + }); + })); + + it('returns an array if only one config is passed', waitForAsync(() => { + const loader = new StsConfigStaticLoader({ + configId: 'configId1', + } as OpenIdConfiguration); + + const result$ = loader.loadConfigs(); + + result$.subscribe((result) => { + expect(Array.isArray(result)).toBeTrue(); + }); + })); + }); + }); + + describe('StsConfigHttpLoader', () => { + describe('loadConfigs', () => { + it('returns an array if an array of observables is passed', waitForAsync(() => { + const toPass = [ + of({ configId: 'configId1' } as OpenIdConfiguration), + of({ configId: 'configId2' } as OpenIdConfiguration), + ]; + const loader = new StsConfigHttpLoader(toPass); + + const result$ = loader.loadConfigs(); + + result$.subscribe((result) => { + expect(Array.isArray(result)).toBeTrue(); + expect(result[0].configId).toBe('configId1'); + expect(result[1].configId).toBe('configId2'); + }); + })); + + it('returns an array if an observable with a config array is passed', waitForAsync(() => { + const toPass = of([ + { configId: 'configId1' } as OpenIdConfiguration, + { configId: 'configId2' } as OpenIdConfiguration, + ]); + const loader = new StsConfigHttpLoader(toPass); + + const result$ = loader.loadConfigs(); + + result$.subscribe((result) => { + expect(Array.isArray(result)).toBeTrue(); + expect(result[0].configId).toBe('configId1'); + expect(result[1].configId).toBe('configId2'); + }); + })); + + it('returns an array if only one config is passed', waitForAsync(() => { + const loader = new StsConfigHttpLoader( + of({ configId: 'configId1' } as OpenIdConfiguration) + ); + + const result$ = loader.loadConfigs(); + + result$.subscribe((result) => { + expect(Array.isArray(result)).toBeTrue(); + expect(result[0].configId).toBe('configId1'); + }); + })); + }); + }); +}); diff --git a/src/config/loader/config-loader.ts b/src/config/loader/config-loader.ts new file mode 100644 index 0000000..0dba6b9 --- /dev/null +++ b/src/config/loader/config-loader.ts @@ -0,0 +1,53 @@ +import { Provider } from 'injection-js'; +import { forkJoin, Observable, of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../openid-configuration'; + +export class OpenIdConfigLoader { + loader?: Provider; +} + +export abstract class StsConfigLoader { + abstract loadConfigs(): Observable; +} + +export class StsConfigStaticLoader implements StsConfigLoader { + constructor( + private readonly passedConfigs: OpenIdConfiguration | OpenIdConfiguration[] + ) {} + + loadConfigs(): Observable { + if (Array.isArray(this.passedConfigs)) { + return of(this.passedConfigs); + } + + return of([this.passedConfigs]); + } +} + +export class StsConfigHttpLoader implements StsConfigLoader { + constructor( + private readonly configs$: + | Observable + | Observable[] + | Observable + ) {} + + loadConfigs(): Observable { + if (Array.isArray(this.configs$)) { + return forkJoin(this.configs$); + } + + const singleConfigOrArray = this.configs$ as Observable; + + return singleConfigOrArray.pipe( + map((value: unknown) => { + if (Array.isArray(value)) { + return value as OpenIdConfiguration[]; + } + + return [value] as OpenIdConfiguration[]; + }) + ); + } +} diff --git a/src/config/openid-configuration.ts b/src/config/openid-configuration.ts new file mode 100644 index 0000000..3dd95ab --- /dev/null +++ b/src/config/openid-configuration.ts @@ -0,0 +1,211 @@ +import { LogLevel } from '../logging/log-level'; +import { AuthWellKnownEndpoints } from './auth-well-known/auth-well-known-endpoints'; + +export interface OpenIdConfiguration { + /** + * To identify a configuration the `configId` parameter was introduced. + * If you do not explicitly set this value, the library will generate + * and assign the value for you. If set, the configured value is used. + * The value is optional. + */ + configId?: string; + /** + * The url to the Security Token Service (STS). The authority issues tokens. + * This field is required. + */ + authority?: string; + /** Override the default Security Token Service wellknown endpoint postfix. */ + authWellknownEndpointUrl?: string; + authWellknownEndpoints?: AuthWellKnownEndpoints; + + /** + * Override the default Security Token Service wellknown endpoint postfix. + * + * @default /.well-known/openid-configuration + */ + authWellknownUrlSuffix?: string; + + /** The redirect URL defined on the Security Token Service. */ + redirectUrl?: string; + /** + * Whether to check if current URL matches the redirect URI when determining + * if current URL is in fact the redirect URI. + * Default: true + */ + checkRedirectUrlWhenCheckingIfIsCallback?: boolean; + /** + * The Client MUST validate that the aud (audience) Claim contains its `client_id` value + * registered at the Issuer identified by the iss (issuer) Claim as an audience. + * The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, + * or if it contains additional audiences not trusted by the Client. + */ + clientId?: string; + /** + * `code`, `id_token token` or `id_token`. + * Name of the flow which can be configured. + * You must use the `id_token token` flow, if you want to access an API + * or get user data from the server. The `access_token` is required for this, + * and only returned with this flow. + */ + responseType?: string; + /** + * List of scopes which are requested from the server from this client. + * This must match the Security Token Service configuration for the client you use. + * The `openid` scope is required. The `offline_access` scope can be requested when using refresh tokens + * but this is optional and some Security Token Service do not support this or recommend not requesting this even when using + * refresh tokens in the browser. + */ + scope?: string; + /** + * Optional hd parameter for Google Auth with particular G Suite domain, + * see https://developers.google.com/identity/protocols/OpenIDConnect#hd-param + */ + hdParam?: string; + /** URL to redirect to after a server logout if using the end session API. */ + postLogoutRedirectUri?: string; + /** Starts the OpenID session management for this client. */ + startCheckSession?: boolean; + /** Renews the client tokens, once the id_token expires. Can use iframes or refresh tokens. */ + silentRenew?: boolean; + /** An optional URL to handle silent renew callbacks */ + silentRenewUrl?: string; + /** + * Sets the maximum waiting time for silent renew process. If this time is exceeded, the silent renew state will + * be reset. Default = 20. + * */ + silentRenewTimeoutInSeconds?: number; + /** + * Makes it possible to add an offset to the silent renew check in seconds. + * By entering a value, you can renew the tokens before the tokens expire. + */ + renewTimeBeforeTokenExpiresInSeconds?: number; + /** + * Allows for a custom domain to be used with Auth0. + * With this flag set the 'authority' does not have to end with + * 'auth0.com' to trigger the auth0 special handling of logouts. + */ + useCustomAuth0Domain?: boolean; + /** + * When set to true, refresh tokens are used to renew the user session. + * When set to false, standard silent renew is used. + * Default value is false. + */ + useRefreshToken?: boolean; + /** + * Activates Pushed Authorisation Requests for login and popup login. + * Not compatible with iframe renew. + */ + usePushedAuthorisationRequests?: boolean; + /** + * A token obtained by using a refresh token normally doesn't contain a nonce value. + * The library checks it is not there. However, some OIDC endpoint implementations do send one. + * Setting `ignoreNonceAfterRefresh` to `true` disables the check if a nonce is present. + * Please note that the nonce value, if present, will not be verified. Default is `false`. + */ + ignoreNonceAfterRefresh?: boolean; + /** + * The default Angular route which is used after a successful login, if not using the + * `triggerAuthorizationResultEvent` + */ + postLoginRoute?: string; + /** Route to redirect to if the server returns a 403 error. This has to be an Angular route. HTTP 403. */ + forbiddenRoute?: string; + /** Route to redirect to if the server returns a 401 error. This has to be an Angular route. HTTP 401. */ + unauthorizedRoute?: string; + /** When set to true, the library automatically gets user info after authentication */ + autoUserInfo?: boolean; + /** When set to true, the library automatically gets user info after token renew */ + renewUserInfoAfterTokenRenew?: boolean; + /** Used for custom state logic handling. The state is not automatically reset when set to false */ + autoCleanStateAfterAuthentication?: boolean; + /** + * This can be set to true which emits an event instead of an Angular route change. + * Instead of forcing the application consuming this library to automatically redirect to one of the 3 + * hard-configured routes (start, unauthorized, forbidden), this modification will add an extra + * configuration option to override such behavior and trigger an event that will allow to subscribe to + * it and let the application perform other actions. This would be useful to allow the application to + * save an initial return URL so that the user is redirected to it after a successful login on the Security Token Service + * (i.e. saving the return URL previously on sessionStorage and then retrieving it during the triggering of the event). + */ + triggerAuthorizationResultEvent?: boolean; + /** 0, 1, 2 can be used to set the log level displayed in the console. */ + logLevel?: LogLevel; + /** Make it possible to turn off the iss validation per configuration. **You should not turn this off!** */ + issValidationOff?: boolean; + /** + * If this is active, the history is not cleaned up on an authorize callback. + * This can be used when the application needs to preserve the history. + */ + historyCleanupOff?: boolean; + /** + * Amount of offset allowed between the server creating the token and the client app receiving the id_token. + * The diff in time between the server time and client time is also important in validating this value. + * All times are in UTC. + */ + maxIdTokenIatOffsetAllowedInSeconds?: number; + /** + * This allows the application to disable the iat offset validation check. + * The iat Claim can be used to reject tokens that were issued too far away from the current time, + * limiting the amount of time that nonces need to be stored to prevent attacks. + * The acceptable range is client specific. + */ + disableIatOffsetValidation?: boolean; + + /** Extra parameters to add to the authorization URL request */ + customParamsAuthRequest?: { [key: string]: string | number | boolean }; + + /** Extra parameters to add to the refresh token request body */ + customParamsRefreshTokenRequest?: { + [key: string]: string | number | boolean; + }; + + /** Extra parameters to add to the authorization EndSession request */ + customParamsEndSessionRequest?: { [key: string]: string | number | boolean }; + + /** Extra parameters to add to the token URL request */ + customParamsCodeRequest?: { [key: string]: string | number | boolean }; + + // Azure B2C have implemented this incorrectly. Add support for to disable this until fixed. + /** Disables the auth_time validation for id_tokens in a refresh due to Azure's incorrect implementation. */ + disableRefreshIdTokenAuthTimeValidation?: boolean; + + /** + * Enables the id_token validation, default value is `true`. + * You can disable this validation if you like to ignore the expired value in the renew process or not check this in the expiry check. Only the access token is used to trigger a renew. + * If no id_token is returned in using refresh tokens, set this to `false`. + */ + triggerRefreshWhenIdTokenExpired?: boolean; + + /** Controls the periodic check time interval in sections. + * Default value is 3. + */ + tokenRefreshInSeconds?: number; + /** + * Array of secure URLs on which the token should be sent if the interceptor is added to the `HTTP_INTERCEPTORS`. + */ + secureRoutes?: string[]; + /** + * Controls the periodic retry time interval for retrieving new tokens in seconds. + * `silentRenewTimeoutInSeconds` and `tokenRefreshInSeconds` are upper bounds for this value. + * Default value is 3 + */ + refreshTokenRetryInSeconds?: number; + /** Adds the ngsw-bypass param to all requests */ + ngswBypass?: boolean; + /** Allow refresh token reuse (refresh without rotation), default value is false. + * The refresh token rotation is optional (rfc6749) but is more safe and hence encouraged. + */ + allowUnsafeReuseRefreshToken?: boolean; + /** Disable validation for id_token + * This is not recommended! You should always validate the id_token if returned. + */ + disableIdTokenValidation?: boolean; + /** Disables PKCE support. + * Authorize request will be sent without code challenge. + */ + disablePkce?: boolean; + /** + * Disable cleaning up the popup when receiving invalid messages + */ + disableCleaningPopupOnInvalidMessage?: boolean +} diff --git a/src/config/validation/config-validation.service.spec.ts b/src/config/validation/config-validation.service.spec.ts new file mode 100644 index 0000000..7bf529f --- /dev/null +++ b/src/config/validation/config-validation.service.spec.ts @@ -0,0 +1,192 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { LogLevel } from '../../logging/log-level'; +import { LoggerService } from '../../logging/logger.service'; +import { OpenIdConfiguration } from '../openid-configuration'; +import { ConfigValidationService } from './config-validation.service'; +import { allMultipleConfigRules } from './rules'; + +describe('Config Validation Service', () => { + let configValidationService: ConfigValidationService; + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ConfigValidationService, mockProvider(LoggerService)], + }); + }); + + const VALID_CONFIG = { + authority: 'https://offeringsolutions-sts.azurewebsites.net', + redirectUrl: window.location.origin, + postLogoutRedirectUri: window.location.origin, + clientId: 'angularClient', + scope: 'openid profile email', + responseType: 'code', + silentRenew: true, + silentRenewUrl: `${window.location.origin}/silent-renew.html`, + renewTimeBeforeTokenExpiresInSeconds: 10, + logLevel: LogLevel.Debug, + }; + + beforeEach(() => { + configValidationService = TestBed.inject(ConfigValidationService); + loggerService = TestBed.inject(LoggerService); + }); + + it('should create', () => { + expect(configValidationService).toBeTruthy(); + }); + + it('should return false for empty config', () => { + const config = {}; + const result = configValidationService.validateConfig(config); + + expect(result).toBeFalse(); + }); + + it('should return true for valid config', () => { + const result = configValidationService.validateConfig(VALID_CONFIG); + + expect(result).toBeTrue(); + }); + + it('calls `logWarning` if one rule has warning level', () => { + const loggerWarningSpy = spyOn(loggerService, 'logWarning'); + const messageTypeSpy = spyOn( + configValidationService as any, + 'getAllMessagesOfType' + ); + + messageTypeSpy + .withArgs('warning', jasmine.any(Array)) + .and.returnValue(['A warning message']); + messageTypeSpy.withArgs('error', jasmine.any(Array)).and.callThrough(); + + configValidationService.validateConfig(VALID_CONFIG); + expect(loggerWarningSpy).toHaveBeenCalled(); + }); + + describe('ensure-clientId.rule', () => { + it('return false when no clientId is set', () => { + const config = { ...VALID_CONFIG, clientId: '' } as OpenIdConfiguration; + const result = configValidationService.validateConfig(config); + + expect(result).toBeFalse(); + }); + }); + + describe('ensure-authority-server.rule', () => { + it('return false when no security token service is set', () => { + const config = { + ...VALID_CONFIG, + authority: '', + } as OpenIdConfiguration; + const result = configValidationService.validateConfig(config); + + expect(result).toBeFalse(); + }); + }); + + describe('ensure-redirect-url.rule', () => { + it('return false for no redirect Url', () => { + const config = { ...VALID_CONFIG, redirectUrl: '' }; + const result = configValidationService.validateConfig(config); + + expect(result).toBeFalse(); + }); + }); + + describe('ensureSilentRenewUrlWhenNoRefreshTokenUsed', () => { + it('return false when silent renew is used with no useRefreshToken and no silentrenewUrl', () => { + const config = { + ...VALID_CONFIG, + silentRenew: true, + useRefreshToken: false, + silentRenewUrl: '', + } as OpenIdConfiguration; + const result = configValidationService.validateConfig(config); + + expect(result).toBeFalse(); + }); + }); + + describe('use-offline-scope-with-silent-renew.rule', () => { + it('return true but warning when silent renew is used with useRefreshToken but no offline_access scope is given', () => { + const config = { + ...VALID_CONFIG, + silentRenew: true, + useRefreshToken: true, + scopes: 'scope1 scope2 but_no_offline_access', + }; + + const loggerSpy = spyOn(loggerService, 'logError'); + const loggerWarningSpy = spyOn(loggerService, 'logWarning'); + + const result = configValidationService.validateConfig(config); + + expect(result).toBeTrue(); + expect(loggerSpy).not.toHaveBeenCalled(); + expect(loggerWarningSpy).toHaveBeenCalled(); + }); + }); + + describe('ensure-no-duplicated-configs.rule', () => { + it('should print out correct error when mutiple configs with same properties are passed', () => { + const config1 = { + ...VALID_CONFIG, + silentRenew: true, + useRefreshToken: true, + scopes: 'scope1 scope2 but_no_offline_access', + }; + const config2 = { + ...VALID_CONFIG, + silentRenew: true, + useRefreshToken: true, + scopes: 'scope1 scope2 but_no_offline_access', + }; + + const loggerErrorSpy = spyOn(loggerService, 'logError'); + const loggerWarningSpy = spyOn(loggerService, 'logWarning'); + + const result = configValidationService.validateConfigs([ + config1, + config2, + ]); + + expect(result).toBeTrue(); + expect(loggerErrorSpy).not.toHaveBeenCalled(); + expect(loggerWarningSpy.calls.argsFor(0)).toEqual([ + config1, + 'You added multiple configs with the same authority, clientId and scope', + ]); + expect(loggerWarningSpy.calls.argsFor(1)).toEqual([ + config2, + 'You added multiple configs with the same authority, clientId and scope', + ]); + }); + + it('should return false and a better error message when config is not passed as object with config property', () => { + const loggerWarningSpy = spyOn(loggerService, 'logWarning'); + + const result = configValidationService.validateConfigs([]); + + expect(result).toBeFalse(); + expect(loggerWarningSpy).not.toHaveBeenCalled(); + }); + }); + + describe('validateConfigs', () => { + it('calls internal method with empty array if something falsy is passed', () => { + const spy = spyOn( + configValidationService as any, + 'validateConfigsInternal' + ).and.callThrough(); + + const result = configValidationService.validateConfigs([]); + + expect(result).toBeFalse(); + expect(spy).toHaveBeenCalledOnceWith([], allMultipleConfigRules); + }); + }); +}); diff --git a/src/config/validation/config-validation.service.ts b/src/config/validation/config-validation.service.ts new file mode 100644 index 0000000..bd79cd6 --- /dev/null +++ b/src/config/validation/config-validation.service.ts @@ -0,0 +1,98 @@ +import { inject, Injectable } from 'injection-js'; +import { LoggerService } from '../../logging/logger.service'; +import { OpenIdConfiguration } from '../openid-configuration'; +import { Level, RuleValidationResult } from './rule'; +import { allMultipleConfigRules, allRules } from './rules'; + +@Injectable() +export class ConfigValidationService { + private readonly loggerService = inject(LoggerService); + + validateConfigs(passedConfigs: OpenIdConfiguration[]): boolean { + return this.validateConfigsInternal( + passedConfigs ?? [], + allMultipleConfigRules + ); + } + + validateConfig(passedConfig: OpenIdConfiguration): boolean { + return this.validateConfigInternal(passedConfig, allRules); + } + + private validateConfigsInternal( + passedConfigs: OpenIdConfiguration[], + allRulesToUse: (( + passedConfig: OpenIdConfiguration[] + ) => RuleValidationResult)[] + ): boolean { + if (passedConfigs.length === 0) { + return false; + } + + const allValidationResults = allRulesToUse.map((rule) => + rule(passedConfigs) + ); + + let overallErrorCount = 0; + + passedConfigs.forEach((passedConfig) => { + const errorCount = this.processValidationResultsAndGetErrorCount( + allValidationResults, + passedConfig + ); + + overallErrorCount += errorCount; + }); + + return overallErrorCount === 0; + } + + private validateConfigInternal( + passedConfig: OpenIdConfiguration, + allRulesToUse: (( + passedConfig: OpenIdConfiguration + ) => RuleValidationResult)[] + ): boolean { + const allValidationResults = allRulesToUse.map((rule) => + rule(passedConfig) + ); + + const errorCount = this.processValidationResultsAndGetErrorCount( + allValidationResults, + passedConfig + ); + + return errorCount === 0; + } + + private processValidationResultsAndGetErrorCount( + allValidationResults: RuleValidationResult[], + config: OpenIdConfiguration + ): number { + const allMessages = allValidationResults.filter( + (x) => x.messages.length > 0 + ); + const allErrorMessages = this.getAllMessagesOfType('error', allMessages); + const allWarnings = this.getAllMessagesOfType('warning', allMessages); + + allErrorMessages.forEach((message) => + this.loggerService.logError(config, message) + ); + allWarnings.forEach((message) => + this.loggerService.logWarning(config, message) + ); + + return allErrorMessages.length; + } + + private getAllMessagesOfType( + type: Level, + results: RuleValidationResult[] + ): string[] { + const allMessages = results + .filter((x) => x.level === type) + .map((result) => result.messages); + + return allMessages.reduce((acc, val) => acc.concat(val), []); + } +} diff --git a/src/config/validation/rule.ts b/src/config/validation/rule.ts new file mode 100644 index 0000000..69cbdd6 --- /dev/null +++ b/src/config/validation/rule.ts @@ -0,0 +1,19 @@ +import { OpenIdConfiguration } from '../openid-configuration'; + +export interface Rule { + validate(passedConfig: OpenIdConfiguration): RuleValidationResult; +} + +export interface RuleValidationResult { + result: boolean; + messages: string[]; + level: Level; +} + +export const POSITIVE_VALIDATION_RESULT: RuleValidationResult = { + result: true, + messages: [], + level: 'none', +}; + +export type Level = 'warning' | 'error' | 'none'; diff --git a/src/config/validation/rules/ensure-authority.rule.ts b/src/config/validation/rules/ensure-authority.rule.ts new file mode 100644 index 0000000..fd7fc09 --- /dev/null +++ b/src/config/validation/rules/ensure-authority.rule.ts @@ -0,0 +1,16 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +export const ensureAuthority = ( + passedConfig: OpenIdConfiguration +): RuleValidationResult => { + if (!passedConfig.authority) { + return { + result: false, + messages: ['The authority URL MUST be provided in the configuration! '], + level: 'error', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/config/validation/rules/ensure-clientId.rule.ts b/src/config/validation/rules/ensure-clientId.rule.ts new file mode 100644 index 0000000..1396bcf --- /dev/null +++ b/src/config/validation/rules/ensure-clientId.rule.ts @@ -0,0 +1,16 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +export const ensureClientId = ( + passedConfig: OpenIdConfiguration +): RuleValidationResult => { + if (!passedConfig.clientId) { + return { + result: false, + messages: ['The clientId is required and missing from your config!'], + level: 'error', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/config/validation/rules/ensure-no-duplicated-configs.rule.ts b/src/config/validation/rules/ensure-no-duplicated-configs.rule.ts new file mode 100644 index 0000000..4f9b4e7 --- /dev/null +++ b/src/config/validation/rules/ensure-no-duplicated-configs.rule.ts @@ -0,0 +1,47 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +const createIdentifierToCheck = (passedConfig: OpenIdConfiguration): string => { + if (!passedConfig) { + return ''; + } + + const { authority, clientId, scope } = passedConfig; + + return `${authority}${clientId}${scope}`; +}; + +const arrayHasDuplicates = (array: string[]): boolean => + new Set(array).size !== array.length; + +export const ensureNoDuplicatedConfigsRule = ( + passedConfigs: OpenIdConfiguration[] +): RuleValidationResult => { + const allIdentifiers = passedConfigs.map((x) => createIdentifierToCheck(x)); + + const someAreNotSet = allIdentifiers.some((x) => x === ''); + + if (someAreNotSet) { + return { + result: false, + messages: [ + `Please make sure you add an object with a 'config' property: ....({ config }) instead of ...(config)`, + ], + level: 'error', + }; + } + + const hasDuplicates = arrayHasDuplicates(allIdentifiers); + + if (hasDuplicates) { + return { + result: false, + messages: [ + 'You added multiple configs with the same authority, clientId and scope', + ], + level: 'warning', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/config/validation/rules/ensure-redirect-url.rule.ts b/src/config/validation/rules/ensure-redirect-url.rule.ts new file mode 100644 index 0000000..6cf7661 --- /dev/null +++ b/src/config/validation/rules/ensure-redirect-url.rule.ts @@ -0,0 +1,16 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +export const ensureRedirectRule = ( + passedConfig: OpenIdConfiguration +): RuleValidationResult => { + if (!passedConfig.redirectUrl) { + return { + result: false, + messages: ['The redirectUrl is required and missing from your config'], + level: 'error', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/config/validation/rules/ensure-silentRenewUrl-with-no-refreshtokens.rule.ts b/src/config/validation/rules/ensure-silentRenewUrl-with-no-refreshtokens.rule.ts new file mode 100644 index 0000000..80fe4fd --- /dev/null +++ b/src/config/validation/rules/ensure-silentRenewUrl-with-no-refreshtokens.rule.ts @@ -0,0 +1,22 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +export const ensureSilentRenewUrlWhenNoRefreshTokenUsed = ( + passedConfig: OpenIdConfiguration +): RuleValidationResult => { + const usesSilentRenew = passedConfig.silentRenew; + const usesRefreshToken = passedConfig.useRefreshToken; + const hasSilentRenewUrl = passedConfig.silentRenewUrl; + + if (usesSilentRenew && !usesRefreshToken && !hasSilentRenewUrl) { + return { + result: false, + messages: [ + 'Please provide a silent renew URL if using renew and not refresh tokens', + ], + level: 'error', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/config/validation/rules/index.ts b/src/config/validation/rules/index.ts new file mode 100644 index 0000000..fe3c8d1 --- /dev/null +++ b/src/config/validation/rules/index.ts @@ -0,0 +1,16 @@ +import { ensureAuthority } from './ensure-authority.rule'; +import { ensureClientId } from './ensure-clientId.rule'; +import { ensureNoDuplicatedConfigsRule } from './ensure-no-duplicated-configs.rule'; +import { ensureRedirectRule } from './ensure-redirect-url.rule'; +import { ensureSilentRenewUrlWhenNoRefreshTokenUsed } from './ensure-silentRenewUrl-with-no-refreshtokens.rule'; +import { useOfflineScopeWithSilentRenew } from './use-offline-scope-with-silent-renew.rule'; + +export const allRules = [ + ensureAuthority, + useOfflineScopeWithSilentRenew, + ensureRedirectRule, + ensureClientId, + ensureSilentRenewUrlWhenNoRefreshTokenUsed, +]; + +export const allMultipleConfigRules = [ensureNoDuplicatedConfigsRule]; diff --git a/src/config/validation/rules/use-offline-scope-with-silent-renew.rule.ts b/src/config/validation/rules/use-offline-scope-with-silent-renew.rule.ts new file mode 100644 index 0000000..7160573 --- /dev/null +++ b/src/config/validation/rules/use-offline-scope-with-silent-renew.rule.ts @@ -0,0 +1,23 @@ +import { OpenIdConfiguration } from '../../openid-configuration'; +import { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule'; + +export const useOfflineScopeWithSilentRenew = ( + passedConfig: OpenIdConfiguration +): RuleValidationResult => { + const hasRefreshToken = passedConfig.useRefreshToken; + const hasSilentRenew = passedConfig.silentRenew; + const scope = passedConfig.scope || ''; + const hasOfflineScope = scope.split(' ').includes('offline_access'); + + if (hasRefreshToken && hasSilentRenew && !hasOfflineScope) { + return { + result: false, + messages: [ + 'When using silent renew and refresh tokens please set the `offline_access` scope', + ], + level: 'warning', + }; + } + + return POSITIVE_VALIDATION_RESULT; +}; diff --git a/src/dom/index.ts b/src/dom/index.ts new file mode 100644 index 0000000..432305d --- /dev/null +++ b/src/dom/index.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from "injection-js"; + +export const DOCUMENT = new InjectionToken('document'); \ No newline at end of file diff --git a/src/extractors/jwk.extractor.spec.ts b/src/extractors/jwk.extractor.spec.ts new file mode 100644 index 0000000..31fbdc1 --- /dev/null +++ b/src/extractors/jwk.extractor.spec.ts @@ -0,0 +1,229 @@ +import { TestBed } from '@angular/core/testing'; +import { CryptoService } from '../utils/crypto/crypto.service'; +import { + JwkExtractor, + JwkExtractorInvalidArgumentError, + JwkExtractorNoMatchingKeysError, + JwkExtractorSeveralMatchingKeysError, +} from './jwk.extractor'; + +describe('JwkExtractor', () => { + let service: JwkExtractor; + const key1 = { + kty: 'RSA', + use: 'sig', + kid: '5626CE6A8F4F5FCD79C6642345282CA76D337548RS256', + x5t: 'VibOao9PX815xmQjRSgsp20zdUg', + e: 'AQAB', + n: 'uu3-HK4pLRHJHoEBzFhM516RWx6nybG5yQjH4NbKjfGQ8dtKy1BcGjqfMaEKF8KOK44NbAx7rtBKCO9EKNYkeFvcUzBzVeuu4jWG61XYdTekgv-Dh_Fj8245GocEkbvBbFW6cw-_N59JWqUuiCvb-EOfhcuubUcr44a0AQyNccYNpcXGRcMKy7_L1YhO0AMULqLDDVLFj5glh4TcJ2N5VnJedq1-_JKOxPqD1ni26UOQoWrW16G29KZ1_4Xxf2jX8TAq-4RJEHccdzgZVIO4F5B4MucMZGq8_jMCpiTUsUGDOAMA_AmjxIRHOtO5n6Pt0wofrKoAVhGh2sCTtaQf2Q', + x5c: [ + 'MIIDPzCCAiegAwIBAgIQF+HRVxLHII9IlOoQk6BxcjANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDDBBzdHMuZGV2LmNlcnQuY29tMB4XDTE5MDIyMDEwMTA0M1oXDTM5MDIyMDEwMTkyOVowGzEZMBcGA1UEAwwQc3RzLmRldi5jZXJ0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrt/hyuKS0RyR6BAcxYTOdekVsep8mxuckIx+DWyo3xkPHbSstQXBo6nzGhChfCjiuODWwMe67QSgjvRCjWJHhb3FMwc1XrruI1hutV2HU3pIL/g4fxY/NuORqHBJG7wWxVunMPvzefSVqlLogr2/hDn4XLrm1HK+OGtAEMjXHGDaXFxkXDCsu/y9WITtADFC6iww1SxY+YJYeE3CdjeVZyXnatfvySjsT6g9Z4tulDkKFq1tehtvSmdf+F8X9o1/EwKvuESRB3HHc4GVSDuBeQeDLnDGRqvP4zAqYk1LFBgzgDAPwJo8SERzrTuZ+j7dMKH6yqAFYRodrAk7WkH9kCAwEAAaN/MH0wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAtBgNVHREEJjAkghBzdHMuZGV2LmNlcnQuY29tghBzdHMuZGV2LmNlcnQuY29tMB0GA1UdDgQWBBQuyHxWP3je6jGMOmOiY+hz47r36jANBgkqhkiG9w0BAQsFAAOCAQEAKEHG7Ga6nb2XiHXDc69KsIJwbO80+LE8HVJojvITILz3juN6/FmK0HmogjU6cYST7m1MyxsVhQQNwJASZ6haBNuBbNzBXfyyfb4kr62t1oDLNwhctHaHaM4sJSf/xIw+YO+Qf7BtfRAVsbM05+QXIi2LycGrzELiXu7KFM0E1+T8UOZ2Qyv7OlCb/pWkYuDgE4w97ox0MhDpvgluxZLpRanOLUCVGrfFaij7gRAhjYPUY3vAEcD8JcFBz1XijU8ozRO6FaG4qg8/JCe+VgoWsMDj3sKB9g0ob6KCyG9L2bdk99PGgvXDQvMYCpkpZzG3XsxOINPd5p0gc209ZOoxTg==', + ], + alg: 'RS256', + } as JsonWebKey; + const key2 = { + kty: 'RSA', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key3 = { + kty: 'RSA', + use: 'enc', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key4 = { + kty: 'RSA', + use: 'sig', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key5 = { + kty: 'RSA', + use: 'sig', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key6 = { + kty: 'EC', + use: 'sig', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key7 = { + kty: 'EC', + use: 'enc', + kid: 'boop', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key8 = { + kty: 'EC', + use: 'sig', + kid: '5626CE6A8F4F5FCD79C6642345282CA76D337548RS256', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key9 = { + kty: 'EC', + use: 'sig', + kid: '5626CE6A8F4F5FCD79C6642345282CA76D337548RS256', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const keys: JsonWebKey[] = [ + key1, + key2, + key3, + key4, + key5, + key6, + key7, + key8, + key9, + ]; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [JwkExtractor, CryptoService], + }); + }); + + beforeEach(() => { + service = TestBed.inject(JwkExtractor); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('extractJwk', () => { + it('throws error if no keys are present in array', () => { + expect(() => { + service.extractJwk([]); + }).toThrow(JwkExtractorInvalidArgumentError); + }); + + it('throws error if spec.kid is present, but no key was matching', () => { + expect(() => { + service.extractJwk(keys, { kid: 'doot' }); + }).toThrow(JwkExtractorNoMatchingKeysError); + }); + + it('throws error if spec.use is present, but no key was matching', () => { + expect(() => { + service.extractJwk(keys, { use: 'blorp' }); + }).toThrow(JwkExtractorNoMatchingKeysError); + }); + + it('does not throw error if no key is matching when throwOnEmpty is false', () => { + const result = service.extractJwk(keys, { use: 'blorp' }, false); + + expect(result.length).toEqual(0); + }); + + it('throws error if multiple keys are present, and spec is not present', () => { + expect(() => { + service.extractJwk(keys); + }).toThrow(JwkExtractorSeveralMatchingKeysError); + }); + + it('returns array of keys matching spec.kid', () => { + const extracted = service.extractJwk(keys, { + kid: '5626CE6A8F4F5FCD79C6642345282CA76D337548RS256', + }); + + expect(extracted.length).toEqual(3); + expect(extracted).toContain(key1); + expect(extracted).toContain(key8); + expect(extracted).toContain(key9); + + const extracted2 = service.extractJwk(keys, { kid: 'boop' }); + + expect(extracted2.length).toEqual(6); + expect(extracted2).toContain(key2); + expect(extracted2).toContain(key3); + expect(extracted2).toContain(key4); + expect(extracted2).toContain(key5); + expect(extracted2).toContain(key6); + expect(extracted2).toContain(key7); + }); + + it('returns array of keys matching spec.use', () => { + const extracted = service.extractJwk(keys, { use: 'sig' }); + + expect(extracted.length).toEqual(6); + expect(extracted).toContain(key1); + expect(extracted).toContain(key4); + expect(extracted).toContain(key5); + expect(extracted).toContain(key6); + expect(extracted).toContain(key8); + expect(extracted).toContain(key9); + + const extracted2 = service.extractJwk(keys, { use: 'enc' }); + + expect(extracted2.length).toEqual(2); + expect(extracted2).toContain(key3); + expect(extracted2).toContain(key7); + }); + + it('returns array of keys matching the combination of spec.use and spec.kid', () => { + const extracted = service.extractJwk(keys, { kid: 'boop', use: 'sig' }); + + expect(extracted.length).toEqual(3); + expect(extracted).toContain(key4); + expect(extracted).toContain(key5); + expect(extracted).toContain(key6); + + const extracted2 = service.extractJwk(keys, { kid: 'boop', use: 'enc' }); + + expect(extracted2.length).toEqual(2); + expect(extracted2).toContain(key3); + expect(extracted2).toContain(key7); + }); + + it('returns array of keys matching spec.kty', () => { + const extracted = service.extractJwk(keys, { kty: 'RSA' }); + + expect(extracted.length).toEqual(5); + expect(extracted).toContain(key1); + expect(extracted).toContain(key2); + expect(extracted).toContain(key3); + expect(extracted).toContain(key4); + expect(extracted).toContain(key5); + + const extracted2 = service.extractJwk(keys, { kty: 'EC' }); + + expect(extracted2.length).toEqual(4); + expect(extracted2).toContain(key6); + expect(extracted2).toContain(key7); + expect(extracted2).toContain(key8); + expect(extracted2).toContain(key9); + }); + + it('returns array of keys matching the combination of spec.kty and spec.use', () => { + const extracted = service.extractJwk(keys, { kty: 'RSA', use: 'enc' }); + + expect(extracted.length).toEqual(1); + expect(extracted).toContain(key3); + + const extracted2 = service.extractJwk(keys, { kty: 'EC', use: 'sig' }); + + expect(extracted2.length).toEqual(3); + expect(extracted2).toContain(key6); + expect(extracted2).toContain(key8); + expect(extracted2).toContain(key9); + + const extracted3 = service.extractJwk(keys, { kty: 'EC', use: 'enc' }); + + expect(extracted3.length).toEqual(1); + expect(extracted3).toContain(key7); + }); + }); +}); diff --git a/src/extractors/jwk.extractor.ts b/src/extractors/jwk.extractor.ts new file mode 100644 index 0000000..ab099bf --- /dev/null +++ b/src/extractors/jwk.extractor.ts @@ -0,0 +1,48 @@ +import { Injectable } from 'injection-js'; + +@Injectable() +export class JwkExtractor { + extractJwk( + keys: JsonWebKey[], + spec?: { kid?: string; use?: string; kty?: string }, + throwOnEmpty = true + ): JsonWebKey[] { + if (0 === keys.length) { + throw JwkExtractorInvalidArgumentError; + } + + const foundKeys = keys + .filter((k) => (spec?.kid ? (k as any)['kid'] === spec.kid : true)) + .filter((k) => (spec?.use ? k['use'] === spec.use : true)) + .filter((k) => (spec?.kty ? k['kty'] === spec.kty : true)); + + if (foundKeys.length === 0 && throwOnEmpty) { + throw JwkExtractorNoMatchingKeysError; + } + + if (foundKeys.length > 1 && (null === spec || undefined === spec)) { + throw JwkExtractorSeveralMatchingKeysError; + } + + return foundKeys; + } +} + +function buildErrorName(name: string): string { + return JwkExtractor.name + ': ' + name; +} + +export const JwkExtractorInvalidArgumentError = { + name: buildErrorName('InvalidArgumentError'), + message: 'Array of keys was empty. Unable to extract', +}; + +export const JwkExtractorNoMatchingKeysError = { + name: buildErrorName('NoMatchingKeysError'), + message: 'No key found matching the spec', +}; + +export const JwkExtractorSeveralMatchingKeysError = { + name: buildErrorName('SeveralMatchingKeysError'), + message: 'More than one key found. Please use spec to filter', +}; diff --git a/src/flows/callback-context.ts b/src/flows/callback-context.ts new file mode 100644 index 0000000..87fbae0 --- /dev/null +++ b/src/flows/callback-context.ts @@ -0,0 +1,30 @@ +import { JwtKeys } from '../validation/jwtkeys'; +import { StateValidationResult } from '../validation/state-validation-result'; + +export interface CallbackContext { + code: string; + refreshToken: string; + state: string; + sessionState: string | null; + authResult: AuthResult | null; + isRenewProcess: boolean; + jwtKeys: JwtKeys | null; + validationResult: StateValidationResult | null; + existingIdToken: string | null; +} + +export interface AuthResult { + // eslint-disable-next-line @typescript-eslint/naming-convention + id_token?: string; + // eslint-disable-next-line @typescript-eslint/naming-convention + access_token?: string; + // eslint-disable-next-line @typescript-eslint/naming-convention + refresh_token?: string; + error?: any; + // eslint-disable-next-line @typescript-eslint/naming-convention + session_state?: any; + state?: any; + scope?: string; + expires_in?: number; + token_type?: string; +} diff --git a/src/flows/callback-handling/code-flow-callback-handler.service.spec.ts b/src/flows/callback-handling/code-flow-callback-handler.service.spec.ts new file mode 100644 index 0000000..d8a8108 --- /dev/null +++ b/src/flows/callback-handling/code-flow-callback-handler.service.spec.ts @@ -0,0 +1,336 @@ +import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { createRetriableStream } from '../../../test/create-retriable-stream.helper'; +import { DataService } from '../../api/data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { TokenValidationService } from '../../validation/token-validation.service'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { CodeFlowCallbackHandlerService } from './code-flow-callback-handler.service'; + +describe('CodeFlowCallbackHandlerService', () => { + let service: CodeFlowCallbackHandlerService; + let dataService: DataService; + let storagePersistenceService: StoragePersistenceService; + let tokenValidationService: TokenValidationService; + let urlService: UrlService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + CodeFlowCallbackHandlerService, + mockProvider(UrlService), + mockProvider(LoggerService), + mockProvider(TokenValidationService), + mockProvider(FlowsDataService), + mockProvider(StoragePersistenceService), + mockProvider(DataService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(CodeFlowCallbackHandlerService); + dataService = TestBed.inject(DataService); + urlService = TestBed.inject(UrlService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + tokenValidationService = TestBed.inject(TokenValidationService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('codeFlowCallback', () => { + it('throws error if no state is given', waitForAsync(() => { + const getUrlParameterSpy = spyOn( + urlService, + 'getUrlParameter' + ).and.returnValue('params'); + + getUrlParameterSpy.withArgs('test-url', 'state').and.returnValue(''); + + service + .codeFlowCallback('test-url', { configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('throws error if no code is given', waitForAsync(() => { + const getUrlParameterSpy = spyOn( + urlService, + 'getUrlParameter' + ).and.returnValue('params'); + + getUrlParameterSpy.withArgs('test-url', 'code').and.returnValue(''); + + service + .codeFlowCallback('test-url', { configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('returns callbackContext if all params are good', waitForAsync(() => { + spyOn(urlService, 'getUrlParameter').and.returnValue('params'); + + const expectedCallbackContext = { + code: 'params', + refreshToken: '', + state: 'params', + sessionState: 'params', + authResult: null, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + } as CallbackContext; + + service + .codeFlowCallback('test-url', { configId: 'configId1' }) + .subscribe((callbackContext) => { + expect(callbackContext).toEqual(expectedCallbackContext); + }); + })); + }); + + describe('codeFlowCodeRequest ', () => { + const HTTP_ERROR = new HttpErrorResponse({}); + const CONNECTION_ERROR = new HttpErrorResponse({ + error: new ProgressEvent('error'), + status: 0, + statusText: 'Unknown Error', + url: 'https://identity-server.test/openid-connect/token', + }); + + it('throws error if state is not correct', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + service + .codeFlowCodeRequest({} as CallbackContext, { configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('throws error if authWellknownEndpoints is null is given', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue(null); + + service + .codeFlowCodeRequest({} as CallbackContext, { configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('throws error if tokenendpoint is null is given', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ tokenEndpoint: null }); + + service + .codeFlowCodeRequest({} as CallbackContext, { configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('calls dataService if all params are good', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue(of({})); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + service + .codeFlowCodeRequest({} as CallbackContext, { configId: 'configId1' }) + .subscribe(() => { + expect(postSpy).toHaveBeenCalledOnceWith( + 'tokenEndpoint', + undefined, + { configId: 'configId1' }, + jasmine.any(HttpHeaders) + ); + }); + })); + + it('calls url service with custom token params', waitForAsync(() => { + const urlServiceSpy = spyOn( + urlService, + 'createBodyForCodeFlowCodeRequest' + ); + const config = { + configId: 'configId1', + customParamsCodeRequest: { foo: 'bar' }, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + const postSpy = spyOn(dataService, 'post').and.returnValue(of({})); + + service + .codeFlowCodeRequest({ code: 'foo' } as CallbackContext, config) + .subscribe(() => { + expect(urlServiceSpy).toHaveBeenCalledOnceWith('foo', config, { + foo: 'bar', + }); + expect(postSpy).toHaveBeenCalledTimes(1); + }); + })); + + it('calls dataService with correct headers if all params are good', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue(of({})); + const config = { + configId: 'configId1', + customParamsCodeRequest: { foo: 'bar' }, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + service + .codeFlowCodeRequest({} as CallbackContext, config) + .subscribe(() => { + const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders; + + expect(httpHeaders.has('Content-Type')).toBeTrue(); + expect(httpHeaders.get('Content-Type')).toBe( + 'application/x-www-form-urlencoded' + ); + }); + })); + + it('returns error in case of http error', waitForAsync(() => { + spyOn(dataService, 'post').and.returnValue(throwError(() => HTTP_ERROR)); + const config = { + configId: 'configId1', + customParamsCodeRequest: { foo: 'bar' }, + authority: 'authority', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service.codeFlowCodeRequest({} as CallbackContext, config).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('retries request in case of no connection http error and succeeds', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => CONNECTION_ERROR), + of({}) + ) + ); + const config = { + configId: 'configId1', + customParamsCodeRequest: { foo: 'bar' }, + authority: 'authority', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + service.codeFlowCodeRequest({} as CallbackContext, config).subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(postSpy).toHaveBeenCalledTimes(1); + }, + error: (err) => { + // fails if there should be a result + expect(err).toBeFalsy(); + }, + }); + })); + + it('retries request in case of no connection http error and fails because of http error afterwards', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => CONNECTION_ERROR), + throwError(() => HTTP_ERROR) + ) + ); + const config = { + configId: 'configId1', + customParamsCodeRequest: { foo: 'bar' }, + authority: 'authority', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + service.codeFlowCodeRequest({} as CallbackContext, config).subscribe({ + next: (res) => { + // fails if there should be a result + expect(res).toBeFalsy(); + }, + error: (err) => { + expect(err).toBeTruthy(); + expect(postSpy).toHaveBeenCalledTimes(1); + }, + }); + })); + }); +}); diff --git a/src/flows/callback-handling/code-flow-callback-handler.service.ts b/src/flows/callback-handling/code-flow-callback-handler.service.ts new file mode 100644 index 0000000..a6af0c4 --- /dev/null +++ b/src/flows/callback-handling/code-flow-callback-handler.service.ts @@ -0,0 +1,161 @@ +import { HttpHeaders } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError, timer } from 'rxjs'; +import { catchError, mergeMap, retryWhen, switchMap } from 'rxjs/operators'; +import { DataService } from '../../api/data.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { TokenValidationService } from '../../validation/token-validation.service'; +import { AuthResult, CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { isNetworkError } from './error-helper'; + +@Injectable() +export class CodeFlowCallbackHandlerService { + private readonly urlService = inject(UrlService); + + private readonly loggerService = inject(LoggerService); + + private readonly tokenValidationService = inject(TokenValidationService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly dataService = inject(DataService); + + // STEP 1 Code Flow + codeFlowCallback( + urlToCheck: string, + config: OpenIdConfiguration + ): Observable { + const code = this.urlService.getUrlParameter(urlToCheck, 'code'); + const state = this.urlService.getUrlParameter(urlToCheck, 'state'); + const sessionState = this.urlService.getUrlParameter( + urlToCheck, + 'session_state' + ); + + if (!state) { + this.loggerService.logDebug(config, 'no state in url'); + + return throwError(() => new Error('no state in url')); + } + + if (!code) { + this.loggerService.logDebug(config, 'no code in url'); + + return throwError(() => new Error('no code in url')); + } + + this.loggerService.logDebug( + config, + 'running validation for callback', + urlToCheck + ); + + const initialCallbackContext: CallbackContext = { + code, + refreshToken: '', + state, + sessionState, + authResult: null, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + return of(initialCallbackContext); + } + + // STEP 2 Code Flow // Code Flow Silent Renew starts here + codeFlowCodeRequest( + callbackContext: CallbackContext, + config: OpenIdConfiguration + ): Observable { + const authStateControl = this.flowsDataService.getAuthStateControl(config); + const isStateCorrect = + this.tokenValidationService.validateStateFromHashCallback( + callbackContext.state, + authStateControl, + config + ); + + if (!isStateCorrect) { + return throwError(() => new Error('codeFlowCodeRequest incorrect state')); + } + + const authWellknownEndpoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + config + ); + const tokenEndpoint = authWellknownEndpoints?.tokenEndpoint; + + if (!tokenEndpoint) { + return throwError(() => new Error('Token Endpoint not defined')); + } + + let headers: HttpHeaders = new HttpHeaders(); + + headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); + + const bodyForCodeFlow = this.urlService.createBodyForCodeFlowCodeRequest( + callbackContext.code, + config, + config?.customParamsCodeRequest + ); + + return this.dataService + .post(tokenEndpoint, bodyForCodeFlow, config, headers) + .pipe( + switchMap((response) => { + if (response) { + const authResult: AuthResult = { + ...response, + state: callbackContext.state, + session_state: callbackContext.sessionState, + }; + + callbackContext.authResult = authResult; + } + + return of(callbackContext); + }), + retryWhen((error) => this.handleRefreshRetry(error, config)), + catchError((error) => { + const { authority } = config; + const errorMessage = `OidcService code request ${authority}`; + + this.loggerService.logError(config, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }) + ); + } + + private handleRefreshRetry( + errors: Observable, + config: OpenIdConfiguration + ): Observable { + return errors.pipe( + mergeMap((error) => { + // retry token refresh if there is no internet connection + if (isNetworkError(error)) { + const { authority, refreshTokenRetryInSeconds } = config; + const errorMessage = `OidcService code request ${authority} - no internet connection`; + + this.loggerService.logWarning(config, errorMessage, error); + + return timer((refreshTokenRetryInSeconds ?? 0) * 1000); + } + + return throwError(() => error); + }) + ); + } +} diff --git a/src/flows/callback-handling/error-helper.spec.ts b/src/flows/callback-handling/error-helper.spec.ts new file mode 100644 index 0000000..7c7f16d --- /dev/null +++ b/src/flows/callback-handling/error-helper.spec.ts @@ -0,0 +1,57 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { isNetworkError } from './error-helper'; + +describe('error helper', () => { + describe('isNetworkError ', () => { + const HTTP_ERROR = new HttpErrorResponse({}); + + const CONNECTION_ERROR = new HttpErrorResponse({ + error: new ProgressEvent('error'), + status: 0, + statusText: 'Unknown Error', + url: 'https://identity-server.test/openid-connect/token', + }); + + const UNKNOWN_CONNECTION_ERROR = new HttpErrorResponse({ + error: new Error('error'), + status: 0, + statusText: 'Unknown Error', + url: 'https://identity-server.test/openid-connect/token', + }); + + const PARTIAL_CONNECTION_ERROR = new HttpErrorResponse({ + error: new ProgressEvent('error'), + status: 418, // i am a teapot + statusText: 'Unknown Error', + url: 'https://identity-server.test/openid-connect/token', + }); + + it('returns true on http error with status = 0', () => { + expect(isNetworkError(CONNECTION_ERROR)).toBeTrue(); + }); + + it('returns true on http error with status = 0 and unknown error', () => { + expect(isNetworkError(UNKNOWN_CONNECTION_ERROR)).toBeTrue(); + }); + + it('returns true on http error with status <> 0 and error ProgressEvent', () => { + expect(isNetworkError(PARTIAL_CONNECTION_ERROR)).toBeTrue(); + }); + + it('returns false on non http error', () => { + expect(isNetworkError(new Error('not a HttpErrorResponse'))).toBeFalse(); + }); + + it('returns false on string error', () => { + expect(isNetworkError('not a HttpErrorResponse')).toBeFalse(); + }); + + it('returns false on undefined', () => { + expect(isNetworkError(undefined)).toBeFalse(); + }); + + it('returns false on empty http error', () => { + expect(isNetworkError(HTTP_ERROR)).toBeFalse(); + }); + }); +}); diff --git a/src/flows/callback-handling/error-helper.ts b/src/flows/callback-handling/error-helper.ts new file mode 100644 index 0000000..578a8db --- /dev/null +++ b/src/flows/callback-handling/error-helper.ts @@ -0,0 +1,14 @@ +import { HttpErrorResponse } from '@ngify/http'; + +/** + * checks if the error is a network error + * by checking if either internal error is a ProgressEvent with type error + * or another error with status 0 + * @param error + * @returns true if the error is a network error + */ +export const isNetworkError = (error: unknown): boolean => + !!error && + error instanceof HttpErrorResponse && + ((error.error instanceof ProgressEvent && error.error.type === 'error') || + (error.status === 0 && !!error.error)); diff --git a/src/flows/callback-handling/history-jwt-keys-callback-handler.service.spec.ts b/src/flows/callback-handling/history-jwt-keys-callback-handler.service.spec.ts new file mode 100644 index 0000000..754420c --- /dev/null +++ b/src/flows/callback-handling/history-jwt-keys-callback-handler.service.spec.ts @@ -0,0 +1,621 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { JwtKey, JwtKeys } from '../../validation/jwtkeys'; +import { ValidationResult } from '../../validation/validation-result'; +import { AuthResult, CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; +import { SigninKeyDataService } from '../signin-key-data.service'; +import { HistoryJwtKeysCallbackHandlerService } from './history-jwt-keys-callback-handler.service'; + +const DUMMY_JWT_KEYS: JwtKeys = { + keys: [ + { + kty: 'some-value1', + use: 'some-value2', + kid: 'some-value3', + x5t: 'some-value4', + e: 'some-value5', + n: 'some-value6', + x5c: ['some-value7'], + }, + ], +}; + +describe('HistoryJwtKeysCallbackHandlerService', () => { + let service: HistoryJwtKeysCallbackHandlerService; + let storagePersistenceService: StoragePersistenceService; + let signInKeyDataService: SigninKeyDataService; + let resetAuthDataService: ResetAuthDataService; + let flowsDataService: FlowsDataService; + let authStateService: AuthStateService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + HistoryJwtKeysCallbackHandlerService, + mockProvider(LoggerService), + mockProvider(AuthStateService), + mockProvider(FlowsDataService), + mockProvider(SigninKeyDataService), + mockProvider(StoragePersistenceService), + mockProvider(ResetAuthDataService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(HistoryJwtKeysCallbackHandlerService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + signInKeyDataService = TestBed.inject(SigninKeyDataService); + flowsDataService = TestBed.inject(FlowsDataService); + authStateService = TestBed.inject(AuthStateService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('callbackHistoryAndResetJwtKeys', () => { + it('writes authResult into the storage', waitForAsync(() => { + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + const DUMMY_AUTH_RESULT = { + refresh_token: 'dummy_refresh_token', + id_token: 'some-id-token', + }; + + const callbackContext = { + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({ keys: [] } as JwtKeys) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe(() => { + expect(storagePersistenceServiceSpy.calls.allArgs()).toEqual([ + ['authnResult', DUMMY_AUTH_RESULT, allconfigs[0]], + ['jwtKeys', { keys: [] }, allconfigs[0]], + ]); + // write authnResult & jwtKeys + expect(storagePersistenceServiceSpy).toHaveBeenCalledTimes(2); + }); + })); + + it('writes refresh_token into the storage without reuse (refresh token rotation)', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + refresh_token: 'dummy_refresh_token', + id_token: 'some-id-token', + }; + + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + const callbackContext = { + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({ keys: [] } as JwtKeys) + ); + + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe(() => { + expect(storagePersistenceServiceSpy.calls.allArgs()).toEqual([ + ['authnResult', DUMMY_AUTH_RESULT, allconfigs[0]], + ['jwtKeys', { keys: [] }, allconfigs[0]], + ]); + // write authnResult & refresh_token & jwtKeys + expect(storagePersistenceServiceSpy).toHaveBeenCalledTimes(2); + }); + })); + + it('writes refresh_token into the storage with reuse (without refresh token rotation)', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + refresh_token: 'dummy_refresh_token', + id_token: 'some-id-token', + }; + + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + const callbackContext = { + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + allowUnsafeReuseRefreshToken: true, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({ keys: [] } as JwtKeys) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe(() => { + expect(storagePersistenceServiceSpy.calls.allArgs()).toEqual([ + ['authnResult', DUMMY_AUTH_RESULT, allconfigs[0]], + ['reusable_refresh_token', 'dummy_refresh_token', allconfigs[0]], + ['jwtKeys', { keys: [] }, allconfigs[0]], + ]); + // write authnResult & refresh_token & jwtKeys + expect(storagePersistenceServiceSpy).toHaveBeenCalledTimes(3); + }); + })); + + it('resetBrowserHistory if historyCleanup is turned on and is not in a renewProcess', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + id_token: 'some-id-token', + }; + const callbackContext = { + isRenewProcess: false, + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: false, + }, + ]; + + const windowSpy = spyOn(window.history, 'replaceState'); + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({ keys: [] } as JwtKeys) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe(() => { + expect(windowSpy).toHaveBeenCalledTimes(1); + }); + })); + + it('returns callbackContext with jwtkeys filled if everything works fine', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + id_token: 'some-id-token', + }; + + const callbackContext = { + isRenewProcess: false, + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: false, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({ keys: [{ kty: 'henlo' } as JwtKey] } as JwtKeys) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe((result) => { + expect(result).toEqual({ + isRenewProcess: false, + authResult: DUMMY_AUTH_RESULT, + jwtKeys: { keys: [{ kty: 'henlo' }] }, + } as CallbackContext); + }); + })); + + it('returns error if no jwtKeys have been in the call --> keys are null', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + id_token: 'some-id-token', + }; + + const callbackContext = { + isRenewProcess: false, + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: false, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of({} as JwtKeys) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + error: (err) => { + expect(err.message).toEqual( + `Failed to retrieve signing key with error: Error: Failed to retrieve signing key` + ); + }, + }); + })); + + it('returns error if no jwtKeys have been in the call --> keys throw an error', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + id_token: 'some-id-token', + }; + const callbackContext = { + isRenewProcess: false, + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: false, + }, + ]; + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + throwError(() => new Error('error')) + ); + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + error: (err) => { + expect(err.message).toEqual( + `Failed to retrieve signing key with error: Error: Error: error` + ); + }, + }); + })); + + it('returns error if callbackContext.authresult has an error property filled', waitForAsync(() => { + const callbackContext = { + authResult: { error: 'someError' }, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + error: (err) => { + expect(err.message).toEqual( + `AuthCallback AuthResult came with error: someError` + ); + }, + }); + })); + + it('calls resetAuthorizationData, resets nonce and authStateService in case of an error', waitForAsync(() => { + const callbackContext = { + authResult: { error: 'someError' }, + isRenewProcess: false, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const setNonceSpy = spyOn(flowsDataService, 'setNonce'); + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + error: () => { + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(1); + expect(setNonceSpy).toHaveBeenCalledTimes(1); + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + validationResult: ValidationResult.SecureTokenServerError, + isRenewProcess: false, + }); + }, + }); + })); + + it('calls authStateService.updateAndPublishAuthState with login required if the error is `login_required`', waitForAsync(() => { + const callbackContext = { + authResult: { error: 'login_required' }, + isRenewProcess: false, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const setNonceSpy = spyOn(flowsDataService, 'setNonce'); + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + + service + .callbackHistoryAndResetJwtKeys( + callbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + error: () => { + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(1); + expect(setNonceSpy).toHaveBeenCalledTimes(1); + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + validationResult: ValidationResult.LoginRequired, + isRenewProcess: false, + }); + }, + }); + })); + + it('should store jwtKeys', waitForAsync(() => { + const DUMMY_AUTH_RESULT = { + id_token: 'some-id-token', + }; + + const initialCallbackContext = { + authResult: DUMMY_AUTH_RESULT, + } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + of(DUMMY_JWT_KEYS) + ); + + service + .callbackHistoryAndResetJwtKeys( + initialCallbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + next: (callbackContext: CallbackContext) => { + expect(storagePersistenceServiceSpy).toHaveBeenCalledTimes(2); + expect(storagePersistenceServiceSpy.calls.allArgs()).toEqual([ + ['authnResult', DUMMY_AUTH_RESULT, allconfigs[0]], + ['jwtKeys', DUMMY_JWT_KEYS, allconfigs[0]], + ]); + + expect(callbackContext.jwtKeys).toEqual(DUMMY_JWT_KEYS); + }, + error: (err) => { + expect(err).toBeFalsy(); + }, + }); + })); + + it('should not store jwtKeys on error', waitForAsync(() => { + const authResult = { + id_token: 'some-id-token', + access_token: 'some-access-token', + } as AuthResult; + const initialCallbackContext = { + authResult, + } as CallbackContext; + + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + throwError(() => new Error('Error')) + ); + + service + .callbackHistoryAndResetJwtKeys( + initialCallbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + next: (callbackContext: CallbackContext) => { + expect(callbackContext).toBeFalsy(); + }, + error: (err) => { + expect(err).toBeTruthy(); + + // storagePersistenceService.write() should not have been called with jwtKeys + expect(storagePersistenceServiceSpy).toHaveBeenCalledOnceWith( + 'authnResult', + authResult, + allconfigs[0] + ); + }, + }); + })); + + it('should fallback to stored jwtKeys on error', waitForAsync(() => { + const authResult = { + id_token: 'some-id-token', + access_token: 'some-access-token', + } as AuthResult; + const initialCallbackContext = { + authResult, + } as CallbackContext; + + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'read' + ); + + storagePersistenceServiceSpy.and.returnValue(DUMMY_JWT_KEYS); + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + throwError(() => new Error('Error')) + ); + + service + .callbackHistoryAndResetJwtKeys( + initialCallbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + next: (callbackContext: CallbackContext) => { + expect(storagePersistenceServiceSpy).toHaveBeenCalledOnceWith( + 'jwtKeys', + allconfigs[0] + ); + expect(callbackContext.jwtKeys).toEqual(DUMMY_JWT_KEYS); + }, + error: (err) => { + expect(err).toBeFalsy(); + }, + }); + })); + + it('should throw error if no jwtKeys are stored', waitForAsync(() => { + const authResult = { + id_token: 'some-id-token', + access_token: 'some-access-token', + } as AuthResult; + + const initialCallbackContext = { authResult } as CallbackContext; + const allconfigs = [ + { + configId: 'configId1', + historyCleanupOff: true, + }, + ]; + + spyOn(storagePersistenceService, 'read').and.returnValue(null); + spyOn(signInKeyDataService, 'getSigningKeys').and.returnValue( + throwError(() => new Error('Error')) + ); + + service + .callbackHistoryAndResetJwtKeys( + initialCallbackContext, + allconfigs[0], + allconfigs + ) + .subscribe({ + next: (callbackContext: CallbackContext) => { + expect(callbackContext).toBeFalsy(); + }, + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + }); + + describe('historyCleanUpTurnedOn ', () => { + it('check for false if historyCleanUpTurnedOn is on', () => { + const config = { + configId: 'configId1', + historyCleanupOff: true, + }; + + const value = (service as any).historyCleanUpTurnedOn(config); + + expect(value).toEqual(false); + }); + + it('check for true if historyCleanUpTurnedOn is off', () => { + const config = { + configId: 'configId1', + historyCleanupOff: false, + }; + + const value = (service as any).historyCleanUpTurnedOn(config); + + expect(value).toEqual(true); + }); + }); +}); diff --git a/src/flows/callback-handling/history-jwt-keys-callback-handler.service.ts b/src/flows/callback-handling/history-jwt-keys-callback-handler.service.ts new file mode 100644 index 0000000..5dba20f --- /dev/null +++ b/src/flows/callback-handling/history-jwt-keys-callback-handler.service.ts @@ -0,0 +1,186 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { catchError, switchMap, tap } from 'rxjs/operators'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { JwtKeys } from '../../validation/jwtkeys'; +import { ValidationResult } from '../../validation/validation-result'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; +import { SigninKeyDataService } from '../signin-key-data.service'; + +const JWT_KEYS = 'jwtKeys'; + +@Injectable() +export class HistoryJwtKeysCallbackHandlerService { + private readonly loggerService = inject(LoggerService); + + private readonly authStateService = inject(AuthStateService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly signInKeyDataService = inject(SigninKeyDataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly document = inject(DOCUMENT); + + // STEP 3 Code Flow, STEP 2 Implicit Flow, STEP 3 Refresh Token + callbackHistoryAndResetJwtKeys( + callbackContext: CallbackContext, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + let toWrite = { ...callbackContext.authResult }; + + if (!this.responseHasIdToken(callbackContext)) { + const existingIdToken = this.storagePersistenceService.getIdToken(config); + + toWrite = { + ...toWrite, + id_token: existingIdToken, + }; + } + + this.storagePersistenceService.write('authnResult', toWrite, config); + + if ( + config.allowUnsafeReuseRefreshToken && + callbackContext.authResult?.refresh_token + ) { + this.storagePersistenceService.write( + 'reusable_refresh_token', + callbackContext.authResult.refresh_token, + config + ); + } + + if ( + this.historyCleanUpTurnedOn(config) && + !callbackContext.isRenewProcess + ) { + this.resetBrowserHistory(); + } else { + this.loggerService.logDebug(config, 'history clean up inactive'); + } + + if (callbackContext.authResult?.error) { + const errorMessage = `AuthCallback AuthResult came with error: ${callbackContext.authResult.error}`; + + this.loggerService.logDebug(config, errorMessage); + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + this.flowsDataService.setNonce('', config); + this.handleResultErrorFromCallback( + callbackContext.authResult, + callbackContext.isRenewProcess + ); + + return throwError(() => new Error(errorMessage)); + } + + this.loggerService.logDebug( + config, + `AuthResult '${JSON.stringify(callbackContext.authResult, null, 2)}'. + AuthCallback created, begin token validation` + ); + + return this.signInKeyDataService.getSigningKeys(config).pipe( + tap((jwtKeys: JwtKeys) => this.storeSigningKeys(jwtKeys, config)), + catchError((err) => { + // fallback: try to load jwtKeys from storage + const storedJwtKeys = this.readSigningKeys(config); + + if (!!storedJwtKeys) { + this.loggerService.logWarning( + config, + `Failed to retrieve signing keys, fallback to stored keys` + ); + + return of(storedJwtKeys); + } + + return throwError(() => new Error(err)); + }), + switchMap((jwtKeys) => { + if (jwtKeys) { + callbackContext.jwtKeys = jwtKeys; + + return of(callbackContext); + } + + const errorMessage = `Failed to retrieve signing key`; + + this.loggerService.logWarning(config, errorMessage); + + return throwError(() => new Error(errorMessage)); + }), + catchError((err) => { + const errorMessage = `Failed to retrieve signing key with error: ${err}`; + + this.loggerService.logWarning(config, errorMessage); + + return throwError(() => new Error(errorMessage)); + }) + ); + } + + private responseHasIdToken(callbackContext: CallbackContext): boolean { + return !!callbackContext?.authResult?.id_token; + } + + private handleResultErrorFromCallback( + result: unknown, + isRenewProcess: boolean + ): void { + let validationResult = ValidationResult.SecureTokenServerError; + + if ( + result && + typeof result === 'object' && + 'error' in result && + (result.error as string) === 'login_required' + ) { + validationResult = ValidationResult.LoginRequired; + } + + this.authStateService.updateAndPublishAuthState({ + isAuthenticated: false, + validationResult, + isRenewProcess, + }); + } + + private historyCleanUpTurnedOn(config: OpenIdConfiguration): boolean { + const { historyCleanupOff } = config; + + return !historyCleanupOff; + } + + private resetBrowserHistory(): void { + this.document.defaultView?.history.replaceState( + {}, + this.document.title, + this.document.defaultView.location.origin + + this.document.defaultView.location.pathname + ); + } + + private storeSigningKeys( + jwtKeys: JwtKeys, + config: OpenIdConfiguration + ): void { + this.storagePersistenceService.write(JWT_KEYS, jwtKeys, config); + } + + private readSigningKeys(config: OpenIdConfiguration): any { + return this.storagePersistenceService.read(JWT_KEYS, config); + } +} diff --git a/src/flows/callback-handling/implicit-flow-callback-handler.service.spec.ts b/src/flows/callback-handling/implicit-flow-callback-handler.service.spec.ts new file mode 100644 index 0000000..1feec31 --- /dev/null +++ b/src/flows/callback-handling/implicit-flow-callback-handler.service.spec.ts @@ -0,0 +1,142 @@ +import { DOCUMENT } from '../../dom'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { LoggerService } from '../../logging/logger.service'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; +import { ImplicitFlowCallbackHandlerService } from './implicit-flow-callback-handler.service'; + +describe('ImplicitFlowCallbackHandlerService', () => { + let service: ImplicitFlowCallbackHandlerService; + let flowsDataService: FlowsDataService; + let resetAuthDataService: ResetAuthDataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ImplicitFlowCallbackHandlerService, + mockProvider(FlowsDataService), + mockProvider(ResetAuthDataService), + mockProvider(LoggerService), + { + provide: DOCUMENT, + useValue: { + location: { + get hash(): string { + return '&anyFakeHash'; + }, + set hash(_value) { + // ... + }, + }, + }, + }, + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(ImplicitFlowCallbackHandlerService); + flowsDataService = TestBed.inject(FlowsDataService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('implicitFlowCallback', () => { + it('calls "resetAuthorizationData" if silent renew is not running', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const allconfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .implicitFlowCallback(allconfigs[0], allconfigs, 'any-hash') + .subscribe(() => { + expect(resetAuthorizationDataSpy).toHaveBeenCalled(); + }); + })); + + it('does NOT calls "resetAuthorizationData" if silent renew is running', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const allconfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .implicitFlowCallback(allconfigs[0], allconfigs, 'any-hash') + .subscribe(() => { + expect(resetAuthorizationDataSpy).not.toHaveBeenCalled(); + }); + })); + + it('returns callbackContext if all params are good', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + const expectedCallbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: { anyHash: '' }, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + } as CallbackContext; + + const allconfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .implicitFlowCallback(allconfigs[0], allconfigs, 'anyHash') + .subscribe((callbackContext) => { + expect(callbackContext).toEqual(expectedCallbackContext); + }); + })); + + it('uses window location hash if no hash is passed', waitForAsync(() => { + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + const expectedCallbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: { anyFakeHash: '' }, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + } as CallbackContext; + + const allconfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .implicitFlowCallback(allconfigs[0], allconfigs) + .subscribe((callbackContext) => { + expect(callbackContext).toEqual(expectedCallbackContext); + }); + })); + }); +}); diff --git a/src/flows/callback-handling/implicit-flow-callback-handler.service.ts b/src/flows/callback-handling/implicit-flow-callback-handler.service.ts new file mode 100644 index 0000000..a676f0d --- /dev/null +++ b/src/flows/callback-handling/implicit-flow-callback-handler.service.ts @@ -0,0 +1,61 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of } from 'rxjs'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { AuthResult, CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; + +@Injectable() +export class ImplicitFlowCallbackHandlerService { + private readonly loggerService = inject(LoggerService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly document = inject(DOCUMENT); + + // STEP 1 Code Flow + // STEP 1 Implicit Flow + implicitFlowCallback( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + hash?: string + ): Observable { + const isRenewProcessData = + this.flowsDataService.isSilentRenewRunning(config); + + this.loggerService.logDebug(config, 'BEGIN callback, no auth data'); + if (!isRenewProcessData) { + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + } + + hash = hash || this.document.location.hash.substring(1); + + const authResult = hash + .split('&') + .reduce((resultData: any, item: string) => { + const parts = item.split('='); + + resultData[parts.shift() as string] = parts.join('='); + + return resultData; + }, {} as AuthResult); + + const callbackContext: CallbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult, + isRenewProcess: isRenewProcessData, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + return of(callbackContext); + } +} diff --git a/src/flows/callback-handling/refresh-session-callback-handler.service.spec.ts b/src/flows/callback-handling/refresh-session-callback-handler.service.spec.ts new file mode 100644 index 0000000..9973dc3 --- /dev/null +++ b/src/flows/callback-handling/refresh-session-callback-handler.service.spec.ts @@ -0,0 +1,82 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { LoggerService } from '../../logging/logger.service'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { RefreshSessionCallbackHandlerService } from './refresh-session-callback-handler.service'; + +describe('RefreshSessionCallbackHandlerService', () => { + let service: RefreshSessionCallbackHandlerService; + let flowsDataService: FlowsDataService; + let authStateService: AuthStateService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + RefreshSessionCallbackHandlerService, + mockProvider(AuthStateService), + mockProvider(LoggerService), + mockProvider(FlowsDataService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(RefreshSessionCallbackHandlerService); + flowsDataService = TestBed.inject(FlowsDataService); + authStateService = TestBed.inject(AuthStateService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('refreshSessionWithRefreshTokens', () => { + it('returns callbackContext if all params are good', waitForAsync(() => { + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('state-data'); + spyOn(authStateService, 'getRefreshToken').and.returnValue( + 'henlo-furiend' + ); + spyOn(authStateService, 'getIdToken').and.returnValue('henlo-legger'); + + const expectedCallbackContext = { + code: '', + refreshToken: 'henlo-furiend', + state: 'state-data', + sessionState: null, + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: 'henlo-legger', + } as CallbackContext; + + service + .refreshSessionWithRefreshTokens({ configId: 'configId1' }) + .subscribe((callbackContext) => { + expect(callbackContext).toEqual(expectedCallbackContext); + }); + })); + + it('throws error if no refresh token is given', waitForAsync(() => { + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('state-data'); + spyOn(authStateService, 'getRefreshToken').and.returnValue(''); + spyOn(authStateService, 'getIdToken').and.returnValue('henlo-legger'); + + service + .refreshSessionWithRefreshTokens({ configId: 'configId1' }) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + }); +}); diff --git a/src/flows/callback-handling/refresh-session-callback-handler.service.ts b/src/flows/callback-handling/refresh-session-callback-handler.service.ts new file mode 100644 index 0000000..075f1f3 --- /dev/null +++ b/src/flows/callback-handling/refresh-session-callback-handler.service.ts @@ -0,0 +1,64 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { TokenValidationService } from '../../validation/token-validation.service'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; + +@Injectable() +export class RefreshSessionCallbackHandlerService { + private readonly loggerService = inject(LoggerService); + + private readonly authStateService = inject(AuthStateService); + + private readonly flowsDataService = inject(FlowsDataService); + + // STEP 1 Refresh session + refreshSessionWithRefreshTokens( + config: OpenIdConfiguration + ): Observable { + const stateData = + this.flowsDataService.getExistingOrCreateAuthStateControl(config); + + this.loggerService.logDebug( + config, + 'RefreshSession created. Adding myautostate: ' + stateData + ); + const refreshToken = this.authStateService.getRefreshToken(config); + const idToken = this.authStateService.getIdToken(config); + + if (refreshToken) { + const callbackContext: CallbackContext = { + code: '', + refreshToken, + state: stateData, + sessionState: null, + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: idToken, + }; + + this.loggerService.logDebug( + config, + 'found refresh code, obtaining new credentials with refresh code' + ); + // Nonce is not used with refresh tokens; but Key cloak may send it anyway + this.flowsDataService.setNonce( + TokenValidationService.refreshTokenNoncePlaceholder, + config + ); + + return of(callbackContext); + } else { + const errorMessage = 'no refresh token found, please login'; + + this.loggerService.logError(config, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + } +} diff --git a/src/flows/callback-handling/refresh-token-callback-handler.service.spec.ts b/src/flows/callback-handling/refresh-token-callback-handler.service.spec.ts new file mode 100644 index 0000000..dff9ccf --- /dev/null +++ b/src/flows/callback-handling/refresh-token-callback-handler.service.spec.ts @@ -0,0 +1,178 @@ +import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { createRetriableStream } from '../../../test/create-retriable-stream.helper'; +import { DataService } from '../../api/data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { CallbackContext } from '../callback-context'; +import { RefreshTokenCallbackHandlerService } from './refresh-token-callback-handler.service'; + +describe('RefreshTokenCallbackHandlerService', () => { + let service: RefreshTokenCallbackHandlerService; + let storagePersistenceService: StoragePersistenceService; + let dataService: DataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + RefreshTokenCallbackHandlerService, + mockProvider(UrlService), + mockProvider(LoggerService), + mockProvider(DataService), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(RefreshTokenCallbackHandlerService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + dataService = TestBed.inject(DataService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('refreshTokensRequestTokens', () => { + const HTTP_ERROR = new HttpErrorResponse({}); + const CONNECTION_ERROR = new HttpErrorResponse({ + error: new ProgressEvent('error'), + status: 0, + statusText: 'Unknown Error', + url: 'https://identity-server.test/openid-connect/token', + }); + + it('throws error if no tokenEndpoint is given', waitForAsync(() => { + (service as any) + .refreshTokensRequestTokens({} as CallbackContext) + .subscribe({ + error: (err: unknown) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('calls data service if all params are good', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue(of({})); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service + .refreshTokensRequestTokens({} as CallbackContext, { + configId: 'configId1', + }) + .subscribe(() => { + expect(postSpy).toHaveBeenCalledOnceWith( + 'tokenEndpoint', + undefined, + { configId: 'configId1' }, + jasmine.any(HttpHeaders) + ); + const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders; + + expect(httpHeaders.has('Content-Type')).toBeTrue(); + expect(httpHeaders.get('Content-Type')).toBe( + 'application/x-www-form-urlencoded' + ); + }); + })); + + it('calls data service with correct headers if all params are good', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue(of({})); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service + .refreshTokensRequestTokens({} as CallbackContext, { + configId: 'configId1', + }) + .subscribe(() => { + const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders; + + expect(httpHeaders.has('Content-Type')).toBeTrue(); + expect(httpHeaders.get('Content-Type')).toBe( + 'application/x-www-form-urlencoded' + ); + }); + })); + + it('returns error in case of http error', waitForAsync(() => { + spyOn(dataService, 'post').and.returnValue(throwError(() => HTTP_ERROR)); + const config = { configId: 'configId1', authority: 'authority' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service + .refreshTokensRequestTokens({} as CallbackContext, config) + .subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('retries request in case of no connection http error and succeeds', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => CONNECTION_ERROR), + of({}) + ) + ); + const config = { configId: 'configId1', authority: 'authority' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service + .refreshTokensRequestTokens({} as CallbackContext, config) + .subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(postSpy).toHaveBeenCalledTimes(1); + }, + error: (err) => { + // fails if there should be a result + expect(err).toBeFalsy(); + }, + }); + })); + + it('retries request in case of no connection http error and fails because of http error afterwards', waitForAsync(() => { + const postSpy = spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => CONNECTION_ERROR), + throwError(() => HTTP_ERROR) + ) + ); + const config = { configId: 'configId1', authority: 'authority' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ tokenEndpoint: 'tokenEndpoint' }); + + service + .refreshTokensRequestTokens({} as CallbackContext, config) + .subscribe({ + next: (res) => { + // fails if there should be a result + expect(res).toBeFalsy(); + }, + error: (err) => { + expect(err).toBeTruthy(); + expect(postSpy).toHaveBeenCalledTimes(1); + }, + }); + })); + }); +}); diff --git a/src/flows/callback-handling/refresh-token-callback-handler.service.ts b/src/flows/callback-handling/refresh-token-callback-handler.service.ts new file mode 100644 index 0000000..df786f6 --- /dev/null +++ b/src/flows/callback-handling/refresh-token-callback-handler.service.ts @@ -0,0 +1,100 @@ +import { HttpHeaders } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError, timer } from 'rxjs'; +import { catchError, mergeMap, retryWhen, switchMap } from 'rxjs/operators'; +import { DataService } from '../../api/data.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { AuthResult, CallbackContext } from '../callback-context'; +import { isNetworkError } from './error-helper'; + +@Injectable() +export class RefreshTokenCallbackHandlerService { + private readonly urlService = inject(UrlService); + + private readonly loggerService = inject(LoggerService); + + private readonly dataService = inject(DataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + // STEP 2 Refresh Token + refreshTokensRequestTokens( + callbackContext: CallbackContext, + config: OpenIdConfiguration, + customParamsRefresh?: { [key: string]: string | number | boolean } + ): Observable { + let headers: HttpHeaders = new HttpHeaders(); + + headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); + + const authWellknownEndpoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + config + ); + const tokenEndpoint = authWellknownEndpoints?.tokenEndpoint; + + if (!tokenEndpoint) { + return throwError(() => new Error('Token Endpoint not defined')); + } + + const data = this.urlService.createBodyForCodeFlowRefreshTokensRequest( + callbackContext.refreshToken, + config, + customParamsRefresh + ); + + return this.dataService + .post(tokenEndpoint, data, config, headers) + .pipe( + switchMap((response) => { + this.loggerService.logDebug( + config, + `token refresh response: ${response}` + ); + + if (response) { + response.state = callbackContext.state; + } + + callbackContext.authResult = response; + + return of(callbackContext); + }), + retryWhen((error) => this.handleRefreshRetry(error, config)), + catchError((error) => { + const { authority } = config; + const errorMessage = `OidcService code request ${authority}`; + + this.loggerService.logError(config, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }) + ); + } + + private handleRefreshRetry( + errors: Observable, + config: OpenIdConfiguration + ): Observable { + return errors.pipe( + mergeMap((error) => { + // retry token refresh if there is no internet connection + if (isNetworkError(error)) { + const { authority, refreshTokenRetryInSeconds } = config; + const errorMessage = `OidcService code request ${authority} - no internet connection`; + + this.loggerService.logWarning(config, errorMessage, error); + + return timer((refreshTokenRetryInSeconds ?? 0) * 1000); + } + + return throwError(() => error); + }) + ); + } +} diff --git a/src/flows/callback-handling/state-validation-callback-handler.service.spec.ts b/src/flows/callback-handling/state-validation-callback-handler.service.spec.ts new file mode 100644 index 0000000..2bd4077 --- /dev/null +++ b/src/flows/callback-handling/state-validation-callback-handler.service.spec.ts @@ -0,0 +1,146 @@ +import { DOCUMENT } from '../../dom'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StateValidationResult } from '../../validation/state-validation-result'; +import { StateValidationService } from '../../validation/state-validation.service'; +import { ValidationResult } from '../../validation/validation-result'; +import { CallbackContext } from '../callback-context'; +import { ResetAuthDataService } from '../reset-auth-data.service'; +import { StateValidationCallbackHandlerService } from './state-validation-callback-handler.service'; + +describe('StateValidationCallbackHandlerService', () => { + let service: StateValidationCallbackHandlerService; + let stateValidationService: StateValidationService; + let loggerService: LoggerService; + let authStateService: AuthStateService; + let resetAuthDataService: ResetAuthDataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + StateValidationCallbackHandlerService, + mockProvider(LoggerService), + mockProvider(StateValidationService), + mockProvider(AuthStateService), + mockProvider(ResetAuthDataService), + { + provide: DOCUMENT, + useValue: { + location: { + get hash(): string { + return '&anyFakeHash'; + }, + set hash(_value) { + // ... + }, + }, + }, + }, + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(StateValidationCallbackHandlerService); + stateValidationService = TestBed.inject(StateValidationService); + loggerService = TestBed.inject(LoggerService); + authStateService = TestBed.inject(AuthStateService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('callbackStateValidation', () => { + it('returns callbackContext with validationResult if validationResult is valid', waitForAsync(() => { + spyOn(stateValidationService, 'getValidatedStateResult').and.returnValue( + of({ + idToken: 'idTokenJustForTesting', + authResponseIsValid: true, + } as StateValidationResult) + ); + const allConfigs = [{ configId: 'configId1' }]; + + service + .callbackStateValidation( + {} as CallbackContext, + allConfigs[0], + allConfigs + ) + .subscribe((newCallbackContext) => { + expect(newCallbackContext).toEqual({ + validationResult: { + idToken: 'idTokenJustForTesting', + authResponseIsValid: true, + }, + } as CallbackContext); + }); + })); + + it('logs error in case of an error', waitForAsync(() => { + spyOn(stateValidationService, 'getValidatedStateResult').and.returnValue( + of({ + authResponseIsValid: false, + } as StateValidationResult) + ); + + const loggerSpy = spyOn(loggerService, 'logWarning'); + const allConfigs = [{ configId: 'configId1' }]; + + service + .callbackStateValidation( + {} as CallbackContext, + allConfigs[0], + allConfigs + ) + .subscribe({ + error: () => { + expect(loggerSpy).toHaveBeenCalledOnceWith( + allConfigs[0], + 'authorizedCallback, token(s) validation failed, resetting. Hash: &anyFakeHash' + ); + }, + }); + })); + + it('calls resetAuthDataService.resetAuthorizationData and authStateService.updateAndPublishAuthState in case of an error', waitForAsync(() => { + spyOn(stateValidationService, 'getValidatedStateResult').and.returnValue( + of({ + authResponseIsValid: false, + state: ValidationResult.LoginRequired, + } as StateValidationResult) + ); + + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + const allConfigs = [{ configId: 'configId1' }]; + + service + .callbackStateValidation( + { isRenewProcess: true } as CallbackContext, + allConfigs[0], + allConfigs + ) + .subscribe({ + error: () => { + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(1); + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + validationResult: ValidationResult.LoginRequired, + isRenewProcess: true, + }); + }, + }); + })); + }); +}); diff --git a/src/flows/callback-handling/state-validation-callback-handler.service.ts b/src/flows/callback-handling/state-validation-callback-handler.service.ts new file mode 100644 index 0000000..bc4c828 --- /dev/null +++ b/src/flows/callback-handling/state-validation-callback-handler.service.ts @@ -0,0 +1,75 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StateValidationResult } from '../../validation/state-validation-result'; +import { StateValidationService } from '../../validation/state-validation.service'; +import { CallbackContext } from '../callback-context'; +import { ResetAuthDataService } from '../reset-auth-data.service'; + +@Injectable() +export class StateValidationCallbackHandlerService { + private readonly loggerService = inject(LoggerService); + + private readonly stateValidationService = inject(StateValidationService); + + private readonly authStateService = inject(AuthStateService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly document = inject(DOCUMENT); + + // STEP 4 All flows + callbackStateValidation( + callbackContext: CallbackContext, + configuration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + return this.stateValidationService + .getValidatedStateResult(callbackContext, configuration) + .pipe( + map((validationResult: StateValidationResult) => { + callbackContext.validationResult = validationResult; + + if (validationResult.authResponseIsValid) { + this.authStateService.setAuthorizationData( + validationResult.accessToken, + callbackContext.authResult, + configuration, + allConfigs + ); + + return callbackContext; + } else { + const errorMessage = `authorizedCallback, token(s) validation failed, resetting. Hash: ${this.document.location.hash}`; + + this.loggerService.logWarning(configuration, errorMessage); + this.resetAuthDataService.resetAuthorizationData( + configuration, + allConfigs + ); + this.publishUnauthorizedState( + callbackContext.validationResult, + callbackContext.isRenewProcess + ); + + throw new Error(errorMessage); + } + }) + ); + } + + private publishUnauthorizedState( + stateValidationResult: StateValidationResult, + isRenewProcess: boolean + ): void { + this.authStateService.updateAndPublishAuthState({ + isAuthenticated: false, + validationResult: stateValidationResult.state, + isRenewProcess, + }); + } +} diff --git a/src/flows/callback-handling/user-callback-handler.service.spec.ts b/src/flows/callback-handling/user-callback-handler.service.spec.ts new file mode 100644 index 0000000..5696a6c --- /dev/null +++ b/src/flows/callback-handling/user-callback-handler.service.spec.ts @@ -0,0 +1,457 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { LoggerService } from '../../logging/logger.service'; +import { UserService } from '../../user-data/user.service'; +import { StateValidationResult } from '../../validation/state-validation-result'; +import { ValidationResult } from '../../validation/validation-result'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; +import { UserCallbackHandlerService } from './user-callback-handler.service'; + +describe('UserCallbackHandlerService', () => { + let service: UserCallbackHandlerService; + let authStateService: AuthStateService; + let flowsDataService: FlowsDataService; + let userService: UserService; + let resetAuthDataService: ResetAuthDataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + UserCallbackHandlerService, + mockProvider(LoggerService), + mockProvider(AuthStateService), + mockProvider(FlowsDataService), + mockProvider(UserService), + mockProvider(ResetAuthDataService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(UserCallbackHandlerService); + flowsDataService = TestBed.inject(FlowsDataService); + authStateService = TestBed.inject(AuthStateService); + userService = TestBed.inject(UserService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('callbackUser', () => { + it('calls flowsDataService.setSessionState with correct params if autoUserInfo is false, isRenewProcess is false and refreshToken is null', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded' + ); + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: '', + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: false, + }, + ]; + + const spy = spyOn(flowsDataService, 'setSessionState'); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(spy).toHaveBeenCalledOnceWith('mystate', allConfigs[0]); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('does NOT call flowsDataService.setSessionState if autoUserInfo is false, isRenewProcess is true and refreshToken is null', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded' + ); + const callbackContext = { + code: '', + refreshToken: '', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: true, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: false, + }, + ]; + const spy = spyOn(flowsDataService, 'setSessionState'); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(spy).not.toHaveBeenCalled(); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('does NOT call flowsDataService.setSessionState if autoUserInfo is false isRenewProcess is false, refreshToken has value', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded' + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: false, + }, + ]; + const spy = spyOn(flowsDataService, 'setSessionState'); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(spy).not.toHaveBeenCalled(); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('does NOT call flowsDataService.setSessionState if autoUserInfo is false isRenewProcess is false, refreshToken has value, id_token is false', waitForAsync(() => { + const svr = new StateValidationResult('accesstoken', '', true, ''); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: false, + }, + ]; + + const spy = spyOn(flowsDataService, 'setSessionState'); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(spy).not.toHaveBeenCalled(); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('calls authStateService.updateAndPublishAuthState with correct params if autoUserInfo is false', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded' + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: false, + }, + ]; + + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: true, + validationResult: ValidationResult.NotSet, + isRenewProcess: false, + }); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('calls userService.getAndPersistUserDataInStore with correct params if autoUserInfo is true', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded' + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: true, + }, + ]; + + const getAndPersistUserDataInStoreSpy = spyOn( + userService, + 'getAndPersistUserDataInStore' + ).and.returnValue(of({ user: 'some_data' })); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(getAndPersistUserDataInStoreSpy).toHaveBeenCalledOnceWith( + allConfigs[0], + allConfigs, + false, + 'idtoken', + 'decoded' + ); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('calls authStateService.updateAndPublishAuthState with correct params if autoUserInfo is true', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded', + ValidationResult.MaxOffsetExpired + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: true, + }, + ]; + + spyOn(userService, 'getAndPersistUserDataInStore').and.returnValue( + of({ user: 'some_data' }) + ); + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: true, + validationResult: ValidationResult.MaxOffsetExpired, + isRenewProcess: false, + }); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('calls flowsDataService.setSessionState with correct params if user data is present and NOT refresh token', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded', + ValidationResult.MaxOffsetExpired + ); + const callbackContext = { + code: '', + refreshToken: '', // something falsy + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: true, + }, + ]; + + spyOn(userService, 'getAndPersistUserDataInStore').and.returnValue( + of({ user: 'some_data' }) + ); + const setSessionStateSpy = spyOn(flowsDataService, 'setSessionState'); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe((resultCallbackContext) => { + expect(setSessionStateSpy).toHaveBeenCalledOnceWith( + 'mystate', + allConfigs[0] + ); + expect(resultCallbackContext).toEqual(callbackContext); + }); + })); + + it('calls authStateService.publishUnauthorizedState with correct params if user info which are coming back are null', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded', + ValidationResult.MaxOffsetExpired + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: true, + }, + ]; + + spyOn(userService, 'getAndPersistUserDataInStore').and.returnValue( + of(null) + ); + const updateAndPublishAuthStateSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe({ + error: (err) => { + expect(updateAndPublishAuthStateSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + validationResult: ValidationResult.MaxOffsetExpired, + isRenewProcess: false, + }); + expect(err.message).toEqual( + 'Failed to retrieve user info with error: Error: Called for userData but they were null' + ); + }, + }); + })); + + it('calls resetAuthDataService.resetAuthorizationData if user info which are coming back are null', waitForAsync(() => { + const svr = new StateValidationResult( + 'accesstoken', + 'idtoken', + true, + 'decoded', + ValidationResult.MaxOffsetExpired + ); + const callbackContext = { + code: '', + refreshToken: 'somerefreshtoken', + state: '', + sessionState: null, + authResult: { session_state: 'mystate' }, + isRenewProcess: false, + jwtKeys: null, + validationResult: svr, + existingIdToken: null, + } as CallbackContext; + + const allConfigs = [ + { + configId: 'configId1', + autoUserInfo: true, + }, + ]; + + spyOn(userService, 'getAndPersistUserDataInStore').and.returnValue( + of(null) + ); + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + + service + .callbackUser(callbackContext, allConfigs[0], allConfigs) + .subscribe({ + error: (err) => { + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(1); + expect(err.message).toEqual( + 'Failed to retrieve user info with error: Error: Called for userData but they were null' + ); + }, + }); + })); + }); +}); diff --git a/src/flows/callback-handling/user-callback-handler.service.ts b/src/flows/callback-handling/user-callback-handler.service.ts new file mode 100644 index 0000000..ea0fa10 --- /dev/null +++ b/src/flows/callback-handling/user-callback-handler.service.ts @@ -0,0 +1,132 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { catchError, switchMap } from 'rxjs/operators'; +import { AuthStateService } from '../../auth-state/auth-state.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { UserService } from '../../user-data/user.service'; +import { StateValidationResult } from '../../validation/state-validation-result'; +import { CallbackContext } from '../callback-context'; +import { FlowsDataService } from '../flows-data.service'; +import { ResetAuthDataService } from '../reset-auth-data.service'; + +@Injectable() +export class UserCallbackHandlerService { + private readonly loggerService = inject(LoggerService); + + private readonly authStateService = inject(AuthStateService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly userService = inject(UserService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + // STEP 5 userData + callbackUser( + callbackContext: CallbackContext, + configuration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const { isRenewProcess, validationResult, authResult, refreshToken } = + callbackContext; + const { autoUserInfo, renewUserInfoAfterTokenRenew } = configuration; + + if (!autoUserInfo) { + if (!isRenewProcess || renewUserInfoAfterTokenRenew) { + // userData is set to the id_token decoded, auto get user data set to false + if (validationResult?.decodedIdToken) { + this.userService.setUserDataToStore( + validationResult.decodedIdToken, + configuration, + allConfigs + ); + } + } + + if (!isRenewProcess && !refreshToken) { + this.flowsDataService.setSessionState( + authResult?.session_state, + configuration + ); + } + + this.publishAuthState(validationResult, isRenewProcess); + + return of(callbackContext); + } + + return this.userService + .getAndPersistUserDataInStore( + configuration, + allConfigs, + isRenewProcess, + validationResult?.idToken, + validationResult?.decodedIdToken + ) + .pipe( + switchMap((userData) => { + if (!!userData) { + if (!refreshToken) { + this.flowsDataService.setSessionState( + authResult?.session_state, + configuration + ); + } + + this.publishAuthState(validationResult, isRenewProcess); + + return of(callbackContext); + } else { + this.resetAuthDataService.resetAuthorizationData( + configuration, + allConfigs + ); + this.publishUnauthenticatedState(validationResult, isRenewProcess); + const errorMessage = `Called for userData but they were ${userData}`; + + this.loggerService.logWarning(configuration, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + }), + catchError((err) => { + const errorMessage = `Failed to retrieve user info with error: ${err}`; + + this.loggerService.logWarning(configuration, errorMessage); + + return throwError(() => new Error(errorMessage)); + }) + ); + } + + private publishAuthState( + stateValidationResult: StateValidationResult | null, + isRenewProcess: boolean + ): void { + if (!stateValidationResult) { + return; + } + + this.authStateService.updateAndPublishAuthState({ + isAuthenticated: true, + validationResult: stateValidationResult.state, + isRenewProcess, + }); + } + + private publishUnauthenticatedState( + stateValidationResult: StateValidationResult | null, + isRenewProcess: boolean + ): void { + if (!stateValidationResult) { + return; + } + + this.authStateService.updateAndPublishAuthState({ + isAuthenticated: false, + validationResult: stateValidationResult.state, + isRenewProcess, + }); + } +} diff --git a/src/flows/flows-data.service.spec.ts b/src/flows/flows-data.service.spec.ts new file mode 100644 index 0000000..dc8e258 --- /dev/null +++ b/src/flows/flows-data.service.spec.ts @@ -0,0 +1,333 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { CryptoService } from '../utils/crypto/crypto.service'; +import { FlowsDataService } from './flows-data.service'; +import { RandomService } from './random/random.service'; + +describe('Flows Data Service', () => { + let service: FlowsDataService; + let storagePersistenceService: StoragePersistenceService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + FlowsDataService, + RandomService, + CryptoService, + mockProvider(LoggerService), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(FlowsDataService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + }); + + afterEach(() => { + jasmine.clock().uninstall(); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('createNonce', () => { + it('createNonce returns nonce and stores it', () => { + const spy = spyOn(storagePersistenceService, 'write'); + + const result = service.createNonce({ configId: 'configId1' }); + + expect(result).toBeTruthy(); + expect(spy).toHaveBeenCalledOnceWith('authNonce', result, { + configId: 'configId1', + }); + }); + }); + + describe('AuthStateControl', () => { + it('getAuthStateControl returns property from store', () => { + const spy = spyOn(storagePersistenceService, 'read'); + + service.getAuthStateControl({ configId: 'configId1' }); + + expect(spy).toHaveBeenCalledOnceWith('authStateControl', { + configId: 'configId1', + }); + }); + + it('setAuthStateControl saves property in store', () => { + const spy = spyOn(storagePersistenceService, 'write'); + + service.setAuthStateControl('ToSave', { configId: 'configId1' }); + + expect(spy).toHaveBeenCalledOnceWith('authStateControl', 'ToSave', { + configId: 'configId1', + }); + }); + }); + + describe('getExistingOrCreateAuthStateControl', () => { + it('if nothing stored it creates a 40 char one and saves the authStateControl', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('authStateControl', { configId: 'configId1' }) + .and.returnValue(null); + const setSpy = spyOn(storagePersistenceService, 'write'); + + const result = service.getExistingOrCreateAuthStateControl({ + configId: 'configId1', + }); + + expect(result).toBeTruthy(); + expect(result.length).toBe(41); + expect(setSpy).toHaveBeenCalledOnceWith('authStateControl', result, { + configId: 'configId1', + }); + }); + + it('if stored it returns the value and does NOT Store the value again', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('authStateControl', { configId: 'configId1' }) + .and.returnValue('someAuthStateControl'); + const setSpy = spyOn(storagePersistenceService, 'write'); + + const result = service.getExistingOrCreateAuthStateControl({ + configId: 'configId1', + }); + + expect(result).toEqual('someAuthStateControl'); + expect(result.length).toBe('someAuthStateControl'.length); + expect(setSpy).not.toHaveBeenCalled(); + }); + }); + + describe('setSessionState', () => { + it('setSessionState saves the value in the storage', () => { + const spy = spyOn(storagePersistenceService, 'write'); + + service.setSessionState('Genesis', { configId: 'configId1' }); + + expect(spy).toHaveBeenCalledOnceWith('session_state', 'Genesis', { + configId: 'configId1', + }); + }); + }); + + describe('resetStorageFlowData', () => { + it('resetStorageFlowData calls correct method on storagePersistenceService', () => { + const spy = spyOn(storagePersistenceService, 'resetStorageFlowData'); + + service.resetStorageFlowData({ configId: 'configId1' }); + + expect(spy).toHaveBeenCalled(); + }); + }); + + describe('codeVerifier', () => { + it('getCodeVerifier returns value from the store', () => { + const spy = spyOn(storagePersistenceService, 'read') + .withArgs('codeVerifier', { configId: 'configId1' }) + .and.returnValue('Genesis'); + + const result = service.getCodeVerifier({ configId: 'configId1' }); + + expect(result).toBe('Genesis'); + expect(spy).toHaveBeenCalledOnceWith('codeVerifier', { + configId: 'configId1', + }); + }); + + it('createCodeVerifier returns random createCodeVerifier and stores it', () => { + const setSpy = spyOn(storagePersistenceService, 'write'); + + const result = service.createCodeVerifier({ configId: 'configId1' }); + + expect(result).toBeTruthy(); + expect(result.length).toBe(67); + expect(setSpy).toHaveBeenCalledOnceWith('codeVerifier', result, { + configId: 'configId1', + }); + }); + }); + + describe('isCodeFlowInProgress', () => { + it('checks code flow is in progress and returns result', () => { + const config = { + configId: 'configId1', + }; + + jasmine.clock().uninstall(); + jasmine.clock().install(); + const baseTime = new Date(); + + jasmine.clock().mockDate(baseTime); + + spyOn(storagePersistenceService, 'read') + .withArgs('storageCodeFlowInProgress', config) + .and.returnValue(true); + const spyWrite = spyOn(storagePersistenceService, 'write'); + + const isCodeFlowInProgressResult = service.isCodeFlowInProgress(config); + + expect(spyWrite).not.toHaveBeenCalled(); + expect(isCodeFlowInProgressResult).toBeTrue(); + }); + + it('state object does not exist returns false result', () => { + // arrange + spyOn(storagePersistenceService, 'read') + .withArgs('storageCodeFlowInProgress', { configId: 'configId1' }) + .and.returnValue(null); + + // act + const isCodeFlowInProgressResult = service.isCodeFlowInProgress({ + configId: 'configId1', + }); + + // assert + expect(isCodeFlowInProgressResult).toBeFalse(); + }); + }); + + describe('setCodeFlowInProgress', () => { + it('set setCodeFlowInProgress to `in progress` when called', () => { + jasmine.clock().uninstall(); + jasmine.clock().install(); + const baseTime = new Date(); + + jasmine.clock().mockDate(baseTime); + + const spy = spyOn(storagePersistenceService, 'write'); + + service.setCodeFlowInProgress({ configId: 'configId1' }); + expect(spy).toHaveBeenCalledOnceWith('storageCodeFlowInProgress', true, { + configId: 'configId1', + }); + }); + }); + + describe('resetCodeFlowInProgress', () => { + it('set resetCodeFlowInProgress to false when called', () => { + const spy = spyOn(storagePersistenceService, 'write'); + + service.resetCodeFlowInProgress({ configId: 'configId1' }); + expect(spy).toHaveBeenCalledOnceWith('storageCodeFlowInProgress', false, { + configId: 'configId1', + }); + }); + }); + + describe('isSilentRenewRunning', () => { + it('silent renew process timeout exceeded reset state object and returns false result', () => { + const config = { + silentRenewTimeoutInSeconds: 10, + configId: 'configId1', + }; + + jasmine.clock().uninstall(); + jasmine.clock().install(); + const baseTime = new Date(); + + jasmine.clock().mockDate(baseTime); + + const storageObject = { + state: 'running', + dateOfLaunchedProcessUtc: baseTime.toISOString(), + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('storageSilentRenewRunning', config) + .and.returnValue(JSON.stringify(storageObject)); + const spyWrite = spyOn(storagePersistenceService, 'write'); + + jasmine.clock().tick((config.silentRenewTimeoutInSeconds + 1) * 1000); + + const isSilentRenewRunningResult = service.isSilentRenewRunning(config); + + expect(spyWrite).toHaveBeenCalledOnceWith( + 'storageSilentRenewRunning', + '', + config + ); + expect(isSilentRenewRunningResult).toBeFalse(); + }); + + it('checks silent renew process and returns result', () => { + const config = { + silentRenewTimeoutInSeconds: 10, + configId: 'configId1', + }; + + jasmine.clock().uninstall(); + jasmine.clock().install(); + const baseTime = new Date(); + + jasmine.clock().mockDate(baseTime); + + const storageObject = { + state: 'running', + dateOfLaunchedProcessUtc: baseTime.toISOString(), + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('storageSilentRenewRunning', config) + .and.returnValue(JSON.stringify(storageObject)); + const spyWrite = spyOn(storagePersistenceService, 'write'); + + const isSilentRenewRunningResult = service.isSilentRenewRunning(config); + + expect(spyWrite).not.toHaveBeenCalled(); + expect(isSilentRenewRunningResult).toBeTrue(); + }); + + it('state object does not exist returns false result', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('storageSilentRenewRunning', { configId: 'configId1' }) + .and.returnValue(null); + + const isSilentRenewRunningResult = service.isSilentRenewRunning({ + configId: 'configId1', + }); + + expect(isSilentRenewRunningResult).toBeFalse(); + }); + }); + + describe('setSilentRenewRunning', () => { + it('set setSilentRenewRunning to `running` with lauched time when called', () => { + jasmine.clock().uninstall(); + jasmine.clock().install(); + const baseTime = new Date(); + + jasmine.clock().mockDate(baseTime); + + const storageObject = { + state: 'running', + dateOfLaunchedProcessUtc: baseTime.toISOString(), + }; + + const spy = spyOn(storagePersistenceService, 'write'); + + service.setSilentRenewRunning({ configId: 'configId1' }); + expect(spy).toHaveBeenCalledOnceWith( + 'storageSilentRenewRunning', + JSON.stringify(storageObject), + { configId: 'configId1' } + ); + }); + }); + + describe('resetSilentRenewRunning', () => { + it('set resetSilentRenewRunning to empty string when called', () => { + const spy = spyOn(storagePersistenceService, 'write'); + + service.resetSilentRenewRunning({ configId: 'configId1' }); + expect(spy).toHaveBeenCalledOnceWith('storageSilentRenewRunning', '', { + configId: 'configId1', + }); + }); + }); +}); diff --git a/src/flows/flows-data.service.ts b/src/flows/flows-data.service.ts new file mode 100644 index 0000000..488ef37 --- /dev/null +++ b/src/flows/flows-data.service.ts @@ -0,0 +1,204 @@ +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { SilentRenewRunning } from './flows.models'; +import { RandomService } from './random/random.service'; + +@Injectable() +export class FlowsDataService { + private readonly loggerService = inject(LoggerService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly randomService = inject(RandomService); + + createNonce(configuration: OpenIdConfiguration): string { + const nonce = this.randomService.createRandom(40, configuration); + + this.loggerService.logDebug(configuration, 'Nonce created. nonce:' + nonce); + this.setNonce(nonce, configuration); + + return nonce; + } + + setNonce(nonce: string, configuration: OpenIdConfiguration): void { + this.storagePersistenceService.write('authNonce', nonce, configuration); + } + + getAuthStateControl(configuration: OpenIdConfiguration | null): string { + if (!configuration) { + return ''; + } + + return this.storagePersistenceService.read( + 'authStateControl', + configuration + ); + } + + setAuthStateControl( + authStateControl: string, + configuration: OpenIdConfiguration | null + ): boolean { + if (!configuration) { + return false; + } + + return this.storagePersistenceService.write( + 'authStateControl', + authStateControl, + configuration + ); + } + + getExistingOrCreateAuthStateControl(configuration: OpenIdConfiguration): any { + let state = this.storagePersistenceService.read( + 'authStateControl', + configuration + ); + + if (!state) { + state = this.randomService.createRandom(40, configuration); + this.storagePersistenceService.write( + 'authStateControl', + state, + configuration + ); + } + + return state; + } + + setSessionState(sessionState: any, configuration: OpenIdConfiguration): void { + this.storagePersistenceService.write( + 'session_state', + sessionState, + configuration + ); + } + + resetStorageFlowData(configuration: OpenIdConfiguration): void { + this.storagePersistenceService.resetStorageFlowData(configuration); + } + + getCodeVerifier(configuration: OpenIdConfiguration): any { + return this.storagePersistenceService.read('codeVerifier', configuration); + } + + createCodeVerifier(configuration: OpenIdConfiguration): string { + const codeVerifier = this.randomService.createRandom(67, configuration); + + this.storagePersistenceService.write( + 'codeVerifier', + codeVerifier, + configuration + ); + + return codeVerifier; + } + + isCodeFlowInProgress(configuration: OpenIdConfiguration): boolean { + return !!this.storagePersistenceService.read( + 'storageCodeFlowInProgress', + configuration + ); + } + + setCodeFlowInProgress(configuration: OpenIdConfiguration): void { + this.storagePersistenceService.write( + 'storageCodeFlowInProgress', + true, + configuration + ); + } + + resetCodeFlowInProgress(configuration: OpenIdConfiguration): void { + this.storagePersistenceService.write( + 'storageCodeFlowInProgress', + false, + configuration + ); + } + + isSilentRenewRunning(configuration: OpenIdConfiguration): boolean { + const { configId, silentRenewTimeoutInSeconds } = configuration; + const storageObject = this.getSilentRenewRunningStorageEntry(configuration); + + if (!storageObject) { + return false; + } + + if (storageObject.state === 'not-running') { + return false; + } + + const timeOutInMilliseconds = (silentRenewTimeoutInSeconds ?? 0) * 1000; + const dateOfLaunchedProcessUtc = Date.parse( + storageObject.dateOfLaunchedProcessUtc + ); + const currentDateUtc = Date.parse(new Date().toISOString()); + const elapsedTimeInMilliseconds = Math.abs( + currentDateUtc - dateOfLaunchedProcessUtc + ); + const isProbablyStuck = elapsedTimeInMilliseconds > timeOutInMilliseconds; + + if (isProbablyStuck) { + this.loggerService.logDebug( + configuration, + 'silent renew process is probably stuck, state will be reset.', + configId + ); + this.resetSilentRenewRunning(configuration); + + return false; + } + + return storageObject.state === 'running'; + } + + setSilentRenewRunning(configuration: OpenIdConfiguration): void { + const storageObject: SilentRenewRunning = { + state: 'running', + dateOfLaunchedProcessUtc: new Date().toISOString(), + }; + + this.storagePersistenceService.write( + 'storageSilentRenewRunning', + JSON.stringify(storageObject), + configuration + ); + } + + resetSilentRenewRunning(configuration: OpenIdConfiguration | null): void { + if (!configuration) { + return; + } + + this.storagePersistenceService.write( + 'storageSilentRenewRunning', + '', + configuration + ); + } + + private getSilentRenewRunningStorageEntry( + configuration: OpenIdConfiguration + ): SilentRenewRunning { + const storageEntry = this.storagePersistenceService.read( + 'storageSilentRenewRunning', + configuration + ); + + if (!storageEntry) { + return { + dateOfLaunchedProcessUtc: '', + state: 'not-running', + }; + } + + return JSON.parse(storageEntry); + } +} diff --git a/src/flows/flows.models.ts b/src/flows/flows.models.ts new file mode 100644 index 0000000..f1089c8 --- /dev/null +++ b/src/flows/flows.models.ts @@ -0,0 +1,6 @@ +export interface SilentRenewRunning { + state: SilentRenewRunningState; + dateOfLaunchedProcessUtc: string; +} + +export type SilentRenewRunningState = 'running' | 'not-running'; diff --git a/src/flows/flows.service.spec.ts b/src/flows/flows.service.spec.ts new file mode 100644 index 0000000..34c33ce --- /dev/null +++ b/src/flows/flows.service.spec.ts @@ -0,0 +1,226 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { CallbackContext } from './callback-context'; +import { CodeFlowCallbackHandlerService } from './callback-handling/code-flow-callback-handler.service'; +import { HistoryJwtKeysCallbackHandlerService } from './callback-handling/history-jwt-keys-callback-handler.service'; +import { ImplicitFlowCallbackHandlerService } from './callback-handling/implicit-flow-callback-handler.service'; +import { RefreshSessionCallbackHandlerService } from './callback-handling/refresh-session-callback-handler.service'; +import { RefreshTokenCallbackHandlerService } from './callback-handling/refresh-token-callback-handler.service'; +import { StateValidationCallbackHandlerService } from './callback-handling/state-validation-callback-handler.service'; +import { UserCallbackHandlerService } from './callback-handling/user-callback-handler.service'; +import { FlowsService } from './flows.service'; + +describe('Flows Service', () => { + let service: FlowsService; + let codeFlowCallbackHandlerService: CodeFlowCallbackHandlerService; + let implicitFlowCallbackHandlerService: ImplicitFlowCallbackHandlerService; + let historyJwtKeysCallbackHandlerService: HistoryJwtKeysCallbackHandlerService; + let userCallbackHandlerService: UserCallbackHandlerService; + let stateValidationCallbackHandlerService: StateValidationCallbackHandlerService; + let refreshSessionCallbackHandlerService: RefreshSessionCallbackHandlerService; + let refreshTokenCallbackHandlerService: RefreshTokenCallbackHandlerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + FlowsService, + mockProvider(CodeFlowCallbackHandlerService), + mockProvider(ImplicitFlowCallbackHandlerService), + mockProvider(HistoryJwtKeysCallbackHandlerService), + mockProvider(UserCallbackHandlerService), + mockProvider(StateValidationCallbackHandlerService), + mockProvider(RefreshSessionCallbackHandlerService), + mockProvider(RefreshTokenCallbackHandlerService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(FlowsService); + codeFlowCallbackHandlerService = TestBed.inject( + CodeFlowCallbackHandlerService + ); + implicitFlowCallbackHandlerService = TestBed.inject( + ImplicitFlowCallbackHandlerService + ); + historyJwtKeysCallbackHandlerService = TestBed.inject( + HistoryJwtKeysCallbackHandlerService + ); + userCallbackHandlerService = TestBed.inject(UserCallbackHandlerService); + stateValidationCallbackHandlerService = TestBed.inject( + StateValidationCallbackHandlerService + ); + refreshSessionCallbackHandlerService = TestBed.inject( + RefreshSessionCallbackHandlerService + ); + refreshTokenCallbackHandlerService = TestBed.inject( + RefreshTokenCallbackHandlerService + ); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('processCodeFlowCallback', () => { + it('calls all methods correctly', waitForAsync(() => { + const codeFlowCallbackSpy = spyOn( + codeFlowCallbackHandlerService, + 'codeFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const codeFlowCodeRequestSpy = spyOn( + codeFlowCallbackHandlerService, + 'codeFlowCodeRequest' + ).and.returnValue(of({} as CallbackContext)); + const callbackHistoryAndResetJwtKeysSpy = spyOn( + historyJwtKeysCallbackHandlerService, + 'callbackHistoryAndResetJwtKeys' + ).and.returnValue(of({} as CallbackContext)); + const callbackStateValidationSpy = spyOn( + stateValidationCallbackHandlerService, + 'callbackStateValidation' + ).and.returnValue(of({} as CallbackContext)); + const callbackUserSpy = spyOn( + userCallbackHandlerService, + 'callbackUser' + ).and.returnValue(of({} as CallbackContext)); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .processCodeFlowCallback('some-url1234', allConfigs[0], allConfigs) + .subscribe((value) => { + expect(value).toEqual({} as CallbackContext); + expect(codeFlowCallbackSpy).toHaveBeenCalledOnceWith( + 'some-url1234', + allConfigs[0] + ); + expect(codeFlowCodeRequestSpy).toHaveBeenCalledTimes(1); + expect(callbackHistoryAndResetJwtKeysSpy).toHaveBeenCalledTimes(1); + expect(callbackStateValidationSpy).toHaveBeenCalledTimes(1); + expect(callbackUserSpy).toHaveBeenCalledTimes(1); + }); + })); + }); + + describe('processSilentRenewCodeFlowCallback', () => { + it('calls all methods correctly', waitForAsync(() => { + const codeFlowCodeRequestSpy = spyOn( + codeFlowCallbackHandlerService, + 'codeFlowCodeRequest' + ).and.returnValue(of({} as CallbackContext)); + const callbackHistoryAndResetJwtKeysSpy = spyOn( + historyJwtKeysCallbackHandlerService, + 'callbackHistoryAndResetJwtKeys' + ).and.returnValue(of({} as CallbackContext)); + const callbackStateValidationSpy = spyOn( + stateValidationCallbackHandlerService, + 'callbackStateValidation' + ).and.returnValue(of({} as CallbackContext)); + const callbackUserSpy = spyOn( + userCallbackHandlerService, + 'callbackUser' + ).and.returnValue(of({} as CallbackContext)); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .processSilentRenewCodeFlowCallback( + {} as CallbackContext, + allConfigs[0], + allConfigs + ) + .subscribe((value) => { + expect(value).toEqual({} as CallbackContext); + expect(codeFlowCodeRequestSpy).toHaveBeenCalled(); + expect(callbackHistoryAndResetJwtKeysSpy).toHaveBeenCalled(); + expect(callbackStateValidationSpy).toHaveBeenCalled(); + expect(callbackUserSpy).toHaveBeenCalled(); + }); + })); + }); + + describe('processImplicitFlowCallback', () => { + it('calls all methods correctly', waitForAsync(() => { + const implicitFlowCallbackSpy = spyOn( + implicitFlowCallbackHandlerService, + 'implicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const callbackHistoryAndResetJwtKeysSpy = spyOn( + historyJwtKeysCallbackHandlerService, + 'callbackHistoryAndResetJwtKeys' + ).and.returnValue(of({} as CallbackContext)); + const callbackStateValidationSpy = spyOn( + stateValidationCallbackHandlerService, + 'callbackStateValidation' + ).and.returnValue(of({} as CallbackContext)); + const callbackUserSpy = spyOn( + userCallbackHandlerService, + 'callbackUser' + ).and.returnValue(of({} as CallbackContext)); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .processImplicitFlowCallback(allConfigs[0], allConfigs, 'any-hash') + .subscribe((value) => { + expect(value).toEqual({} as CallbackContext); + expect(implicitFlowCallbackSpy).toHaveBeenCalled(); + expect(callbackHistoryAndResetJwtKeysSpy).toHaveBeenCalled(); + expect(callbackStateValidationSpy).toHaveBeenCalled(); + expect(callbackUserSpy).toHaveBeenCalled(); + }); + })); + }); + + describe('processRefreshToken', () => { + it('calls all methods correctly', waitForAsync(() => { + const refreshSessionWithRefreshTokensSpy = spyOn( + refreshSessionCallbackHandlerService, + 'refreshSessionWithRefreshTokens' + ).and.returnValue(of({} as CallbackContext)); + const refreshTokensRequestTokensSpy = spyOn( + refreshTokenCallbackHandlerService, + 'refreshTokensRequestTokens' + ).and.returnValue(of({} as CallbackContext)); + const callbackHistoryAndResetJwtKeysSpy = spyOn( + historyJwtKeysCallbackHandlerService, + 'callbackHistoryAndResetJwtKeys' + ).and.returnValue(of({} as CallbackContext)); + const callbackStateValidationSpy = spyOn( + stateValidationCallbackHandlerService, + 'callbackStateValidation' + ).and.returnValue(of({} as CallbackContext)); + const callbackUserSpy = spyOn( + userCallbackHandlerService, + 'callbackUser' + ).and.returnValue(of({} as CallbackContext)); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service + .processRefreshToken(allConfigs[0], allConfigs) + .subscribe((value) => { + expect(value).toEqual({} as CallbackContext); + expect(refreshSessionWithRefreshTokensSpy).toHaveBeenCalled(); + expect(refreshTokensRequestTokensSpy).toHaveBeenCalled(); + expect(callbackHistoryAndResetJwtKeysSpy).toHaveBeenCalled(); + expect(callbackStateValidationSpy).toHaveBeenCalled(); + expect(callbackUserSpy).toHaveBeenCalled(); + }); + })); + }); +}); diff --git a/src/flows/flows.service.ts b/src/flows/flows.service.ts new file mode 100644 index 0000000..c06024d --- /dev/null +++ b/src/flows/flows.service.ts @@ -0,0 +1,182 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable } from 'rxjs'; +import { concatMap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from './callback-context'; +import { CodeFlowCallbackHandlerService } from './callback-handling/code-flow-callback-handler.service'; +import { HistoryJwtKeysCallbackHandlerService } from './callback-handling/history-jwt-keys-callback-handler.service'; +import { ImplicitFlowCallbackHandlerService } from './callback-handling/implicit-flow-callback-handler.service'; +import { RefreshSessionCallbackHandlerService } from './callback-handling/refresh-session-callback-handler.service'; +import { RefreshTokenCallbackHandlerService } from './callback-handling/refresh-token-callback-handler.service'; +import { StateValidationCallbackHandlerService } from './callback-handling/state-validation-callback-handler.service'; +import { UserCallbackHandlerService } from './callback-handling/user-callback-handler.service'; + +@Injectable() +export class FlowsService { + private readonly codeFlowCallbackHandlerService = inject( + CodeFlowCallbackHandlerService + ); + + private readonly implicitFlowCallbackHandlerService = inject( + ImplicitFlowCallbackHandlerService + ); + + private readonly historyJwtKeysCallbackHandlerService = inject( + HistoryJwtKeysCallbackHandlerService + ); + + private readonly userHandlerService = inject(UserCallbackHandlerService); + + private readonly stateValidationCallbackHandlerService = inject( + StateValidationCallbackHandlerService + ); + + private readonly refreshSessionCallbackHandlerService = inject( + RefreshSessionCallbackHandlerService + ); + + private readonly refreshTokenCallbackHandlerService = inject( + RefreshTokenCallbackHandlerService + ); + + processCodeFlowCallback( + urlToCheck: string, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + return this.codeFlowCallbackHandlerService + .codeFlowCallback(urlToCheck, config) + .pipe( + concatMap((callbackContext) => + this.codeFlowCallbackHandlerService.codeFlowCodeRequest( + callbackContext, + config + ) + ), + concatMap((callbackContext) => + this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.stateValidationCallbackHandlerService.callbackStateValidation( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.userHandlerService.callbackUser( + callbackContext, + config, + allConfigs + ) + ) + ); + } + + processSilentRenewCodeFlowCallback( + firstContext: CallbackContext, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + return this.codeFlowCallbackHandlerService + .codeFlowCodeRequest(firstContext, config) + .pipe( + concatMap((callbackContext) => + this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.stateValidationCallbackHandlerService.callbackStateValidation( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.userHandlerService.callbackUser( + callbackContext, + config, + allConfigs + ) + ) + ); + } + + processImplicitFlowCallback( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + hash?: string + ): Observable { + return this.implicitFlowCallbackHandlerService + .implicitFlowCallback(config, allConfigs, hash) + .pipe( + concatMap((callbackContext) => + this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.stateValidationCallbackHandlerService.callbackStateValidation( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.userHandlerService.callbackUser( + callbackContext, + config, + allConfigs + ) + ) + ); + } + + processRefreshToken( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + customParamsRefresh?: { [key: string]: string | number | boolean } + ): Observable { + return this.refreshSessionCallbackHandlerService + .refreshSessionWithRefreshTokens(config) + .pipe( + concatMap((callbackContext) => + this.refreshTokenCallbackHandlerService.refreshTokensRequestTokens( + callbackContext, + config, + customParamsRefresh + ) + ), + concatMap((callbackContext) => + this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.stateValidationCallbackHandlerService.callbackStateValidation( + callbackContext, + config, + allConfigs + ) + ), + concatMap((callbackContext) => + this.userHandlerService.callbackUser( + callbackContext, + config, + allConfigs + ) + ) + ); + } +} diff --git a/src/flows/random/random.service.spec.ts b/src/flows/random/random.service.spec.ts new file mode 100644 index 0000000..44f6aa6 --- /dev/null +++ b/src/flows/random/random.service.spec.ts @@ -0,0 +1,64 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { LoggerService } from '../../logging/logger.service'; +import { CryptoService } from '../../utils/crypto/crypto.service'; +import { RandomService } from './random.service'; + +describe('RandomService Tests', () => { + let randomService: RandomService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RandomService, mockProvider(LoggerService), CryptoService], + }); + }); + + beforeEach(() => { + randomService = TestBed.inject(RandomService); + }); + + it('should create', () => { + expect(randomService).toBeTruthy(); + }); + + it('should be not equal', () => { + const r1 = randomService.createRandom(45, { configId: 'configId1' }); + const r2 = randomService.createRandom(45, { configId: 'configId1' }); + + expect(r1).not.toEqual(r2); + }); + + it('correct length with high number', () => { + const r1 = randomService.createRandom(79, { configId: 'configId1' }); + const result = r1.length; + + expect(result).toBe(79); + }); + + it('correct length with small number', () => { + const r1 = randomService.createRandom(7, { configId: 'configId1' }); + const result = r1.length; + + expect(result).toBe(7); + }); + + it('correct length with 0', () => { + const r1 = randomService.createRandom(0, { configId: 'configId1' }); + const result = r1.length; + + expect(result).toBe(0); + expect(r1).toBe(''); + }); + + for (let index = 1; index < 7; index++) { + it('Giving back 10 or more characters when called with numbers less than 7', () => { + const requiredLengthSmallerThenSeven = index; + const fallbackLength = 10; + const r1 = randomService.createRandom(requiredLengthSmallerThenSeven, { + configId: 'configId1', + }); + + expect(r1.length).toBeGreaterThanOrEqual(fallbackLength); + }); + } +}); diff --git a/src/flows/random/random.service.ts b/src/flows/random/random.service.ts new file mode 100644 index 0000000..37a3cf2 --- /dev/null +++ b/src/flows/random/random.service.ts @@ -0,0 +1,60 @@ +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { CryptoService } from '../../utils/crypto/crypto.service'; + +@Injectable() +export class RandomService { + private readonly loggerService = inject(LoggerService); + + private readonly cryptoService = inject(CryptoService); + + createRandom( + requiredLength: number, + configuration: OpenIdConfiguration + ): string { + if (requiredLength <= 0) { + return ''; + } + + if (requiredLength > 0 && requiredLength < 7) { + this.loggerService.logWarning( + configuration, + `RandomService called with ${requiredLength} but 7 chars is the minimum, returning 10 chars` + ); + requiredLength = 10; + } + + const length = requiredLength - 6; + const arr = new Uint8Array(Math.floor(length / 2)); + const crypto = this.cryptoService.getCrypto(); + + if (crypto) { + crypto.getRandomValues(arr); + } + + return Array.from(arr, this.toHex).join('') + this.randomString(7); + } + + private toHex(dec: number): string { + return ('0' + dec.toString(16)).substr(-2); + } + + private randomString(length: number): string { + let result = ''; + const characters = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + const values = new Uint32Array(length); + const crypto = this.cryptoService.getCrypto(); + + if (crypto) { + crypto.getRandomValues(values); + for (let i = 0; i < length; i++) { + result += characters[values[i] % characters.length]; + } + } + + return result; + } +} diff --git a/src/flows/reset-auth-data.service.spec.ts b/src/flows/reset-auth-data.service.spec.ts new file mode 100644 index 0000000..b19b2cf --- /dev/null +++ b/src/flows/reset-auth-data.service.spec.ts @@ -0,0 +1,75 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { LoggerService } from '../logging/logger.service'; +import { UserService } from '../user-data/user.service'; +import { FlowsDataService } from './flows-data.service'; +import { ResetAuthDataService } from './reset-auth-data.service'; + +describe('ResetAuthDataService', () => { + let service: ResetAuthDataService; + let userService: UserService; + let flowsDataService: FlowsDataService; + let authStateService: AuthStateService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ResetAuthDataService, + mockProvider(AuthStateService), + mockProvider(FlowsDataService), + mockProvider(UserService), + mockProvider(LoggerService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(ResetAuthDataService); + userService = TestBed.inject(UserService); + flowsDataService = TestBed.inject(FlowsDataService); + authStateService = TestBed.inject(AuthStateService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('resetAuthorizationData', () => { + it('calls resetUserDataInStore when autoUserInfo is true', () => { + const resetUserDataInStoreSpy = spyOn( + userService, + 'resetUserDataInStore' + ); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service.resetAuthorizationData(allConfigs[0], allConfigs); + expect(resetUserDataInStoreSpy).toHaveBeenCalled(); + }); + + it('calls correct methods', () => { + const resetStorageFlowDataSpy = spyOn( + flowsDataService, + 'resetStorageFlowData' + ); + const setUnauthorizedAndFireEventSpy = spyOn( + authStateService, + 'setUnauthenticatedAndFireEvent' + ); + const allConfigs = [ + { + configId: 'configId1', + }, + ]; + + service.resetAuthorizationData(allConfigs[0], allConfigs); + + expect(resetStorageFlowDataSpy).toHaveBeenCalled(); + expect(setUnauthorizedAndFireEventSpy).toHaveBeenCalled(); + }); + }); +}); diff --git a/src/flows/reset-auth-data.service.ts b/src/flows/reset-auth-data.service.ts new file mode 100644 index 0000000..1b327c5 --- /dev/null +++ b/src/flows/reset-auth-data.service.ts @@ -0,0 +1,38 @@ +import { inject, Injectable } from 'injection-js'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { UserService } from '../user-data/user.service'; +import { FlowsDataService } from './flows-data.service'; + +@Injectable() +export class ResetAuthDataService { + private readonly loggerService = inject(LoggerService); + + private readonly userService = inject(UserService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly authStateService = inject(AuthStateService); + + resetAuthorizationData( + currentConfiguration: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[] + ): void { + if (!currentConfiguration) { + return; + } + + this.userService.resetUserDataInStore(currentConfiguration, allConfigs); + this.flowsDataService.resetStorageFlowData(currentConfiguration); + this.authStateService.setUnauthenticatedAndFireEvent( + currentConfiguration, + allConfigs + ); + + this.loggerService.logDebug( + currentConfiguration, + 'Local Login information cleaned up and event fired' + ); + } +} diff --git a/src/flows/signin-key-data.service.spec.ts b/src/flows/signin-key-data.service.spec.ts new file mode 100644 index 0000000..08fb0f4 --- /dev/null +++ b/src/flows/signin-key-data.service.spec.ts @@ -0,0 +1,220 @@ +import { HttpResponse } from '@angular/common/http'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { isObservable, of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { createRetriableStream } from '../../test/create-retriable-stream.helper'; +import { DataService } from '../api/data.service'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { SigninKeyDataService } from './signin-key-data.service'; + +const DUMMY_JWKS = { + keys: [ + { + kid: 'random-id', + kty: 'RSA', + alg: 'RS256', + use: 'sig', + n: 'some-value', + e: 'AQAB', + x5c: ['some-value'], + x5t: 'some-value', + 'x5t#S256': 'some-value', + }, + ], +}; + +describe('Signin Key Data Service', () => { + let service: SigninKeyDataService; + let storagePersistenceService: StoragePersistenceService; + let dataService: DataService; + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + SigninKeyDataService, + mockProvider(DataService), + mockProvider(LoggerService), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(SigninKeyDataService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + dataService = TestBed.inject(DataService); + loggerService = TestBed.inject(LoggerService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getSigningKeys', () => { + it('throws error when no wellKnownEndpoints given', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue(null); + const result = service.getSigningKeys({ configId: 'configId1' }); + + result.subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('throws error when no jwksUri given', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ jwksUri: null }); + const result = service.getSigningKeys({ configId: 'configId1' }); + + result.subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('calls dataservice if jwksurl is given', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ jwksUri: 'someUrl' }); + const spy = spyOn(dataService, 'get').and.callFake(() => of()); + + const result = service.getSigningKeys({ configId: 'configId1' }); + + result.subscribe({ + complete: () => { + expect(spy).toHaveBeenCalledOnceWith('someUrl', { + configId: 'configId1', + }); + }, + }); + })); + + it('should retry once', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ jwksUri: 'someUrl' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + of(DUMMY_JWKS) + ) + ); + + service.getSigningKeys({ configId: 'configId1' }).subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_JWKS); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ jwksUri: 'someUrl' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of(DUMMY_JWKS) + ) + ); + + service.getSigningKeys({ configId: 'configId1' }).subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_JWKS); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ jwksUri: 'someUrl' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of(DUMMY_JWKS) + ) + ); + + service.getSigningKeys({ configId: 'configId1' }).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + }); + + describe('handleErrorGetSigningKeys', () => { + it('keeps observable if error is catched', waitForAsync(() => { + const result = (service as any).handleErrorGetSigningKeys( + new HttpResponse() + ); + const hasTypeObservable = isObservable(result); + + expect(hasTypeObservable).toBeTrue(); + })); + + it('logs error if error is response', waitForAsync(() => { + const logSpy = spyOn(loggerService, 'logError'); + + (service as any) + .handleErrorGetSigningKeys( + new HttpResponse({ status: 400, statusText: 'nono' }), + { configId: 'configId1' } + ) + .subscribe({ + error: () => { + expect(logSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + '400 - nono {}' + ); + }, + }); + })); + + it('logs error if error is not a response', waitForAsync(() => { + const logSpy = spyOn(loggerService, 'logError'); + + (service as any) + .handleErrorGetSigningKeys('Just some Error', { configId: 'configId1' }) + .subscribe({ + error: () => { + expect(logSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'Just some Error' + ); + }, + }); + })); + + it('logs error if error with message property is not a response', waitForAsync(() => { + const logSpy = spyOn(loggerService, 'logError'); + + (service as any) + .handleErrorGetSigningKeys( + { message: 'Just some Error' }, + { configId: 'configId1' } + ) + .subscribe({ + error: () => { + expect(logSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'Just some Error' + ); + }, + }); + })); + }); +}); diff --git a/src/flows/signin-key-data.service.ts b/src/flows/signin-key-data.service.ts new file mode 100644 index 0000000..58f287f --- /dev/null +++ b/src/flows/signin-key-data.service.ts @@ -0,0 +1,71 @@ +import { HttpResponse } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, throwError } from 'rxjs'; +import { catchError, retry } from 'rxjs/operators'; +import { DataService } from '../api/data.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { JwtKeys } from '../validation/jwtkeys'; + +@Injectable() +export class SigninKeyDataService { + private readonly loggerService = inject(LoggerService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly dataService = inject(DataService); + + getSigningKeys( + currentConfiguration: OpenIdConfiguration + ): Observable { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + currentConfiguration + ); + const jwksUri = authWellKnownEndPoints?.jwksUri; + + if (!jwksUri) { + const error = `getSigningKeys: authWellKnownEndpoints.jwksUri is: '${jwksUri}'`; + + this.loggerService.logWarning(currentConfiguration, error); + + return throwError(() => new Error(error)); + } + + this.loggerService.logDebug( + currentConfiguration, + 'Getting signinkeys from ', + jwksUri + ); + + return this.dataService.get(jwksUri, currentConfiguration).pipe( + retry(2), + catchError((e) => this.handleErrorGetSigningKeys(e, currentConfiguration)) + ); + } + + private handleErrorGetSigningKeys( + errorResponse: HttpResponse | any, + currentConfiguration: OpenIdConfiguration + ): Observable { + let errMsg = ''; + + if (errorResponse instanceof HttpResponse) { + const body = errorResponse.body || {}; + const err = JSON.stringify(body); + const { status, statusText } = errorResponse; + + errMsg = `${status || ''} - ${statusText || ''} ${err || ''}`; + } else { + const { message } = errorResponse; + + errMsg = !!message ? message : `${errorResponse}`; + } + this.loggerService.logError(currentConfiguration, errMsg); + + return throwError(() => new Error(errMsg)); + } +} diff --git a/src/iframe/check-session.service.spec.ts b/src/iframe/check-session.service.spec.ts new file mode 100644 index 0000000..db4db75 --- /dev/null +++ b/src/iframe/check-session.service.spec.ts @@ -0,0 +1,356 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { skip } from 'rxjs/operators'; +import { mockAbstractProvider, mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { OidcSecurityService } from '../oidc.security.service'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { AbstractSecurityStorage } from '../storage/abstract-security-storage'; +import { DefaultSessionStorageService } from '../storage/default-sessionstorage.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { PlatformProvider } from '../utils/platform-provider/platform.provider'; +import { CheckSessionService } from './check-session.service'; +import { IFrameService } from './existing-iframe.service'; + +describe('CheckSessionService', () => { + let checkSessionService: CheckSessionService; + let loggerService: LoggerService; + let iFrameService: IFrameService; + let storagePersistenceService: StoragePersistenceService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + CheckSessionService, + OidcSecurityService, + IFrameService, + PublicEventsService, + mockProvider(StoragePersistenceService), + mockProvider(LoggerService), + mockProvider(PlatformProvider), + mockAbstractProvider( + AbstractSecurityStorage, + DefaultSessionStorageService + ), + ], + }); + }); + + beforeEach(() => { + checkSessionService = TestBed.inject(CheckSessionService); + loggerService = TestBed.inject(LoggerService); + iFrameService = TestBed.inject(IFrameService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + }); + + afterEach(() => { + const iFrameIdwhichshouldneverexist = window.document.getElementById( + 'idwhichshouldneverexist' + ); + + if (iFrameIdwhichshouldneverexist) { + iFrameIdwhichshouldneverexist.parentNode?.removeChild( + iFrameIdwhichshouldneverexist + ); + } + const myiFrameForCheckSession = window.document.getElementById( + 'myiFrameForCheckSession' + ); + + if (myiFrameForCheckSession) { + myiFrameForCheckSession.parentNode?.removeChild(myiFrameForCheckSession); + } + }); + + it('should create', () => { + expect(checkSessionService).toBeTruthy(); + }); + + it('getOrCreateIframe calls iFrameService.addIFrameToWindowBody if no Iframe exists', () => { + spyOn(iFrameService, 'addIFrameToWindowBody').and.callThrough(); + + const result = (checkSessionService as any).getOrCreateIframe({ + configId: 'configId1', + }); + + expect(result).toBeTruthy(); + expect(iFrameService.addIFrameToWindowBody).toHaveBeenCalled(); + }); + + it('getOrCreateIframe returns true if document found on window.document', () => { + iFrameService.addIFrameToWindowBody('myiFrameForCheckSession', { + configId: 'configId1', + }); + + const result = (checkSessionService as any).getOrCreateIframe(); + + expect(result).toBeDefined(); + }); + + it('init appends iframe on body with correct values', () => { + expect((checkSessionService as any).sessionIframe).toBeFalsy(); + spyOn(loggerService, 'logDebug').and.callFake(() => undefined); + + (checkSessionService as any).init(); + const iframe = (checkSessionService as any).getOrCreateIframe({ + configId: 'configId1', + }); + + expect(iframe).toBeTruthy(); + expect(iframe.id).toBe('myiFrameForCheckSession'); + expect(iframe.style.display).toBe('none'); + const iFrame = document.getElementById('myiFrameForCheckSession'); + + expect(iFrame).toBeDefined(); + }); + + it('log warning if authWellKnownEndpoints.check_session_iframe is not existing', () => { + const spyLogWarning = spyOn(loggerService, 'logWarning'); + const config = { configId: 'configId1' }; + + spyOn(loggerService, 'logDebug').and.callFake(() => undefined); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ checkSessionIframe: undefined }); + (checkSessionService as any).init(config); + + expect(spyLogWarning).toHaveBeenCalledOnceWith(config, jasmine.any(String)); + }); + + it('start() calls pollserversession() with clientId if no scheduledheartbeat is set', () => { + const spy = spyOn(checkSessionService, 'pollServerSession'); + const config = { clientId: 'clientId', configId: 'configId1' }; + + checkSessionService.start(config); + expect(spy).toHaveBeenCalledOnceWith('clientId', config); + }); + + it('start() does not call pollServerSession() if scheduledHeartBeatRunning is set', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(checkSessionService, 'pollServerSession'); + + (checkSessionService as any).scheduledHeartBeatRunning = (): void => + undefined; + checkSessionService.start(config); + expect(spy).not.toHaveBeenCalled(); + }); + + it('stopCheckingSession sets heartbeat to null', () => { + (checkSessionService as any).scheduledHeartBeatRunning = setTimeout( + () => undefined, + 999 + ); + checkSessionService.stop(); + const heartBeat = (checkSessionService as any).scheduledHeartBeatRunning; + + expect(heartBeat).toBeNull(); + }); + + it('stopCheckingSession does nothing if scheduledHeartBeatRunning is not set', () => { + (checkSessionService as any).scheduledHeartBeatRunning = null; + const spy = spyOn(checkSessionService, 'clearScheduledHeartBeat'); + + checkSessionService.stop(); + expect(spy).not.toHaveBeenCalledOnceWith(); + }); + + describe('serverStateChanged', () => { + it('returns false if startCheckSession is not configured', () => { + const config = { startCheckSession: false, configId: 'configId1' }; + const result = checkSessionService.serverStateChanged(config); + + expect(result).toBeFalsy(); + }); + + it('returns false if checkSessionReceived is false', () => { + (checkSessionService as any).checkSessionReceived = false; + const config = { startCheckSession: true, configId: 'configId1' }; + const result = checkSessionService.serverStateChanged(config); + + expect(result).toBeFalse(); + }); + + it('returns true if startCheckSession is configured and checkSessionReceived is true', () => { + (checkSessionService as any).checkSessionReceived = true; + const config = { startCheckSession: true, configId: 'configId1' }; + const result = checkSessionService.serverStateChanged(config); + + expect(result).toBeTrue(); + }); + }); + + describe('pollServerSession', () => { + beforeEach(() => { + spyOn(checkSessionService, 'init').and.returnValue(of(undefined)); + }); + + it('increases outstandingMessages', () => { + spyOn(checkSessionService, 'getExistingIframe').and.returnValue({ + contentWindow: { postMessage: () => undefined }, + }); + const authWellKnownEndpoints = { + checkSessionIframe: 'https://some-testing-url.com', + }; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints) + .withArgs('session_state', config) + .and.returnValue('session_state'); + spyOn(loggerService, 'logDebug').and.callFake(() => undefined); + (checkSessionService as any).pollServerSession('clientId', config); + expect((checkSessionService as any).outstandingMessages).toBe(1); + }); + + it('logs warning if iframe does not exist', () => { + spyOn(checkSessionService, 'getExistingIframe').and.returnValue( + null + ); + const authWellKnownEndpoints = { + checkSessionIframe: 'https://some-testing-url.com', + }; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + const spyLogWarning = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + spyOn(loggerService, 'logDebug').and.callFake(() => undefined); + (checkSessionService as any).pollServerSession('clientId', config); + expect(spyLogWarning).toHaveBeenCalledOnceWith( + config, + jasmine.any(String) + ); + }); + + it('logs warning if clientId is not set', () => { + spyOn(checkSessionService, 'getExistingIframe').and.returnValue({}); + const authWellKnownEndpoints = { + checkSessionIframe: 'https://some-testing-url.com', + }; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + const spyLogWarning = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + spyOn(loggerService, 'logDebug').and.callFake(() => undefined); + (checkSessionService as any).pollServerSession('', config); + expect(spyLogWarning).toHaveBeenCalledOnceWith( + config, + jasmine.any(String) + ); + }); + + it('logs debug if session_state is not set', () => { + spyOn(checkSessionService, 'getExistingIframe').and.returnValue({}); + const authWellKnownEndpoints = { + checkSessionIframe: 'https://some-testing-url.com', + }; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints) + .withArgs('session_state', config) + .and.returnValue(null); + + const spyLogDebug = spyOn(loggerService, 'logDebug').and.callFake( + () => undefined + ); + + (checkSessionService as any).pollServerSession('clientId', config); + expect(spyLogDebug).toHaveBeenCalledTimes(2); + }); + + it('logs debug if session_state is set but authWellKnownEndpoints are not set', () => { + spyOn(checkSessionService, 'getExistingIframe').and.returnValue({}); + const authWellKnownEndpoints = null; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints) + .withArgs('session_state', config) + .and.returnValue('some_session_state'); + const spyLogDebug = spyOn(loggerService, 'logDebug').and.callFake( + () => undefined + ); + + (checkSessionService as any).pollServerSession('clientId', config); + expect(spyLogDebug).toHaveBeenCalledTimes(2); + }); + }); + + describe('init', () => { + it('returns falsy observable when lastIframerefresh and iframeRefreshInterval are bigger than now', waitForAsync(() => { + const serviceAsAny = checkSessionService as any; + const dateNow = new Date(); + const lastRefresh = dateNow.setMinutes(dateNow.getMinutes() + 30); + + serviceAsAny.lastIFrameRefresh = lastRefresh; + serviceAsAny.iframeRefreshInterval = lastRefresh; + + serviceAsAny.init().subscribe((result: any) => { + expect(result).toBeUndefined(); + }); + })); + }); + + describe('isCheckSessionConfigured', () => { + it('returns true if startCheckSession on config is true', () => { + const config = { configId: 'configId1', startCheckSession: true }; + + const result = checkSessionService.isCheckSessionConfigured(config); + + expect(result).toBe(true); + }); + + it('returns true if startCheckSession on config is true', () => { + const config = { configId: 'configId1', startCheckSession: false }; + + const result = checkSessionService.isCheckSessionConfigured(config); + + expect(result).toBe(false); + }); + }); + + describe('checkSessionChanged$', () => { + it('emits when internal event is thrown', waitForAsync(() => { + checkSessionService.checkSessionChanged$ + .pipe(skip(1)) + .subscribe((result) => { + expect(result).toBe(true); + }); + + const serviceAsAny = checkSessionService as any; + + serviceAsAny.checkSessionChangedInternal$.next(true); + })); + + it('emits false initially', waitForAsync(() => { + checkSessionService.checkSessionChanged$.subscribe((result) => { + expect(result).toBe(false); + }); + })); + + it('emits false then true when emitted', waitForAsync(() => { + const expectedResultsInOrder = [false, true]; + let counter = 0; + + checkSessionService.checkSessionChanged$.subscribe((result) => { + expect(result).toBe(expectedResultsInOrder[counter]); + counter++; + }); + + (checkSessionService as any).checkSessionChangedInternal$.next(true); + })); + }); +}); diff --git a/src/iframe/check-session.service.ts b/src/iframe/check-session.service.ts new file mode 100644 index 0000000..ace87d8 --- /dev/null +++ b/src/iframe/check-session.service.ts @@ -0,0 +1,319 @@ +import { DOCUMENT } from '../dom'; +import { Injectable, NgZone, OnDestroy, inject } from 'injection-js'; +import { BehaviorSubject, Observable, of } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { IFrameService } from './existing-iframe.service'; + +const IFRAME_FOR_CHECK_SESSION_IDENTIFIER = 'myiFrameForCheckSession'; + +// http://openid.net/specs/openid-connect-session-1_0-ID4.html + +@Injectable() +export class CheckSessionService implements OnDestroy { + private readonly loggerService = inject(LoggerService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly iFrameService = inject(IFrameService); + + private readonly eventService = inject(PublicEventsService); + + private readonly zone = inject(NgZone); + + private readonly document = inject(DOCUMENT); + + private checkSessionReceived = false; + + private scheduledHeartBeatRunning: number | null = null; + + private lastIFrameRefresh = 0; + + private outstandingMessages = 0; + + private readonly heartBeatInterval = 3000; + + private readonly iframeRefreshInterval = 60000; + + private readonly checkSessionChangedInternal$ = new BehaviorSubject( + false + ); + + private iframeMessageEventListener?: ( + this: Window, + ev: MessageEvent + ) => any; + + get checkSessionChanged$(): Observable { + return this.checkSessionChangedInternal$.asObservable(); + } + + ngOnDestroy(): void { + this.stop(); + const windowAsDefaultView = this.document.defaultView; + + if (windowAsDefaultView && this.iframeMessageEventListener) { + windowAsDefaultView.removeEventListener( + 'message', + this.iframeMessageEventListener, + false + ); + } + } + + isCheckSessionConfigured(configuration: OpenIdConfiguration): boolean { + const { startCheckSession } = configuration; + + return Boolean(startCheckSession); + } + + start(configuration: OpenIdConfiguration): void { + if (!!this.scheduledHeartBeatRunning) { + return; + } + + const { clientId } = configuration; + + this.pollServerSession(clientId, configuration); + } + + stop(): void { + if (!this.scheduledHeartBeatRunning) { + return; + } + + this.clearScheduledHeartBeat(); + this.checkSessionReceived = false; + } + + serverStateChanged(configuration: OpenIdConfiguration): boolean { + const { startCheckSession } = configuration; + + return Boolean(startCheckSession) && this.checkSessionReceived; + } + + getExistingIframe(): HTMLIFrameElement | null { + return this.iFrameService.getExistingIFrame( + IFRAME_FOR_CHECK_SESSION_IDENTIFIER + ); + } + + private init(configuration: OpenIdConfiguration): Observable { + if (this.lastIFrameRefresh + this.iframeRefreshInterval > Date.now()) { + return of(); + } + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (!authWellKnownEndPoints) { + this.loggerService.logWarning( + configuration, + 'CheckSession - init check session: authWellKnownEndpoints is undefined. Returning.' + ); + + return of(); + } + + const existingIframe = this.getOrCreateIframe(configuration); + + // https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget-addEventListener + // If multiple identical EventListeners are registered on the same EventTarget with the same parameters the duplicate instances are discarded. They do not cause the EventListener to be called twice and since they are discarded they do not need to be removed with the removeEventListener method. + // this is done even if iframe exists for HMR to work, since iframe exists on service init + this.bindMessageEventToIframe(configuration); + const checkSessionIframe = authWellKnownEndPoints.checkSessionIframe; + const contentWindow = existingIframe.contentWindow; + + if (!checkSessionIframe) { + this.loggerService.logWarning( + configuration, + 'CheckSession - init check session: checkSessionIframe is not configured to run' + ); + + return of(); + } + + if (!contentWindow) { + this.loggerService.logWarning( + configuration, + 'CheckSession - init check session: IFrame contentWindow does not exist' + ); + } else { + contentWindow.location.replace(checkSessionIframe); + } + + return new Observable((observer) => { + existingIframe.onload = (): void => { + this.lastIFrameRefresh = Date.now(); + observer.next(); + observer.complete(); + }; + }); + } + + private pollServerSession( + clientId: string | undefined, + configuration: OpenIdConfiguration + ): void { + this.outstandingMessages = 0; + + const pollServerSessionRecur = (): void => { + this.init(configuration) + .pipe(take(1)) + .subscribe(() => { + const existingIframe = this.getExistingIframe(); + + if (existingIframe && clientId) { + this.loggerService.logDebug( + configuration, + `CheckSession - clientId : '${clientId}' - existingIframe: '${existingIframe}'` + ); + const sessionState = this.storagePersistenceService.read( + 'session_state', + configuration + ); + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + const contentWindow = existingIframe.contentWindow; + + if ( + sessionState && + authWellKnownEndPoints?.checkSessionIframe && + contentWindow + ) { + const iframeOrigin = new URL( + authWellKnownEndPoints.checkSessionIframe + )?.origin; + + this.outstandingMessages++; + contentWindow.postMessage( + clientId + ' ' + sessionState, + iframeOrigin + ); + } else { + this.loggerService.logDebug( + configuration, + `CheckSession - session_state is '${sessionState}' - AuthWellKnownEndPoints is '${JSON.stringify( + authWellKnownEndPoints, + null, + 2 + )}'` + ); + this.checkSessionChangedInternal$.next(true); + } + } else { + this.loggerService.logWarning( + configuration, + `CheckSession - OidcSecurityCheckSession pollServerSession checkSession IFrame does not exist: + clientId : '${clientId}' - existingIframe: '${existingIframe}'` + ); + } + + // after sending three messages with no response, fail. + if (this.outstandingMessages > 3) { + this.loggerService.logError( + configuration, + `CheckSession - OidcSecurityCheckSession not receiving check session response messages. + Outstanding messages: '${this.outstandingMessages}'. Server unreachable?` + ); + } + + this.zone.runOutsideAngular(() => { + this.scheduledHeartBeatRunning = + this.document?.defaultView?.setTimeout( + () => this.zone.run(pollServerSessionRecur), + this.heartBeatInterval + ) ?? null; + }); + }); + }; + + pollServerSessionRecur(); + } + + private clearScheduledHeartBeat(): void { + if (this.scheduledHeartBeatRunning !== null) { + clearTimeout(this.scheduledHeartBeatRunning); + this.scheduledHeartBeatRunning = null; + } + } + + private messageHandler(configuration: OpenIdConfiguration, e: any): void { + const existingIFrame = this.getExistingIframe(); + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + const startsWith = !!authWellKnownEndPoints?.checkSessionIframe?.startsWith( + e.origin + ); + + this.outstandingMessages = 0; + + if ( + existingIFrame && + startsWith && + e.source === existingIFrame.contentWindow + ) { + if (e.data === 'error') { + this.loggerService.logWarning( + configuration, + 'CheckSession - error from check session messageHandler' + ); + } else if (e.data === 'changed') { + this.loggerService.logDebug( + configuration, + `CheckSession - ${e} from check session messageHandler` + ); + this.checkSessionReceived = true; + this.eventService.fireEvent(EventTypes.CheckSessionReceived, e.data); + this.checkSessionChangedInternal$.next(true); + } else { + this.eventService.fireEvent(EventTypes.CheckSessionReceived, e.data); + this.loggerService.logDebug( + configuration, + `CheckSession - ${e.data} from check session messageHandler` + ); + } + } + } + + private bindMessageEventToIframe(configuration: OpenIdConfiguration): void { + this.iframeMessageEventListener = this.messageHandler.bind( + this, + configuration + ); + + const defaultView = this.document.defaultView; + + if (defaultView) { + defaultView.addEventListener( + 'message', + this.iframeMessageEventListener, + false + ); + } + } + + private getOrCreateIframe( + configuration: OpenIdConfiguration + ): HTMLIFrameElement { + return ( + this.getExistingIframe() || + this.iFrameService.addIFrameToWindowBody( + IFRAME_FOR_CHECK_SESSION_IDENTIFIER, + configuration + ) + ); + } +} diff --git a/src/iframe/existing-iframe.service.ts b/src/iframe/existing-iframe.service.ts new file mode 100644 index 0000000..2731213 --- /dev/null +++ b/src/iframe/existing-iframe.service.ts @@ -0,0 +1,75 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; + +@Injectable() +export class IFrameService { + private readonly document = inject(DOCUMENT); + + private readonly loggerService = inject(LoggerService); + + getExistingIFrame(identifier: string): HTMLIFrameElement | null { + const iFrameOnParent = this.getIFrameFromParentWindow(identifier); + + if (this.isIFrameElement(iFrameOnParent)) { + return iFrameOnParent; + } + + const iFrameOnSelf = this.getIFrameFromWindow(identifier); + + if (this.isIFrameElement(iFrameOnSelf)) { + return iFrameOnSelf; + } + + return null; + } + + addIFrameToWindowBody( + identifier: string, + config: OpenIdConfiguration + ): HTMLIFrameElement { + const sessionIframe = this.document.createElement('iframe'); + + sessionIframe.id = identifier; + sessionIframe.title = identifier; + this.loggerService.logDebug(config, sessionIframe); + sessionIframe.style.display = 'none'; + this.document.body.appendChild(sessionIframe); + + return sessionIframe; + } + + private getIFrameFromParentWindow( + identifier: string + ): HTMLIFrameElement | null { + try { + const iFrameElement = + this.document.defaultView?.parent.document.getElementById(identifier); + + if (this.isIFrameElement(iFrameElement)) { + return iFrameElement; + } + + return null; + } catch (e) { + return null; + } + } + + private getIFrameFromWindow(identifier: string): HTMLIFrameElement | null { + const iFrameElement = this.document.getElementById(identifier); + + if (this.isIFrameElement(iFrameElement)) { + return iFrameElement; + } + + return null; + } + + private isIFrameElement( + element: HTMLElement | null | undefined + ): element is HTMLIFrameElement { + return !!element && element instanceof HTMLIFrameElement; + } +} diff --git a/src/iframe/refresh-session-iframe.service.spec.ts b/src/iframe/refresh-session-iframe.service.spec.ts new file mode 100644 index 0000000..1dd2fca --- /dev/null +++ b/src/iframe/refresh-session-iframe.service.spec.ts @@ -0,0 +1,67 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { UrlService } from '../utils/url/url.service'; +import { RefreshSessionIframeService } from './refresh-session-iframe.service'; +import { SilentRenewService } from './silent-renew.service'; + +describe('RefreshSessionIframeService ', () => { + let refreshSessionIframeService: RefreshSessionIframeService; + let urlService: UrlService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + RefreshSessionIframeService, + mockProvider(SilentRenewService), + mockProvider(LoggerService), + mockProvider(UrlService), + ], + }); + }); + + beforeEach(() => { + refreshSessionIframeService = TestBed.inject(RefreshSessionIframeService); + urlService = TestBed.inject(UrlService); + }); + + it('should create', () => { + expect(refreshSessionIframeService).toBeTruthy(); + }); + + describe('refreshSessionWithIframe', () => { + it('calls sendAuthorizeRequestUsingSilentRenew with created url', waitForAsync(() => { + spyOn(urlService, 'getRefreshSessionSilentRenewUrl').and.returnValue( + of('a-url') + ); + const sendAuthorizeRequestUsingSilentRenewSpy = spyOn( + refreshSessionIframeService as any, + 'sendAuthorizeRequestUsingSilentRenew' + ).and.returnValue(of(null)); + const allConfigs = [{ configId: 'configId1' }]; + + refreshSessionIframeService + .refreshSessionWithIframe(allConfigs[0], allConfigs) + .subscribe(() => { + expect( + sendAuthorizeRequestUsingSilentRenewSpy + ).toHaveBeenCalledOnceWith('a-url', allConfigs[0], allConfigs); + }); + })); + }); + + describe('initSilentRenewRequest', () => { + it('dispatches customevent to window object', waitForAsync(() => { + const dispatchEventSpy = spyOn(window, 'dispatchEvent'); + + (refreshSessionIframeService as any).initSilentRenewRequest(); + + expect(dispatchEventSpy).toHaveBeenCalledOnceWith( + new CustomEvent('oidc-silent-renew-init', { + detail: jasmine.any(Number), + }) + ); + })); + }); +}); diff --git a/src/iframe/refresh-session-iframe.service.ts b/src/iframe/refresh-session-iframe.service.ts new file mode 100644 index 0000000..db9ed49 --- /dev/null +++ b/src/iframe/refresh-session-iframe.service.ts @@ -0,0 +1,106 @@ +import { DOCUMENT } from '../dom'; +import { Injectable, RendererFactory2, inject } from 'injection-js'; +import { Observable } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { UrlService } from '../utils/url/url.service'; +import { SilentRenewService } from './silent-renew.service'; + +@Injectable() +export class RefreshSessionIframeService { + private readonly renderer = inject(RendererFactory2).createRenderer( + null, + null + ); + + private readonly loggerService = inject(LoggerService); + + private readonly urlService = inject(UrlService); + + private readonly silentRenewService = inject(SilentRenewService); + + private readonly document = inject(DOCUMENT); + + refreshSessionWithIframe( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + customParams?: { [key: string]: string | number | boolean } + ): Observable { + this.loggerService.logDebug( + config, + 'BEGIN refresh session Authorize Iframe renew' + ); + + return this.urlService + .getRefreshSessionSilentRenewUrl(config, customParams) + .pipe( + switchMap((url) => { + return this.sendAuthorizeRequestUsingSilentRenew( + url, + config, + allConfigs + ); + }) + ); + } + + private sendAuthorizeRequestUsingSilentRenew( + url: string | null, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const sessionIframe = this.silentRenewService.getOrCreateIframe(config); + + this.initSilentRenewRequest(config, allConfigs); + this.loggerService.logDebug( + config, + `sendAuthorizeRequestUsingSilentRenew for URL: ${url}` + ); + + return new Observable((observer) => { + const onLoadHandler = (): void => { + sessionIframe.removeEventListener('load', onLoadHandler); + this.loggerService.logDebug( + config, + 'removed event listener from IFrame' + ); + observer.next(true); + observer.complete(); + }; + + sessionIframe.addEventListener('load', onLoadHandler); + sessionIframe.contentWindow?.location.replace(url ?? ''); + }); + } + + private initSilentRenewRequest( + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + const instanceId = Math.random(); + + const initDestroyHandler = this.renderer.listen( + 'window', + 'oidc-silent-renew-init', + (e: CustomEvent) => { + if (e.detail !== instanceId) { + initDestroyHandler(); + renewDestroyHandler(); + } + } + ); + const renewDestroyHandler = this.renderer.listen( + 'window', + 'oidc-silent-renew-message', + (e) => + this.silentRenewService.silentRenewEventHandler(e, config, allConfigs) + ); + + this.document.defaultView?.dispatchEvent( + new CustomEvent('oidc-silent-renew-init', { + detail: instanceId, + }) + ); + } +} diff --git a/src/iframe/silent-renew.service.spec.ts b/src/iframe/silent-renew.service.spec.ts new file mode 100644 index 0000000..da0d92f --- /dev/null +++ b/src/iframe/silent-renew.service.spec.ts @@ -0,0 +1,377 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { Observable, of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ImplicitFlowCallbackService } from '../callback/implicit-flow-callback.service'; +import { IntervalService } from '../callback/interval.service'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { LoggerService } from '../logging/logger.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { ValidationResult } from '../validation/validation-result'; +import { IFrameService } from './existing-iframe.service'; +import { SilentRenewService } from './silent-renew.service'; + +describe('SilentRenewService ', () => { + let silentRenewService: SilentRenewService; + let flowHelper: FlowHelper; + let implicitFlowCallbackService: ImplicitFlowCallbackService; + let iFrameService: IFrameService; + let flowsDataService: FlowsDataService; + let loggerService: LoggerService; + let flowsService: FlowsService; + let authStateService: AuthStateService; + let resetAuthDataService: ResetAuthDataService; + let intervalService: IntervalService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + SilentRenewService, + IFrameService, + mockProvider(FlowsService), + mockProvider(ResetAuthDataService), + mockProvider(FlowsDataService), + mockProvider(AuthStateService), + mockProvider(LoggerService), + mockProvider(ImplicitFlowCallbackService), + mockProvider(IntervalService), + FlowHelper, + ], + }); + }); + + beforeEach(() => { + silentRenewService = TestBed.inject(SilentRenewService); + iFrameService = TestBed.inject(IFrameService); + flowHelper = TestBed.inject(FlowHelper); + implicitFlowCallbackService = TestBed.inject(ImplicitFlowCallbackService); + flowsDataService = TestBed.inject(FlowsDataService); + flowsService = TestBed.inject(FlowsService); + loggerService = TestBed.inject(LoggerService); + authStateService = TestBed.inject(AuthStateService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + intervalService = TestBed.inject(IntervalService); + }); + + it('should create', () => { + expect(silentRenewService).toBeTruthy(); + }); + + describe('refreshSessionWithIFrameCompleted', () => { + it('is of type observable', () => { + expect(silentRenewService.refreshSessionWithIFrameCompleted$).toEqual( + jasmine.any(Observable) + ); + }); + }); + + describe('isSilentRenewConfigured', () => { + it('returns true if refreshToken is configured false and silentRenew is configured true', () => { + const config = { useRefreshToken: false, silentRenew: true }; + const result = silentRenewService.isSilentRenewConfigured(config); + + expect(result).toBe(true); + }); + + it('returns false if refreshToken is configured true and silentRenew is configured true', () => { + const config = { useRefreshToken: true, silentRenew: true }; + + const result = silentRenewService.isSilentRenewConfigured(config); + + expect(result).toBe(false); + }); + + it('returns false if refreshToken is configured false and silentRenew is configured false', () => { + const config = { useRefreshToken: false, silentRenew: false }; + + const result = silentRenewService.isSilentRenewConfigured(config); + + expect(result).toBe(false); + }); + }); + + describe('getOrCreateIframe', () => { + it('returns iframe if iframe is truthy', () => { + spyOn(silentRenewService as any, 'getExistingIframe').and.returnValue({ + name: 'anything', + }); + + const result = silentRenewService.getOrCreateIframe({ + configId: 'configId1', + }); + + expect(result).toEqual({ name: 'anything' } as HTMLIFrameElement); + }); + + it('adds iframe to body if existing iframe is falsy', () => { + const config = { configId: 'configId1' }; + + spyOn(silentRenewService as any, 'getExistingIframe').and.returnValue( + null + ); + + const spy = spyOn(iFrameService, 'addIFrameToWindowBody').and.returnValue( + { name: 'anything' } as HTMLIFrameElement + ); + + const result = silentRenewService.getOrCreateIframe(config); + + expect(result).toEqual({ name: 'anything' } as HTMLIFrameElement); + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledOnceWith('myiFrameForSilentRenew', config); + }); + }); + + describe('codeFlowCallbackSilentRenewIframe', () => { + it('calls processSilentRenewCodeFlowCallback with correct arguments', waitForAsync(() => { + const config = { configId: 'configId1' }; + const allConfigs = [config]; + + const spy = spyOn( + flowsService, + 'processSilentRenewCodeFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const expectedContext = { + code: 'some-code', + refreshToken: '', + state: 'some-state', + sessionState: 'some-session-state', + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + } as CallbackContext; + const url = 'url-part-1'; + const urlParts = + 'code=some-code&state=some-state&session_state=some-session-state'; + + silentRenewService + .codeFlowCallbackSilentRenewIframe([url, urlParts], config, allConfigs) + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + expectedContext, + config, + allConfigs + ); + }); + })); + + it('throws error if url has error param and resets everything on error', waitForAsync(() => { + const config = { configId: 'configId1' }; + const allConfigs = [config]; + + const spy = spyOn( + flowsService, + 'processSilentRenewCodeFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const authStateServiceSpy = spyOn( + authStateService, + 'updateAndPublishAuthState' + ); + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const setNonceSpy = spyOn(flowsDataService, 'setNonce'); + const stopPeriodicTokenCheckSpy = spyOn( + intervalService, + 'stopPeriodicTokenCheck' + ); + + const url = 'url-part-1'; + const urlParts = 'error=some_error'; + + silentRenewService + .codeFlowCallbackSilentRenewIframe([url, urlParts], config, allConfigs) + .subscribe({ + error: (error) => { + expect(error).toEqual(new Error('some_error')); + expect(spy).not.toHaveBeenCalled(); + expect(authStateServiceSpy).toHaveBeenCalledOnceWith({ + isAuthenticated: false, + validationResult: ValidationResult.LoginRequired, + isRenewProcess: true, + }); + expect(resetAuthorizationDataSpy).toHaveBeenCalledOnceWith( + config, + allConfigs + ); + expect(setNonceSpy).toHaveBeenCalledOnceWith('', config); + expect(stopPeriodicTokenCheckSpy).toHaveBeenCalledTimes(1); + }, + }); + })); + }); + + describe('silentRenewEventHandler', () => { + it('returns if no details is given', fakeAsync(() => { + const isCurrentFlowCodeFlowSpy = spyOn( + flowHelper, + 'isCurrentFlowCodeFlow' + ).and.returnValue(false); + + spyOn( + implicitFlowCallbackService, + 'authenticatedImplicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const eventData = { detail: null } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + expect(isCurrentFlowCodeFlowSpy).not.toHaveBeenCalled(); + })); + + it('calls authorizedImplicitFlowCallback if current flow is not code flow', fakeAsync(() => { + const isCurrentFlowCodeFlowSpy = spyOn( + flowHelper, + 'isCurrentFlowCodeFlow' + ).and.returnValue(false); + const authorizedImplicitFlowCallbackSpy = spyOn( + implicitFlowCallbackService, + 'authenticatedImplicitFlowCallback' + ).and.returnValue(of({} as CallbackContext)); + const eventData = { detail: 'detail' } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + expect(isCurrentFlowCodeFlowSpy).toHaveBeenCalled(); + expect(authorizedImplicitFlowCallbackSpy).toHaveBeenCalledOnceWith( + allConfigs[0], + allConfigs, + 'detail' + ); + })); + + it('calls codeFlowCallbackSilentRenewIframe if current flow is code flow', fakeAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const codeFlowCallbackSilentRenewIframe = spyOn( + silentRenewService, + 'codeFlowCallbackSilentRenewIframe' + ).and.returnValue(of({} as CallbackContext)); + const eventData = { detail: 'detail?detail2' } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + expect(codeFlowCallbackSilentRenewIframe).toHaveBeenCalledOnceWith( + ['detail', 'detail2'], + allConfigs[0], + allConfigs + ); + })); + + it('calls authorizedImplicitFlowCallback if current flow is not code flow', fakeAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const codeFlowCallbackSilentRenewIframe = spyOn( + silentRenewService, + 'codeFlowCallbackSilentRenewIframe' + ).and.returnValue(of({} as CallbackContext)); + const eventData = { detail: 'detail?detail2' } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + expect(codeFlowCallbackSilentRenewIframe).toHaveBeenCalledOnceWith( + ['detail', 'detail2'], + allConfigs[0], + allConfigs + ); + })); + + it('calls next on refreshSessionWithIFrameCompleted with callbackcontext', fakeAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + spyOn( + silentRenewService, + 'codeFlowCallbackSilentRenewIframe' + ).and.returnValue( + of({ refreshToken: 'callbackContext' } as CallbackContext) + ); + const eventData = { detail: 'detail?detail2' } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.refreshSessionWithIFrameCompleted$.subscribe( + (result) => { + expect(result).toEqual({ + refreshToken: 'callbackContext', + } as CallbackContext); + } + ); + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + })); + + it('loggs and calls flowsDataService.resetSilentRenewRunning in case of an error', fakeAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + spyOn( + silentRenewService, + 'codeFlowCallbackSilentRenewIframe' + ).and.returnValue(throwError(() => new Error('ERROR'))); + const resetSilentRenewRunningSpy = spyOn( + flowsDataService, + 'resetSilentRenewRunning' + ); + const logErrorSpy = spyOn(loggerService, 'logError'); + const allConfigs = [{ configId: 'configId1' }]; + const eventData = { detail: 'detail?detail2' } as CustomEvent; + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + expect(resetSilentRenewRunningSpy).toHaveBeenCalledTimes(1); + expect(logErrorSpy).toHaveBeenCalledTimes(1); + })); + + it('calls next on refreshSessionWithIFrameCompleted with null in case of error', fakeAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + spyOn( + silentRenewService, + 'codeFlowCallbackSilentRenewIframe' + ).and.returnValue(throwError(() => new Error('ERROR'))); + const eventData = { detail: 'detail?detail2' } as CustomEvent; + const allConfigs = [{ configId: 'configId1' }]; + + silentRenewService.refreshSessionWithIFrameCompleted$.subscribe( + (result) => { + expect(result).toBeNull(); + } + ); + + silentRenewService.silentRenewEventHandler( + eventData, + allConfigs[0], + allConfigs + ); + tick(1000); + })); + }); +}); diff --git a/src/iframe/silent-renew.service.ts b/src/iframe/silent-renew.service.ts new file mode 100644 index 0000000..25c62de --- /dev/null +++ b/src/iframe/silent-renew.service.ts @@ -0,0 +1,168 @@ +import { HttpParams } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, Subject, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ImplicitFlowCallbackService } from '../callback/implicit-flow-callback.service'; +import { IntervalService } from '../callback/interval.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { FlowsDataService } from '../flows/flows-data.service'; +import { FlowsService } from '../flows/flows.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { LoggerService } from '../logging/logger.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { ValidationResult } from '../validation/validation-result'; +import { IFrameService } from './existing-iframe.service'; + +const IFRAME_FOR_SILENT_RENEW_IDENTIFIER = 'myiFrameForSilentRenew'; + +@Injectable() +export class SilentRenewService { + private readonly refreshSessionWithIFrameCompletedInternal$ = + new Subject(); + + get refreshSessionWithIFrameCompleted$(): Observable { + return this.refreshSessionWithIFrameCompletedInternal$.asObservable(); + } + + private readonly loggerService = inject(LoggerService); + + private readonly iFrameService = inject(IFrameService); + + private readonly flowsService = inject(FlowsService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly authStateService = inject(AuthStateService); + + private readonly flowHelper = inject(FlowHelper); + + private readonly implicitFlowCallbackService = inject( + ImplicitFlowCallbackService + ); + + private readonly intervalService = inject(IntervalService); + + getOrCreateIframe(config: OpenIdConfiguration): HTMLIFrameElement { + const existingIframe = this.getExistingIframe(); + + if (!existingIframe) { + return this.iFrameService.addIFrameToWindowBody( + IFRAME_FOR_SILENT_RENEW_IDENTIFIER, + config + ); + } + + return existingIframe; + } + + isSilentRenewConfigured(configuration: OpenIdConfiguration): boolean { + const { useRefreshToken, silentRenew } = configuration; + + return !useRefreshToken && Boolean(silentRenew); + } + + codeFlowCallbackSilentRenewIframe( + urlParts: string[], + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const params = new HttpParams({ + fromString: urlParts[1], + }); + + const errorParam = params.get('error'); + + if (errorParam) { + this.authStateService.updateAndPublishAuthState({ + isAuthenticated: false, + validationResult: ValidationResult.LoginRequired, + isRenewProcess: true, + }); + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + this.flowsDataService.setNonce('', config); + this.intervalService.stopPeriodicTokenCheck(); + + return throwError(() => new Error(errorParam)); + } + + const code = params.get('code') ?? ''; + const state = params.get('state') ?? ''; + const sessionState = params.get('session_state'); + + const callbackContext: CallbackContext = { + code, + refreshToken: '', + state, + sessionState, + authResult: null, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + return this.flowsService + .processSilentRenewCodeFlowCallback(callbackContext, config, allConfigs) + .pipe( + catchError((error) => { + this.intervalService.stopPeriodicTokenCheck(); + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + + return throwError(() => new Error(error)); + }) + ); + } + + silentRenewEventHandler( + e: CustomEvent, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + this.loggerService.logDebug(config, 'silentRenewEventHandler'); + if (!e.detail) { + return; + } + + let callback$: Observable; + const isCodeFlow = this.flowHelper.isCurrentFlowCodeFlow(config); + + if (isCodeFlow) { + const urlParts = e.detail.toString().split('?'); + + callback$ = this.codeFlowCallbackSilentRenewIframe( + urlParts, + config, + allConfigs + ); + } else { + callback$ = + this.implicitFlowCallbackService.authenticatedImplicitFlowCallback( + config, + allConfigs, + e.detail + ); + } + + callback$.subscribe({ + next: (callbackContext) => { + this.refreshSessionWithIFrameCompletedInternal$.next(callbackContext); + this.flowsDataService.resetSilentRenewRunning(config); + }, + error: (err: unknown) => { + this.loggerService.logError(config, 'Error: ' + err); + this.refreshSessionWithIFrameCompletedInternal$.next(null); + this.flowsDataService.resetSilentRenewRunning(config); + }, + }); + } + + private getExistingIframe(): HTMLIFrameElement | null { + return this.iFrameService.getExistingIFrame( + IFRAME_FOR_SILENT_RENEW_IDENTIFIER + ); + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..9f7afcf --- /dev/null +++ b/src/index.ts @@ -0,0 +1,31 @@ +// Public classes. + +export { PassedInitialConfig } from './auth-config'; +export * from './auth-options'; +export * from './auth-state/auth-result'; +export * from './auth-state/auth-state'; +export * from './auth.module'; +export * from './auto-login/auto-login-all-routes.guard'; +export * from './auto-login/auto-login-partial-routes.guard'; +export * from './config/auth-well-known/auth-well-known-endpoints'; +export * from './config/config.service'; +export * from './config/loader/config-loader'; +export * from './config/openid-configuration'; +export * from './interceptor/auth.interceptor'; +export * from './logging/abstract-logger.service'; +export * from './logging/log-level'; +export * from './login/login-response'; +export * from './login/popup/popup-options'; +export * from './login/popup/popup.service'; +export * from './oidc.security.service'; +export * from './provide-auth'; +export * from './public-events/event-types'; +export * from './public-events/notification'; +export * from './public-events/public-events.service'; +export * from './storage/abstract-security-storage'; +export * from './storage/default-localstorage.service'; +export * from './storage/default-sessionstorage.service'; +export * from './user-data/userdata-result'; +export * from './validation/jwtkeys'; +export * from './validation/state-validation-result'; +export * from './validation/validation-result'; diff --git a/src/interceptor/auth.interceptor.spec.ts b/src/interceptor/auth.interceptor.spec.ts new file mode 100644 index 0000000..d363f2f --- /dev/null +++ b/src/interceptor/auth.interceptor.spec.ts @@ -0,0 +1,289 @@ +import { + HTTP_INTERCEPTORS, + HttpClient, + provideHttpClient, + withInterceptors, + withInterceptorsFromDi, +} from '@angular/common/http'; +import { + HttpTestingController, + provideHttpClientTesting, +} from '@angular/common/http/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoggerService } from '../logging/logger.service'; +import { AuthInterceptor, authInterceptor } from './auth.interceptor'; +import { ClosestMatchingRouteService } from './closest-matching-route.service'; + +describe(`AuthHttpInterceptor`, () => { + let httpTestingController: HttpTestingController; + let configurationService: ConfigurationService; + let httpClient: HttpClient; + let authStateService: AuthStateService; + let closestMatchingRouteService: ClosestMatchingRouteService; + + describe(`with Class Interceptor`, () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + ClosestMatchingRouteService, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true, + }, + mockProvider(AuthStateService), + mockProvider(LoggerService), + mockProvider(ConfigurationService), + provideHttpClient(withInterceptorsFromDi()), + provideHttpClientTesting(), + ], + }); + + httpClient = TestBed.inject(HttpClient); + httpTestingController = TestBed.inject(HttpTestingController); + configurationService = TestBed.inject(ConfigurationService); + authStateService = TestBed.inject(AuthStateService); + closestMatchingRouteService = TestBed.inject(ClosestMatchingRouteService); + }); + + afterEach(() => { + httpTestingController.verify(); + }); + + runTests(); + }); + + describe(`with Functional Interceptor`, () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ClosestMatchingRouteService, + provideHttpClient(withInterceptors([authInterceptor()])), + provideHttpClientTesting(), + mockProvider(AuthStateService), + mockProvider(LoggerService), + mockProvider(ConfigurationService), + ], + }); + + httpClient = TestBed.inject(HttpClient); + httpTestingController = TestBed.inject(HttpTestingController); + configurationService = TestBed.inject(ConfigurationService); + authStateService = TestBed.inject(AuthStateService); + closestMatchingRouteService = TestBed.inject(ClosestMatchingRouteService); + }); + + afterEach(() => { + httpTestingController.verify(); + }); + + runTests(); + }); + + function runTests(): void { + it('should add an Authorization header when route matches and token is present', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + secureRoutes: [actionUrl], + configId: 'configId1', + }, + ]); + + spyOn(authStateService, 'getAccessToken').and.returnValue('thisIsAToken'); + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(true); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when `secureRoutes` is not given', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + configId: 'configId1', + }, + ]); + spyOn(authStateService, 'getAccessToken').and.returnValue('thisIsAToken'); + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when no routes configured', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + secureRoutes: [], + configId: 'configId1', + }, + ]); + + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + spyOn(authStateService, 'getAccessToken').and.returnValue('thisIsAToken'); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when no routes configured', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + secureRoutes: [], + configId: 'configId1', + }, + ]); + + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when route is configured but no token is present', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + secureRoutes: [actionUrl], + configId: 'configId1', + }, + ]); + + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + spyOn(authStateService, 'getAccessToken').and.returnValue(''); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when no config is present', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(false); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should not add an Authorization header when no configured route is matching the request', waitForAsync(() => { + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + const actionUrl = `https://jsonplaceholder.typicode.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { + secureRoutes: [actionUrl], + configId: 'configId1', + }, + ]); + spyOn( + closestMatchingRouteService, + 'getConfigIdForClosestMatchingRoute' + ).and.returnValue({ + matchingRoute: null, + matchingConfig: null, + }); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(false); + + httpRequest.flush('something'); + httpTestingController.verify(); + })); + + it('should add an Authorization header when multiple routes are configured and token is present', waitForAsync(() => { + const actionUrl = `https://jsonplaceholder.typicode.com/`; + const actionUrl2 = `https://some-other-url.com/`; + + spyOn(configurationService, 'getAllConfigurations').and.returnValue([ + { secureRoutes: [actionUrl, actionUrl2], configId: 'configId1' }, + ]); + + spyOn(authStateService, 'getAccessToken').and.returnValue('thisIsAToken'); + spyOn(configurationService, 'hasAtLeastOneConfig').and.returnValue(true); + + httpClient.get(actionUrl).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + httpClient.get(actionUrl2).subscribe((response) => { + expect(response).toBeTruthy(); + }); + + const httpRequest = httpTestingController.expectOne(actionUrl); + + expect(httpRequest.request.headers.has('Authorization')).toEqual(true); + + const httpRequest2 = httpTestingController.expectOne(actionUrl2); + + expect(httpRequest2.request.headers.has('Authorization')).toEqual(true); + + httpRequest.flush('something'); + httpRequest2.flush('something'); + httpTestingController.verify(); + })); + } +}); diff --git a/src/interceptor/auth.interceptor.ts b/src/interceptor/auth.interceptor.ts new file mode 100644 index 0000000..b9afedc --- /dev/null +++ b/src/interceptor/auth.interceptor.ts @@ -0,0 +1,121 @@ +import { + HttpEvent, + HttpHandler, + HttpHandlerFn, + HttpInterceptor, + HttpInterceptorFn, + HttpRequest, +} from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable } from 'rxjs'; +import { AuthStateService } from '../auth-state/auth-state.service'; +import { ConfigurationService } from '../config/config.service'; +import { LoggerService } from '../logging/logger.service'; +import { flattenArray } from '../utils/collections/collections.helper'; +import { ClosestMatchingRouteService } from './closest-matching-route.service'; + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + private readonly authStateService = inject(AuthStateService); + + private readonly configurationService = inject(ConfigurationService); + + private readonly loggerService = inject(LoggerService); + + private readonly closestMatchingRouteService = inject( + ClosestMatchingRouteService + ); + + intercept( + req: HttpRequest, + next: HttpHandler + ): Observable> { + return interceptRequest(req, next.handle, { + configurationService: this.configurationService, + authStateService: this.authStateService, + closestMatchingRouteService: this.closestMatchingRouteService, + loggerService: this.loggerService, + }); + } +} + +export function authInterceptor(): HttpInterceptorFn { + return (req, next) => { + return interceptRequest(req, next, { + configurationService: inject(ConfigurationService), + authStateService: inject(AuthStateService), + closestMatchingRouteService: inject(ClosestMatchingRouteService), + loggerService: inject(LoggerService), + }); + }; +} + +function interceptRequest( + req: HttpRequest, + next: HttpHandlerFn, + deps: { + authStateService: AuthStateService; + configurationService: ConfigurationService; + loggerService: LoggerService; + closestMatchingRouteService: ClosestMatchingRouteService; + } +): Observable> { + if (!deps.configurationService.hasAtLeastOneConfig()) { + return next(req); + } + + const allConfigurations = deps.configurationService.getAllConfigurations(); + const allRoutesConfigured = allConfigurations.map( + (x) => x.secureRoutes || [] + ); + const allRoutesConfiguredFlat = flattenArray(allRoutesConfigured); + + if (allRoutesConfiguredFlat.length === 0) { + deps.loggerService.logDebug( + allConfigurations[0], + `No routes to check configured` + ); + + return next(req); + } + + const { matchingConfig, matchingRoute } = + deps.closestMatchingRouteService.getConfigIdForClosestMatchingRoute( + req.url, + allConfigurations + ); + + if (!matchingConfig) { + deps.loggerService.logDebug( + allConfigurations[0], + `Did not find any configured route for route ${req.url}` + ); + + return next(req); + } + + deps.loggerService.logDebug( + matchingConfig, + `'${req.url}' matches configured route '${matchingRoute}'` + ); + const token = deps.authStateService.getAccessToken(matchingConfig); + + if (!token) { + deps.loggerService.logDebug( + matchingConfig, + `Wanted to add token to ${req.url} but found no token: '${token}'` + ); + + return next(req); + } + + deps.loggerService.logDebug( + matchingConfig, + `'${req.url}' matches configured route '${matchingRoute}', adding token` + ); + req = req.clone({ + headers: req.headers.set('Authorization', 'Bearer ' + token), + }); + + return next(req); +} diff --git a/src/interceptor/closest-matching-route.service.spec.ts b/src/interceptor/closest-matching-route.service.spec.ts new file mode 100644 index 0000000..7cf5581 --- /dev/null +++ b/src/interceptor/closest-matching-route.service.spec.ts @@ -0,0 +1,180 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { ClosestMatchingRouteService } from './closest-matching-route.service'; + +describe('ClosestMatchingRouteService', () => { + let service: ClosestMatchingRouteService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ClosestMatchingRouteService, mockProvider(LoggerService)], + }); + }); + + beforeEach(() => { + service = TestBed.inject(ClosestMatchingRouteService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getConfigForClosestMatchingRoute', () => { + it('gets best match for configured routes', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://my-secure-url.com/', + 'https://my-second-secure-url.com/', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://my-third-secure-url.com/', + 'https://my-fourth-second-secure-url.com/', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'https://my-secure-url.com/', + allConfigs + ); + + expect(matchingConfig).toEqual(allConfigs[0]); + }); + + it('gets best match for configured routes - same route prefix', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://my-secure-url.com/', + 'https://my-secure-url.com/test', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://my-third-secure-url.com/', + 'https://my-fourth-second-secure-url.com/', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'https://my-secure-url.com/', + allConfigs + ); + + expect(matchingConfig).toEqual(allConfigs[0]); + }); + + it('gets best match for configured routes - main route', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://first-route.com/', + 'https://second-route.com/test', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://third-route.com/test2', + 'https://fourth-route.com/test3', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'https://first-route.com/', + allConfigs + ); + + expect(matchingConfig).toEqual(allConfigs[0]); + }); + + it('gets best match for configured routes - request route with params', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://first-route.com/', + 'https://second-route.com/test', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://third-route.com/test2', + 'https://fourth-route.com/test3', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'https://first-route.com/anyparam', + allConfigs + ); + + expect(matchingConfig).toEqual(allConfigs[0]); + }); + + it('gets best match for configured routes - configured route with params', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://first-route.com/', + 'https://second-route.com/test', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://third-route.com/test2', + 'https://fourth-route.com/test3', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'https://third-route.com/', + allConfigs + ); + + expect(matchingConfig).toBeNull(); + }); + + it('gets best match for configured routes - no config Id', () => { + const allConfigs = [ + { + configId: 'configId1', + secureRoutes: [ + 'https://my-secure-url.com/', + 'https://my-secure-url.com/test', + ], + }, + { + configId: 'configId2', + secureRoutes: [ + 'https://my-secure-url.com/test2', + 'https://my-secure-url.com/test2/test', + ], + }, + ]; + + const { matchingConfig } = service.getConfigIdForClosestMatchingRoute( + 'blabla', + allConfigs + ); + + expect(matchingConfig).toBeNull(); + }); + }); +}); diff --git a/src/interceptor/closest-matching-route.service.ts b/src/interceptor/closest-matching-route.service.ts new file mode 100644 index 0000000..ddbe51c --- /dev/null +++ b/src/interceptor/closest-matching-route.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../config/openid-configuration'; + +@Injectable() +export class ClosestMatchingRouteService { + getConfigIdForClosestMatchingRoute( + route: string, + configurations: OpenIdConfiguration[] + ): ClosestMatchingRouteResult { + for (const config of configurations) { + const { secureRoutes } = config; + + for (const configuredRoute of secureRoutes ?? []) { + if (route.startsWith(configuredRoute)) { + return { + matchingRoute: configuredRoute, + matchingConfig: config, + }; + } + } + } + + return { + matchingRoute: null, + matchingConfig: null, + }; + } +} + +export interface ClosestMatchingRouteResult { + matchingRoute: string | null; + matchingConfig: OpenIdConfiguration | null; +} diff --git a/src/logging/abstract-logger.service.ts b/src/logging/abstract-logger.service.ts new file mode 100644 index 0000000..c414649 --- /dev/null +++ b/src/logging/abstract-logger.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from 'injection-js'; + +/** + * Implement this class-interface to create a custom logger service. + */ +@Injectable() +export abstract class AbstractLoggerService { + abstract logError(message: string | object, ...args: any[]): void; + + abstract logWarning(message: string | object, ...args: any[]): void; + + abstract logDebug(message: string | object, ...args: any[]): void; +} diff --git a/src/logging/console-logger.service.ts b/src/logging/console-logger.service.ts new file mode 100644 index 0000000..2aa9df6 --- /dev/null +++ b/src/logging/console-logger.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from 'injection-js'; +import { AbstractLoggerService } from './abstract-logger.service'; + +@Injectable() +export class ConsoleLoggerService implements AbstractLoggerService { + logError(message: string | object, ...args: any[]): void { + console.error(message, ...args); + } + + logWarning(message: string | object, ...args: any[]): void { + console.warn(message, ...args); + } + + logDebug(message: string | object, ...args: any[]): void { + console.debug(message, ...args); + } +} diff --git a/src/logging/log-level.ts b/src/logging/log-level.ts new file mode 100644 index 0000000..3e4e117 --- /dev/null +++ b/src/logging/log-level.ts @@ -0,0 +1,6 @@ +export enum LogLevel { + None, + Debug, + Warn, + Error, +} diff --git a/src/logging/logger.service.spec.ts b/src/logging/logger.service.spec.ts new file mode 100644 index 0000000..7da12b9 --- /dev/null +++ b/src/logging/logger.service.spec.ts @@ -0,0 +1,252 @@ +import { TestBed } from '@angular/core/testing'; +import { AbstractLoggerService } from './abstract-logger.service'; +import { ConsoleLoggerService } from './console-logger.service'; +import { LogLevel } from './log-level'; +import { LoggerService } from './logger.service'; + +describe('Logger Service', () => { + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + LoggerService, + { provide: AbstractLoggerService, useClass: ConsoleLoggerService }, + ], + }); + }); + + beforeEach(() => { + loggerService = TestBed.inject(LoggerService); + }); + + it('should create', () => { + expect(loggerService).toBeTruthy(); + }); + + describe('logError', () => { + it('should not log error if loglevel is None', () => { + const spy = spyOn(console, 'error'); + + loggerService.logError( + { configId: 'configId1', logLevel: LogLevel.None }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should log error as default if error is string', () => { + const spy = spyOn(console, 'error'); + + loggerService.logError({ configId: 'configId1' }, 'some message'); + expect(spy).toHaveBeenCalledOnceWith('[ERROR] configId1 - some message'); + }); + + it('should log error as default if error is object', () => { + const spy = spyOn(console, 'error'); + + loggerService.logError({ configId: 'configId1' }, { some: 'message' }); + expect(spy).toHaveBeenCalledOnceWith( + '[ERROR] configId1 - {"some":"message"}' + ); + }); + + it('should always log error with args', () => { + const spy = spyOn(console, 'error'); + + loggerService.logError( + { configId: 'configId1' }, + 'some message', + 'arg1', + 'arg2' + ); + expect(spy).toHaveBeenCalledOnceWith( + '[ERROR] configId1 - some message', + 'arg1', + 'arg2' + ); + }); + }); + + describe('logWarn', () => { + it('should not log if no log level is set (null)', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: undefined }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log if no config is given', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning({}, 'some message'); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log if no log level is set (undefined)', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning({ configId: 'configId1' }, 'some message'); + + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log if log level is turned off', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.None }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should log warning when loglevel is Warn and message is string', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.Warn }, + 'some message' + ); + expect(spy).toHaveBeenCalledOnceWith('[WARN] configId1 - some message'); + }); + + it('should log warning when loglevel is Warn and message is object', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.Warn }, + { some: 'message' } + ); + expect(spy).toHaveBeenCalledOnceWith( + '[WARN] configId1 - {"some":"message"}' + ); + }); + + it('should log warning when loglevel is Warn with args', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.Warn }, + 'some message', + 'arg1', + 'arg2' + ); + expect(spy).toHaveBeenCalledOnceWith( + '[WARN] configId1 - some message', + 'arg1', + 'arg2' + ); + }); + + it('should log warning when loglevel is Debug', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.Debug }, + 'some message' + ); + expect(spy).toHaveBeenCalledOnceWith('[WARN] configId1 - some message'); + }); + + it('should not log warning when loglevel is error', () => { + const spy = spyOn(console, 'warn'); + + loggerService.logWarning( + { configId: 'configId1', logLevel: LogLevel.Error }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('logDebug', () => { + it('should not log if no log level is set (null)', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: undefined }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log if no log level is set (undefined)', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug({ configId: 'configId1' }, 'some message'); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log if log level is turned off', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.None }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should log when loglevel is Debug and value is string', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.Debug }, + 'some message' + ); + expect(spy).toHaveBeenCalledOnceWith('[DEBUG] configId1 - some message'); + }); + + it('should log when loglevel is Debug and value is object', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.Debug }, + { some: 'message' } + ); + expect(spy).toHaveBeenCalledOnceWith( + '[DEBUG] configId1 - {"some":"message"}' + ); + }); + + it('should log when loglevel is Debug with args', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.Debug }, + 'some message', + 'arg1', + 'arg2' + ); + expect(spy).toHaveBeenCalledOnceWith( + '[DEBUG] configId1 - some message', + 'arg1', + 'arg2' + ); + }); + + it('should not log when loglevel is Warn', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.Warn }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not log when loglevel is error', () => { + const spy = spyOn(console, 'debug'); + + loggerService.logDebug( + { configId: 'configId1', logLevel: LogLevel.Error }, + 'some message' + ); + expect(spy).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/src/logging/logger.service.ts b/src/logging/logger.service.ts new file mode 100644 index 0000000..b1f29d6 --- /dev/null +++ b/src/logging/logger.service.ts @@ -0,0 +1,144 @@ +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { AbstractLoggerService } from './abstract-logger.service'; +import { LogLevel } from './log-level'; + +@Injectable() +export class LoggerService { + private readonly abstractLoggerService = inject(AbstractLoggerService); + + logError( + configuration: OpenIdConfiguration, + message: string | object, + ...args: any[] + ): void { + if (this.loggingIsTurnedOff(configuration)) { + return; + } + + const { configId } = configuration; + const messageToLog = this.isObject(message) + ? JSON.stringify(message) + : message; + + if (!!args && !!args.length) { + this.abstractLoggerService.logError( + `[ERROR] ${configId} - ${messageToLog}`, + ...args + ); + } else { + this.abstractLoggerService.logError( + `[ERROR] ${configId} - ${messageToLog}` + ); + } + } + + logWarning( + configuration: OpenIdConfiguration, + message: string | object, + ...args: any[] + ): void { + if (!this.logLevelIsSet(configuration)) { + return; + } + + if (this.loggingIsTurnedOff(configuration)) { + return; + } + + if ( + !this.currentLogLevelIsEqualOrSmallerThan(configuration, LogLevel.Warn) + ) { + return; + } + + const { configId } = configuration; + const messageToLog = this.isObject(message) + ? JSON.stringify(message) + : message; + + if (!!args && !!args.length) { + this.abstractLoggerService.logWarning( + `[WARN] ${configId} - ${messageToLog}`, + ...args + ); + } else { + this.abstractLoggerService.logWarning( + `[WARN] ${configId} - ${messageToLog}` + ); + } + } + + logDebug( + configuration: OpenIdConfiguration | null, + message: string | object, + ...args: any[] + ): void { + if (!configuration) { + return; + } + + if (!this.logLevelIsSet(configuration)) { + return; + } + + if (this.loggingIsTurnedOff(configuration)) { + return; + } + + if ( + !this.currentLogLevelIsEqualOrSmallerThan(configuration, LogLevel.Debug) + ) { + return; + } + + const { configId } = configuration; + const messageToLog = this.isObject(message) + ? JSON.stringify(message) + : message; + + if (!!args && !!args.length) { + this.abstractLoggerService.logDebug( + `[DEBUG] ${configId} - ${messageToLog}`, + ...args + ); + } else { + this.abstractLoggerService.logDebug( + `[DEBUG] ${configId} - ${messageToLog}` + ); + } + } + + private currentLogLevelIsEqualOrSmallerThan( + configuration: OpenIdConfiguration, + logLevelToCompare: LogLevel + ): boolean { + const { logLevel } = configuration || {}; + + if (!logLevel) { + return false; + } + + return logLevel <= logLevelToCompare; + } + + private logLevelIsSet(configuration: OpenIdConfiguration): boolean { + const { logLevel } = configuration || {}; + + if (logLevel === null) { + return false; + } + + return logLevel !== undefined; + } + + private loggingIsTurnedOff(configuration: OpenIdConfiguration): boolean { + const { logLevel } = configuration || {}; + + return logLevel === LogLevel.None; + } + + private isObject(possibleObject: any): boolean { + return Object.prototype.toString.call(possibleObject) === '[object Object]'; + } +} diff --git a/src/login/login-response.ts b/src/login/login-response.ts new file mode 100644 index 0000000..09515c1 --- /dev/null +++ b/src/login/login-response.ts @@ -0,0 +1,8 @@ +export interface LoginResponse { + isAuthenticated: boolean; + userData: any; + accessToken: string; + idToken: string; + configId?: string; + errorMessage?: string; +} diff --git a/src/login/login.service.spec.ts b/src/login/login.service.spec.ts new file mode 100644 index 0000000..bf538bd --- /dev/null +++ b/src/login/login.service.spec.ts @@ -0,0 +1,201 @@ +import { CommonModule } from '@angular/common'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { LoginResponse } from './login-response'; +import { LoginService } from './login.service'; +import { ParLoginService } from './par/par-login.service'; +import { PopUpLoginService } from './popup/popup-login.service'; +import { PopUpService } from './popup/popup.service'; +import { StandardLoginService } from './standard/standard-login.service'; + +describe('LoginService', () => { + let service: LoginService; + let parLoginService: ParLoginService; + let popUpLoginService: PopUpLoginService; + let standardLoginService: StandardLoginService; + let storagePersistenceService: StoragePersistenceService; + let popUpService: PopUpService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [CommonModule], + providers: [ + LoginService, + mockProvider(ParLoginService), + mockProvider(PopUpLoginService), + mockProvider(StandardLoginService), + mockProvider(StoragePersistenceService), + mockProvider(PopUpService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(LoginService); + parLoginService = TestBed.inject(ParLoginService); + popUpLoginService = TestBed.inject(PopUpLoginService); + standardLoginService = TestBed.inject(StandardLoginService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + popUpService = TestBed.inject(PopUpService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('login', () => { + it('calls parLoginService loginPar if usePushedAuthorisationRequests is true', () => { + const config = { usePushedAuthorisationRequests: true }; + const loginParSpy = spyOn(parLoginService, 'loginPar'); + const standardLoginSpy = spyOn(standardLoginService, 'loginStandard'); + + service.login(config); + + expect(loginParSpy).toHaveBeenCalledTimes(1); + expect(standardLoginSpy).not.toHaveBeenCalled(); + }); + + it('calls standardLoginService loginStandard if usePushedAuthorisationRequests is false', () => { + const config = { usePushedAuthorisationRequests: false }; + const loginParSpy = spyOn(parLoginService, 'loginPar'); + const standardLoginSpy = spyOn(standardLoginService, 'loginStandard'); + + service.login(config); + + expect(loginParSpy).not.toHaveBeenCalled(); + expect(standardLoginSpy).toHaveBeenCalledTimes(1); + }); + + it('stores the customParams to the storage if customParams are given', () => { + // arrange + const config = { usePushedAuthorisationRequests: false }; + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + const authOptions = { customParams: { custom: 'params' } }; + + service.login(config, authOptions); + + expect(storagePersistenceServiceSpy).toHaveBeenCalledOnceWith( + 'storageCustomParamsAuthRequest', + { custom: 'params' }, + config + ); + }); + + it("should throw error if configuration is null and doesn't call loginPar or loginStandard", () => { + // arrange + const config = null; + const loginParSpy = spyOn(parLoginService, 'loginPar'); + const standardLoginSpy = spyOn(standardLoginService, 'loginStandard'); + const authOptions = { customParams: { custom: 'params' } }; + + // act + const fn = (): void => service.login(config, authOptions); + + // assert + expect(fn).toThrow( + new Error('Please provide a configuration before setting up the module') + ); + expect(loginParSpy).not.toHaveBeenCalled(); + expect(standardLoginSpy).not.toHaveBeenCalled(); + }); + }); + + describe('loginWithPopUp', () => { + it('calls parLoginService loginWithPopUpPar if usePushedAuthorisationRequests is true', waitForAsync(() => { + // arrange + const config = { usePushedAuthorisationRequests: true }; + const loginWithPopUpPar = spyOn( + parLoginService, + 'loginWithPopUpPar' + ).and.returnValue(of({} as LoginResponse)); + const loginWithPopUpStandardSpy = spyOn( + popUpLoginService, + 'loginWithPopUpStandard' + ).and.returnValue(of({} as LoginResponse)); + + // act + service.loginWithPopUp(config, [config]).subscribe(() => { + // assert + expect(loginWithPopUpPar).toHaveBeenCalledTimes(1); + expect(loginWithPopUpStandardSpy).not.toHaveBeenCalled(); + }); + })); + + it('calls standardLoginService loginstandard if usePushedAuthorisationRequests is false', waitForAsync(() => { + // arrange + const config = { usePushedAuthorisationRequests: false }; + const loginWithPopUpPar = spyOn( + parLoginService, + 'loginWithPopUpPar' + ).and.returnValue(of({} as LoginResponse)); + const loginWithPopUpStandardSpy = spyOn( + popUpLoginService, + 'loginWithPopUpStandard' + ).and.returnValue(of({} as LoginResponse)); + + // act + service.loginWithPopUp(config, [config]).subscribe(() => { + // assert + expect(loginWithPopUpPar).not.toHaveBeenCalled(); + expect(loginWithPopUpStandardSpy).toHaveBeenCalledTimes(1); + }); + })); + + it('stores the customParams to the storage if customParams are given', waitForAsync(() => { + // arrange + const config = { usePushedAuthorisationRequests: false }; + const storagePersistenceServiceSpy = spyOn( + storagePersistenceService, + 'write' + ); + const authOptions = { customParams: { custom: 'params' } }; + + spyOn(popUpLoginService, 'loginWithPopUpStandard').and.returnValue( + of({} as LoginResponse) + ); + + // act + service.loginWithPopUp(config, [config], authOptions).subscribe(() => { + // assert + expect(storagePersistenceServiceSpy).toHaveBeenCalledOnceWith( + 'storageCustomParamsAuthRequest', + { custom: 'params' }, + config + ); + }); + })); + + it('returns error if there is already a popup open', () => { + // arrange + const config = { usePushedAuthorisationRequests: false }; + const authOptions = { customParams: { custom: 'params' } }; + const loginWithPopUpPar = spyOn( + parLoginService, + 'loginWithPopUpPar' + ).and.returnValue(of({} as LoginResponse)); + const loginWithPopUpStandardSpy = spyOn( + popUpLoginService, + 'loginWithPopUpStandard' + ).and.returnValue(of({} as LoginResponse)); + + spyOn(popUpService, 'isCurrentlyInPopup').and.returnValue(true); + + // act + service + .loginWithPopUp(config, [config], authOptions) + .subscribe((result) => { + // assert + expect(result).toEqual({ + errorMessage: 'There is already a popup open.', + } as LoginResponse); + expect(loginWithPopUpPar).not.toHaveBeenCalled(); + expect(loginWithPopUpStandardSpy).not.toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/src/login/login.service.ts b/src/login/login.service.ts new file mode 100644 index 0000000..d88d102 --- /dev/null +++ b/src/login/login.service.ts @@ -0,0 +1,104 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of } from 'rxjs'; +import { AuthOptions } from '../auth-options'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { LoginResponse } from './login-response'; +import { ParLoginService } from './par/par-login.service'; +import { PopUpLoginService } from './popup/popup-login.service'; +import { PopupOptions } from './popup/popup-options'; +import { PopUpService } from './popup/popup.service'; +import { StandardLoginService } from './standard/standard-login.service'; + +@Injectable() +export class LoginService { + private readonly parLoginService = inject(ParLoginService); + + private readonly popUpLoginService = inject(PopUpLoginService); + + private readonly standardLoginService = inject(StandardLoginService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly popupService = inject(PopUpService); + + login( + configuration: OpenIdConfiguration | null, + authOptions?: AuthOptions + ): void { + if (!configuration) { + throw new Error( + 'Please provide a configuration before setting up the module' + ); + } + + const { usePushedAuthorisationRequests } = configuration; + + if (authOptions?.customParams) { + this.storagePersistenceService.write( + 'storageCustomParamsAuthRequest', + authOptions.customParams, + configuration + ); + } + + if (usePushedAuthorisationRequests) { + return this.parLoginService.loginPar(configuration, authOptions); + } else { + return this.standardLoginService.loginStandard( + configuration, + authOptions + ); + } + } + + loginWithPopUp( + configuration: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[], + authOptions?: AuthOptions, + popupOptions?: PopupOptions + ): Observable { + if (!configuration) { + throw new Error( + 'Please provide a configuration before setting up the module' + ); + } + + const isAlreadyInPopUp = + this.popupService.isCurrentlyInPopup(configuration); + + if (isAlreadyInPopUp) { + return of({ + errorMessage: 'There is already a popup open.', + } as LoginResponse); + } + + const { usePushedAuthorisationRequests } = configuration; + + if (authOptions?.customParams) { + this.storagePersistenceService.write( + 'storageCustomParamsAuthRequest', + authOptions.customParams, + configuration + ); + } + + if (usePushedAuthorisationRequests) { + return this.parLoginService.loginWithPopUpPar( + configuration, + allConfigs, + authOptions, + popupOptions + ); + } + + return this.popUpLoginService.loginWithPopUpStandard( + configuration, + allConfigs, + authOptions, + popupOptions + ); + } +} diff --git a/src/login/par/par-login.service.spec.ts b/src/login/par/par-login.service.spec.ts new file mode 100644 index 0000000..02e0a99 --- /dev/null +++ b/src/login/par/par-login.service.spec.ts @@ -0,0 +1,464 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { CheckAuthService } from '../../auth-state/check-auth.service'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { LoggerService } from '../../logging/logger.service'; +import { RedirectService } from '../../utils/redirect/redirect.service'; +import { UrlService } from '../../utils/url/url.service'; +import { LoginResponse } from '../login-response'; +import { PopupResult } from '../popup/popup-result'; +import { PopUpService } from '../popup/popup.service'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; +import { ParLoginService } from './par-login.service'; +import { ParResponse } from './par-response'; +import { ParService } from './par.service'; + +describe('ParLoginService', () => { + let service: ParLoginService; + let responseTypeValidationService: ResponseTypeValidationService; + let loggerService: LoggerService; + let authWellKnownService: AuthWellKnownService; + let parService: ParService; + let urlService: UrlService; + let redirectService: RedirectService; + let popupService: PopUpService; + let checkAuthService: CheckAuthService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ParLoginService, + mockProvider(LoggerService), + mockProvider(ResponseTypeValidationService), + mockProvider(UrlService), + mockProvider(RedirectService), + mockProvider(AuthWellKnownService), + mockProvider(PopUpService), + mockProvider(CheckAuthService), + mockProvider(ParService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(ParLoginService); + loggerService = TestBed.inject(LoggerService); + responseTypeValidationService = TestBed.inject( + ResponseTypeValidationService + ); + authWellKnownService = TestBed.inject(AuthWellKnownService); + parService = TestBed.inject(ParService); + urlService = TestBed.inject(UrlService); + redirectService = TestBed.inject(RedirectService); + popupService = TestBed.inject(PopUpService); + checkAuthService = TestBed.inject(CheckAuthService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('loginPar', () => { + it('does nothing if it has an invalid response type', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(false); + const loggerSpy = spyOn(loggerService, 'logError'); + + const result = service.loginPar({}); + + expect(result).toBeUndefined(); + expect(loggerSpy).toHaveBeenCalled(); + })); + + it('calls parService.postParRequest without custom params when no custom params are passed', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + const spy = spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + + const result = service.loginPar({ + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }); + + expect(result).toBeUndefined(); + expect(spy).toHaveBeenCalled(); + })); + + it('calls parService.postParRequest with custom params when custom params are passed', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + const spy = spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + + const result = service.loginPar(config, { + customParams: { some: 'thing' }, + }); + + expect(result).toBeUndefined(); + expect(spy).toHaveBeenCalledOnceWith(config, { + customParams: { some: 'thing' }, + }); + })); + + it('returns undefined and logs error when no url could be created', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue(''); + const spy = spyOn(loggerService, 'logError'); + + const result = service.loginPar(config); + + expect(result).toBeUndefined(); + expect(spy).toHaveBeenCalledTimes(1); + })); + + it('calls redirect service redirectTo when url could be created', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + const authOptions = {}; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue('some-par-url'); + const spy = spyOn(redirectService, 'redirectTo'); + + service.loginPar(config, authOptions); + + expect(spy).toHaveBeenCalledOnceWith('some-par-url'); + })); + + it('calls urlHandler when URL is passed', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue('some-par-url'); + const redirectToSpy = spyOn(redirectService, 'redirectTo'); + const spy = jasmine.createSpy(); + const urlHandler = (url: any): void => { + spy(url); + }; + + service.loginPar(config, { urlHandler }); + + expect(spy).toHaveBeenCalledOnceWith('some-par-url'); + expect(redirectToSpy).not.toHaveBeenCalled(); + })); + }); + + describe('loginWithPopUpPar', () => { + it('does nothing if it has an invalid response type', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(false); + const loggerSpy = spyOn(loggerService, 'logError'); + const config = {}; + const allConfigs = [config]; + + service.loginWithPopUpPar(config, allConfigs).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err.message).toBe('Invalid response type!'); + }, + }); + })); + + it('calls parService.postParRequest without custom params when no custom params are passed', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + const spy = spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + + service.loginWithPopUpPar(config, allConfigs).subscribe({ + error: (err) => { + expect(spy).toHaveBeenCalled(); + expect(err.message).toBe( + "Could not create URL with param requestUri: 'url'" + ); + }, + }); + })); + + it('calls parService.postParRequest with custom params when custom params are passed', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + const spy = spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + + service + .loginWithPopUpPar(config, allConfigs, { + customParams: { some: 'thing' }, + }) + .subscribe({ + error: (err) => { + expect(spy).toHaveBeenCalledOnceWith(config, { + customParams: { some: 'thing' }, + }); + expect(err.message).toBe( + "Could not create URL with param requestUri: 'url'" + ); + }, + }); + })); + + it('returns undefined and logs error when no URL could be created', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue(''); + const spy = spyOn(loggerService, 'logError'); + + service + .loginWithPopUpPar(config, allConfigs, { + customParams: { some: 'thing' }, + }) + .subscribe({ + error: (err) => { + expect(err.message).toBe( + "Could not create URL with param requestUri: 'url'" + ); + expect(spy).toHaveBeenCalledTimes(1); + }, + }); + })); + + it('calls popupService openPopUp when URL could be created', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue('some-par-url'); + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + spyOnProperty(popupService, 'result$').and.returnValue( + of({} as PopupResult) + ); + const spy = spyOn(popupService, 'openPopUp'); + + service.loginWithPopUpPar(config, allConfigs).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-par-url', undefined, config); + }); + })); + + it('returns correct properties if URL is received', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + configId: 'configId1', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue('some-par-url'); + + const checkAuthSpy = spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ + isAuthenticated: true, + configId: 'configId1', + idToken: '', + userData: { any: 'userData' }, + accessToken: 'anyAccessToken', + }) + ); + const popupResult: PopupResult = { + userClosed: false, + receivedUrl: 'someUrl', + }; + + spyOnProperty(popupService, 'result$').and.returnValue(of(popupResult)); + + service.loginWithPopUpPar(config, allConfigs).subscribe((result) => { + expect(checkAuthSpy).toHaveBeenCalledOnceWith( + config, + allConfigs, + 'someUrl' + ); + + expect(result).toEqual({ + isAuthenticated: true, + configId: 'configId1', + idToken: '', + userData: { any: 'userData' }, + accessToken: 'anyAccessToken', + }); + }); + })); + + it('returns correct properties if popup was closed by user', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + configId: 'configId1', + }; + const allConfigs = [config]; + + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + spyOn(parService, 'postParRequest').and.returnValue( + of({ requestUri: 'requestUri' } as ParResponse) + ); + spyOn(urlService, 'getAuthorizeParUrl').and.returnValue('some-par-url'); + + const checkAuthSpy = spyOn(checkAuthService, 'checkAuth'); + const popupResult = { userClosed: true } as PopupResult; + + spyOnProperty(popupService, 'result$').and.returnValue(of(popupResult)); + + service.loginWithPopUpPar(config, allConfigs).subscribe((result) => { + expect(checkAuthSpy).not.toHaveBeenCalled(); + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: 'User closed popup', + configId: 'configId1', + idToken: '', + userData: null, + accessToken: '', + }); + }); + })); + }); +}); diff --git a/src/login/par/par-login.service.ts b/src/login/par/par-login.service.ts new file mode 100644 index 0000000..8d34d9a --- /dev/null +++ b/src/login/par/par-login.service.ts @@ -0,0 +1,172 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { switchMap, take } from 'rxjs/operators'; +import { AuthOptions } from '../../auth-options'; +import { CheckAuthService } from '../../auth-state/check-auth.service'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { RedirectService } from '../../utils/redirect/redirect.service'; +import { UrlService } from '../../utils/url/url.service'; +import { LoginResponse } from '../login-response'; +import { PopupOptions } from '../popup/popup-options'; +import { PopupResult } from '../popup/popup-result'; +import { PopUpService } from '../popup/popup.service'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; +import { ParResponse } from './par-response'; +import { ParService } from './par.service'; + +@Injectable() +export class ParLoginService { + private readonly loggerService = inject(LoggerService); + + private readonly responseTypeValidationService = inject( + ResponseTypeValidationService + ); + + private readonly urlService = inject(UrlService); + + private readonly redirectService = inject(RedirectService); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + private readonly popupService = inject(PopUpService); + + private readonly checkAuthService = inject(CheckAuthService); + + private readonly parService = inject(ParService); + + loginPar( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): void { + if ( + !this.responseTypeValidationService.hasConfigValidResponseType( + configuration + ) + ) { + this.loggerService.logError(configuration, 'Invalid response type!'); + + return; + } + + this.loggerService.logDebug( + configuration, + 'BEGIN Authorize OIDC Flow, no auth data' + ); + + this.authWellKnownService + .queryAndStoreAuthWellKnownEndPoints(configuration) + .pipe( + switchMap(() => + this.parService.postParRequest(configuration, authOptions) + ) + ) + .subscribe((response) => { + this.loggerService.logDebug(configuration, 'par response: ', response); + + const url = this.urlService.getAuthorizeParUrl( + response.requestUri, + configuration + ); + + this.loggerService.logDebug(configuration, 'par request url: ', url); + + if (!url) { + this.loggerService.logError( + configuration, + `Could not create URL with param ${response.requestUri}: '${url}'` + ); + + return; + } + + if (authOptions?.urlHandler) { + authOptions.urlHandler(url); + } else { + this.redirectService.redirectTo(url); + } + }); + } + + loginWithPopUpPar( + configuration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + authOptions?: AuthOptions, + popupOptions?: PopupOptions + ): Observable { + const { configId } = configuration; + + if ( + !this.responseTypeValidationService.hasConfigValidResponseType( + configuration + ) + ) { + const errorMessage = 'Invalid response type!'; + + this.loggerService.logError(configuration, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + + this.loggerService.logDebug( + configuration, + 'BEGIN Authorize OIDC Flow with popup, no auth data' + ); + + return this.authWellKnownService + .queryAndStoreAuthWellKnownEndPoints(configuration) + .pipe( + switchMap(() => + this.parService.postParRequest(configuration, authOptions) + ), + switchMap((response: ParResponse) => { + this.loggerService.logDebug( + configuration, + `par response: ${response}` + ); + + const url = this.urlService.getAuthorizeParUrl( + response.requestUri, + configuration + ); + + this.loggerService.logDebug(configuration, 'par request url: ', url); + + if (!url) { + const errorMessage = `Could not create URL with param ${response.requestUri}: 'url'`; + + this.loggerService.logError(configuration, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + + this.popupService.openPopUp(url, popupOptions, configuration); + + return this.popupService.result$.pipe( + take(1), + switchMap((result: PopupResult) => { + const { userClosed, receivedUrl } = result; + + if (userClosed) { + return of({ + isAuthenticated: false, + errorMessage: 'User closed popup', + userData: null, + idToken: '', + accessToken: '', + configId, + }); + } + + return this.checkAuthService.checkAuth( + configuration, + allConfigs, + receivedUrl + ); + }) + ); + }) + ); + } +} diff --git a/src/login/par/par-response.ts b/src/login/par/par-response.ts new file mode 100644 index 0000000..ac2d1a1 --- /dev/null +++ b/src/login/par/par-response.ts @@ -0,0 +1,4 @@ +export interface ParResponse { + requestUri: string; + expiresIn: number; +} diff --git a/src/login/par/par.service.spec.ts b/src/login/par/par.service.spec.ts new file mode 100644 index 0000000..7a222d7 --- /dev/null +++ b/src/login/par/par.service.spec.ts @@ -0,0 +1,204 @@ +import { HttpHeaders } from '@angular/common/http'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { createRetriableStream } from '../../../test/create-retriable-stream.helper'; +import { DataService } from '../../api/data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { ParService } from './par.service'; + +describe('ParService', () => { + let service: ParService; + let loggerService: LoggerService; + let urlService: UrlService; + let dataService: DataService; + let storagePersistenceService: StoragePersistenceService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(LoggerService), + mockProvider(UrlService), + mockProvider(DataService), + mockProvider(StoragePersistenceService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(ParService); + dataService = TestBed.inject(DataService); + loggerService = TestBed.inject(LoggerService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + urlService = TestBed.inject(UrlService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('postParRequest', () => { + it('throws error if authWellKnownEndPoints does not exist in storage', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of(null) + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue(null); + service.postParRequest({ configId: 'configId1' }).subscribe({ + error: (err) => { + expect(err.message).toBe( + 'Could not read PAR endpoint because authWellKnownEndPoints are not given' + ); + }, + }); + })); + + it('throws error if par endpoint does not exist in storage', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of(null) + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ some: 'thing' }); + service.postParRequest({ configId: 'configId1' }).subscribe({ + error: (err) => { + expect(err.message).toBe( + 'Could not read PAR endpoint from authWellKnownEndpoints' + ); + }, + }); + })); + + it('calls data service with correct params', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url123') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + + const dataServiceSpy = spyOn(dataService, 'post').and.returnValue(of({})); + + service.postParRequest({ configId: 'configId1' }).subscribe(() => { + expect(dataServiceSpy).toHaveBeenCalledOnceWith( + 'parEndpoint', + 'some-url123', + { configId: 'configId1' }, + jasmine.any(HttpHeaders) + ); + }); + })); + + it('Gives back correct object properties', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url456') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + spyOn(dataService, 'post').and.returnValue( + of({ expires_in: 123, request_uri: 'request_uri' }) + ); + service.postParRequest({ configId: 'configId1' }).subscribe((result) => { + expect(result).toEqual({ expiresIn: 123, requestUri: 'request_uri' }); + }); + })); + + it('throws error if data service has got an error', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url789') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + spyOn(dataService, 'post').and.returnValue( + throwError(() => new Error('ERROR')) + ); + const loggerSpy = spyOn(loggerService, 'logError'); + + service.postParRequest({ configId: 'configId1' }).subscribe({ + error: (err) => { + expect(err.message).toBe( + 'There was an error on ParService postParRequest' + ); + expect(loggerSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'There was an error on ParService postParRequest', + jasmine.any(Error) + ); + }, + }); + })); + + it('should retry once', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url456') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('ERROR')), + of({ expires_in: 123, request_uri: 'request_uri' }) + ) + ); + + service.postParRequest({ configId: 'configId1' }).subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(res).toEqual({ expiresIn: 123, requestUri: 'request_uri' }); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url456') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('ERROR')), + throwError(() => new Error('ERROR')), + of({ expires_in: 123, request_uri: 'request_uri' }) + ) + ); + + service.postParRequest({ configId: 'configId1' }).subscribe({ + next: (res) => { + expect(res).toBeTruthy(); + expect(res).toEqual({ expiresIn: 123, requestUri: 'request_uri' }); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + spyOn(urlService, 'createBodyForParCodeFlowRequest').and.returnValue( + of('some-url456') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ parEndpoint: 'parEndpoint' }); + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('ERROR')), + throwError(() => new Error('ERROR')), + throwError(() => new Error('ERROR')), + of({ expires_in: 123, request_uri: 'request_uri' }) + ) + ); + + service.postParRequest({ configId: 'configId1' }).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + }, + }); + })); + }); +}); diff --git a/src/login/par/par.service.ts b/src/login/par/par.service.ts new file mode 100644 index 0000000..9406487 --- /dev/null +++ b/src/login/par/par.service.ts @@ -0,0 +1,87 @@ +import { HttpHeaders } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, throwError } from 'rxjs'; +import { catchError, map, retry, switchMap } from 'rxjs/operators'; +import { DataService } from '../../api/data.service'; +import { AuthOptions } from '../../auth-options'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { UrlService } from '../../utils/url/url.service'; +import { ParResponse } from './par-response'; + +@Injectable() +export class ParService { + private readonly loggerService = inject(LoggerService); + + private readonly urlService = inject(UrlService); + + private readonly dataService = inject(DataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + postParRequest( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): Observable { + let headers: HttpHeaders = new HttpHeaders(); + + headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); + + const authWellKnownEndpoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (!authWellKnownEndpoints) { + return throwError( + () => + new Error( + 'Could not read PAR endpoint because authWellKnownEndPoints are not given' + ) + ); + } + + const parEndpoint = authWellKnownEndpoints.parEndpoint; + + if (!parEndpoint) { + return throwError( + () => + new Error('Could not read PAR endpoint from authWellKnownEndpoints') + ); + } + + return this.urlService + .createBodyForParCodeFlowRequest(configuration, authOptions) + .pipe( + switchMap((data) => { + return this.dataService + .post(parEndpoint, data, configuration, headers) + .pipe( + retry(2), + map((response: any) => { + this.loggerService.logDebug( + configuration, + 'par response: ', + response + ); + + return { + expiresIn: response.expires_in, + requestUri: response.request_uri, + }; + }), + catchError((error) => { + const errorMessage = `There was an error on ParService postParRequest`; + + this.loggerService.logError(configuration, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }) + ); + }) + ); + } +} diff --git a/src/login/popup/popup-login.service.spec.ts b/src/login/popup/popup-login.service.spec.ts new file mode 100644 index 0000000..9d8116e --- /dev/null +++ b/src/login/popup/popup-login.service.spec.ts @@ -0,0 +1,222 @@ +import { CommonModule } from '@angular/common'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { CheckAuthService } from '../../auth-state/check-auth.service'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { LoggerService } from '../../logging/logger.service'; +import { UrlService } from '../../utils/url/url.service'; +import { LoginResponse } from '../login-response'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; +import { PopUpLoginService } from './popup-login.service'; +import { PopupResult } from './popup-result'; +import { PopUpService } from './popup.service'; + +describe('PopUpLoginService', () => { + let popUpLoginService: PopUpLoginService; + let urlService: UrlService; + let loggerService: LoggerService; + let responseTypValidationService: ResponseTypeValidationService; + let authWellKnownService: AuthWellKnownService; + let popupService: PopUpService; + let checkAuthService: CheckAuthService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [CommonModule], + providers: [ + PopUpLoginService, + mockProvider(LoggerService), + mockProvider(ResponseTypeValidationService), + mockProvider(UrlService), + mockProvider(AuthWellKnownService), + mockProvider(PopUpService), + mockProvider(CheckAuthService), + ], + }); + }); + + beforeEach(() => { + popUpLoginService = TestBed.inject(PopUpLoginService); + urlService = TestBed.inject(UrlService); + loggerService = TestBed.inject(LoggerService); + responseTypValidationService = TestBed.inject( + ResponseTypeValidationService + ); + authWellKnownService = TestBed.inject(AuthWellKnownService); + popupService = TestBed.inject(PopUpService); + checkAuthService = TestBed.inject(CheckAuthService); + }); + + it('should create', () => { + expect(popUpLoginService).toBeTruthy(); + }); + + describe('loginWithPopUpStandard', () => { + it('does nothing if it has an invalid response type', waitForAsync(() => { + const config = { responseType: 'stubValue' }; + + spyOn( + responseTypValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(false); + const loggerSpy = spyOn(loggerService, 'logError'); + + popUpLoginService.loginWithPopUpStandard(config, [config]).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err.message).toBe('Invalid response type!'); + }, + }); + })); + + it('calls urlService.getAuthorizeUrl() if everything fits', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOnProperty(popupService, 'result$').and.returnValue( + of({} as PopupResult) + ); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + + popUpLoginService + .loginWithPopUpStandard(config, [config]) + .subscribe(() => { + expect(urlService.getAuthorizeUrl).toHaveBeenCalled(); + }); + })); + + it('opens popup if everything fits', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + spyOnProperty(popupService, 'result$').and.returnValue( + of({} as PopupResult) + ); + spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + const popupSpy = spyOn(popupService, 'openPopUp'); + + popUpLoginService + .loginWithPopUpStandard(config, [config]) + .subscribe(() => { + expect(popupSpy).toHaveBeenCalled(); + }); + })); + + it('returns three properties when popupservice received an url', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + spyOn(popupService, 'openPopUp'); + const checkAuthSpy = spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({ + isAuthenticated: true, + configId: 'configId1', + idToken: '', + userData: { any: 'userData' }, + accessToken: 'anyAccessToken', + }) + ); + const popupResult: PopupResult = { + userClosed: false, + receivedUrl: 'someUrl', + }; + + spyOnProperty(popupService, 'result$').and.returnValue(of(popupResult)); + + popUpLoginService + .loginWithPopUpStandard(config, [config]) + .subscribe((result) => { + expect(checkAuthSpy).toHaveBeenCalledOnceWith( + config, + [config], + 'someUrl' + ); + + expect(result).toEqual({ + isAuthenticated: true, + configId: 'configId1', + idToken: '', + userData: { any: 'userData' }, + accessToken: 'anyAccessToken', + }); + }); + })); + + it('returns two properties if popup was closed by user', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + configId: 'configId1', + }; + + spyOn( + responseTypValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + spyOn(popupService, 'openPopUp'); + const checkAuthSpy = spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + const popupResult = { userClosed: true } as PopupResult; + + spyOnProperty(popupService, 'result$').and.returnValue(of(popupResult)); + + popUpLoginService + .loginWithPopUpStandard(config, [config]) + .subscribe((result) => { + expect(checkAuthSpy).not.toHaveBeenCalled(); + expect(result).toEqual({ + isAuthenticated: false, + errorMessage: 'User closed popup', + configId: 'configId1', + idToken: '', + userData: null, + accessToken: '', + }); + }); + })); + }); +}); diff --git a/src/login/popup/popup-login.service.ts b/src/login/popup/popup-login.service.ts new file mode 100644 index 0000000..9a47674 --- /dev/null +++ b/src/login/popup/popup-login.service.ts @@ -0,0 +1,95 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { switchMap, take, tap } from 'rxjs/operators'; +import { AuthOptions } from '../../auth-options'; +import { CheckAuthService } from '../../auth-state/check-auth.service'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { UrlService } from '../../utils/url/url.service'; +import { LoginResponse } from '../login-response'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; +import { PopupOptions } from './popup-options'; +import { PopupResult } from './popup-result'; +import { PopUpService } from './popup.service'; + +@Injectable() +export class PopUpLoginService { + private readonly loggerService = inject(LoggerService); + + private readonly responseTypeValidationService = inject( + ResponseTypeValidationService + ); + + private readonly urlService = inject(UrlService); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + private readonly popupService = inject(PopUpService); + + private readonly checkAuthService = inject(CheckAuthService); + + loginWithPopUpStandard( + configuration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + authOptions?: AuthOptions, + popupOptions?: PopupOptions + ): Observable { + const { configId } = configuration; + + if ( + !this.responseTypeValidationService.hasConfigValidResponseType( + configuration + ) + ) { + const errorMessage = 'Invalid response type!'; + + this.loggerService.logError(configuration, errorMessage); + + return throwError(() => new Error(errorMessage)); + } + + this.loggerService.logDebug( + configuration, + 'BEGIN Authorize OIDC Flow with popup, no auth data' + ); + + return this.authWellKnownService + .queryAndStoreAuthWellKnownEndPoints(configuration) + .pipe( + switchMap(() => + this.urlService.getAuthorizeUrl(configuration, authOptions) + ), + tap((authUrl) => + this.popupService.openPopUp(authUrl, popupOptions, configuration) + ), + switchMap(() => { + return this.popupService.result$.pipe( + take(1), + switchMap((result: PopupResult) => { + const { userClosed, receivedUrl } = result; + + if (userClosed) { + const response: LoginResponse = { + isAuthenticated: false, + errorMessage: 'User closed popup', + userData: null, + idToken: '', + accessToken: '', + configId, + }; + + return of(response); + } + + return this.checkAuthService.checkAuth( + configuration, + allConfigs, + receivedUrl + ); + }) + ); + }) + ); + } +} diff --git a/src/login/popup/popup-options.ts b/src/login/popup/popup-options.ts new file mode 100644 index 0000000..9852a4c --- /dev/null +++ b/src/login/popup/popup-options.ts @@ -0,0 +1,6 @@ +export interface PopupOptions { + width?: number; + height?: number; + left?: number; + top?: number; +} diff --git a/src/login/popup/popup-result.ts b/src/login/popup/popup-result.ts new file mode 100644 index 0000000..dbd4479 --- /dev/null +++ b/src/login/popup/popup-result.ts @@ -0,0 +1,4 @@ +export interface PopupResult { + userClosed: boolean; + receivedUrl: string; +} diff --git a/src/login/popup/popup.service.spec.ts b/src/login/popup/popup.service.spec.ts new file mode 100644 index 0000000..27d714e --- /dev/null +++ b/src/login/popup/popup.service.spec.ts @@ -0,0 +1,343 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { PopupResult } from './popup-result'; +import { PopUpService } from './popup.service'; + +describe('PopUpService', () => { + let popUpService: PopUpService; + let storagePersistenceService: StoragePersistenceService; + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(StoragePersistenceService), + mockProvider(LoggerService), + ], + }); + }); + + beforeEach(() => { + storagePersistenceService = TestBed.inject(StoragePersistenceService); + loggerService = TestBed.inject(LoggerService); + popUpService = TestBed.inject(PopUpService); + }); + + let store: any = {}; + const mockStorage = { + getItem: (key: string): string => { + return key in store ? store[key] : null; + }, + setItem: (key: string, value: string): void => { + store[key] = `${value}`; + }, + removeItem: (key: string): void => { + delete store[key]; + }, + clear: (): void => { + store = {}; + }, + length: 1, + key: (_i: any): string => '', + }; + + it('should create', () => { + expect(popUpService).toBeTruthy(); + }); + + describe('isCurrentlyInPopup', () => { + it('returns false if can not access Session Storage', () => { + // arrange + spyOn(popUpService as any, 'canAccessSessionStorage').and.returnValue( + false + ); + spyOnProperty(popUpService as any, 'windowInternal').and.returnValue({ + opener: {} as Window, + }); + spyOn(storagePersistenceService, 'read').and.returnValue({ + popupauth: true, + }); + const config = {} as OpenIdConfiguration; + + // act + const result = popUpService.isCurrentlyInPopup(config); + + // assert + expect(result).toBe(false); + }); + + it('returns false if window has no opener', () => { + // arrange + spyOn(popUpService as any, 'canAccessSessionStorage').and.returnValue( + true + ); + spyOn(storagePersistenceService, 'read').and.returnValue({ + popupauth: true, + }); + const config = {} as OpenIdConfiguration; + + // act + const result = popUpService.isCurrentlyInPopup(config); + + // assert + expect(result).toBe(false); + }); + + it('returns true if isCurrentlyInPopup', () => { + // arrange + spyOn(popUpService as any, 'canAccessSessionStorage').and.returnValue( + true + ); + spyOnProperty(popUpService as any, 'windowInternal').and.returnValue({ + opener: {} as Window, + }); + spyOn(storagePersistenceService, 'read').and.returnValue({ + popupauth: true, + }); + const config = {} as OpenIdConfiguration; + + // act + const result = popUpService.isCurrentlyInPopup(config); + + // assert + expect(result).toBe(true); + }); + }); + + describe('result$', () => { + it('emits when internal subject is called', waitForAsync(() => { + const popupResult: PopupResult = { + userClosed: false, + receivedUrl: 'some-url1111', + }; + + popUpService.result$.subscribe((result) => { + expect(result).toBe(popupResult); + }); + + (popUpService as any).resultInternal$.next(popupResult); + })); + }); + + describe('openPopup', () => { + it('popup opens with parameters and default options', waitForAsync(() => { + // arrange + const popupSpy = spyOn(window, 'open').and.callFake( + () => + ({ + closed: true, + close: () => undefined, + } as Window) + ); + + // act + popUpService.openPopUp('url', {}, { configId: 'configId1' }); + + // assert + expect(popupSpy).toHaveBeenCalledOnceWith( + 'url', + '_blank', + jasmine.any(String) + ); + })); + + it('popup opens with parameters and passed options', waitForAsync(() => { + // arrange + const popupSpy = spyOn(window, 'open').and.callFake( + () => + ({ + closed: true, + close: () => undefined, + } as Window) + ); + + // act + popUpService.openPopUp('url', { width: 100 }, { configId: 'configId1' }); + + // assert + expect(popupSpy).toHaveBeenCalledOnceWith( + 'url', + '_blank', + jasmine.any(String) + ); + })); + + it('logs error and return if popup could not be opened', () => { + // arrange + spyOn(window, 'open').and.callFake(() => null); + const loggerSpy = spyOn(loggerService, 'logError'); + + // act + popUpService.openPopUp('url', { width: 100 }, { configId: 'configId1' }); + + // assert + expect(loggerSpy).toHaveBeenCalledOnceWith( + { configId: 'configId1' }, + 'Could not open popup' + ); + }); + + describe('popup closed', () => { + let popup: Window; + let popupResult: PopupResult; + let cleanUpSpy: jasmine.Spy; + + beforeEach(() => { + popup = { + closed: false, + close: () => undefined, + } as Window; + + spyOn(window, 'open').and.returnValue(popup); + + cleanUpSpy = spyOn(popUpService as any, 'cleanUp').and.callThrough(); + + popupResult = {} as PopupResult; + + popUpService.result$.subscribe((result) => (popupResult = result)); + }); + + it('message received with data', fakeAsync(() => { + let listener: (event: MessageEvent) => void = () => { + return; + }; + + spyOn(window, 'addEventListener').and.callFake( + (_: any, func: any) => (listener = func) + ); + + popUpService.openPopUp('url', {}, { configId: 'configId1' }); + + expect(popupResult).toEqual({} as PopupResult); + expect(cleanUpSpy).not.toHaveBeenCalled(); + + listener(new MessageEvent('message', { data: 'some-url1111' })); + + tick(200); + + expect(popupResult).toEqual({ + userClosed: false, + receivedUrl: 'some-url1111', + }); + expect(cleanUpSpy).toHaveBeenCalledOnceWith(listener, { + configId: 'configId1', + }); + })); + + it('message received without data does return but cleanup does not throw event', fakeAsync(() => { + let listener: (event: MessageEvent) => void = () => { + return; + }; + + spyOn(window, 'addEventListener').and.callFake( + (_: any, func: any) => (listener = func) + ); + const nextSpy = spyOn((popUpService as any).resultInternal$, 'next'); + + popUpService.openPopUp('url', {}, { configId: 'configId1' }); + + expect(popupResult).toEqual({} as PopupResult); + expect(cleanUpSpy).not.toHaveBeenCalled(); + + listener(new MessageEvent('message', { data: null })); + + tick(200); + + expect(popupResult).toEqual({} as PopupResult); + expect(cleanUpSpy).toHaveBeenCalled(); + expect(nextSpy).not.toHaveBeenCalled(); + })); + + it('user closed', fakeAsync(() => { + popUpService.openPopUp('url', undefined, { configId: 'configId1' }); + + expect(popupResult).toEqual({} as PopupResult); + expect(cleanUpSpy).not.toHaveBeenCalled(); + + (popup as any).closed = true; + + tick(200); + + expect(popupResult).toEqual({ + userClosed: true, + receivedUrl: '', + } as PopupResult); + expect(cleanUpSpy).toHaveBeenCalled(); + })); + }); + }); + + describe('sendMessageToMainWindow', () => { + it('does nothing if window.opener is null', waitForAsync(() => { + // arrange + spyOnProperty(window, 'opener').and.returnValue(null); + + const sendMessageSpy = spyOn(popUpService as any, 'sendMessage'); + + // act + popUpService.sendMessageToMainWindow('', {}); + + // assert + expect(sendMessageSpy).not.toHaveBeenCalled(); + })); + + it('calls postMessage when window opener is given', waitForAsync(() => { + // arrange + spyOnProperty(window, 'opener').and.returnValue({ + postMessage: () => undefined, + }); + const sendMessageSpy = spyOn(window.opener, 'postMessage'); + + // act + popUpService.sendMessageToMainWindow('someUrl', {}); + + // assert + expect(sendMessageSpy).toHaveBeenCalledOnceWith( + 'someUrl', + jasmine.any(String) + ); + })); + }); + + describe('cleanUp', () => { + it('calls removeEventListener on window with correct params', waitForAsync(() => { + // arrange + const spy = spyOn(window, 'removeEventListener').and.callFake( + () => undefined + ); + const listener: any = null; + + // act + (popUpService as any).cleanUp(listener, { configId: 'configId1' }); + + // assert + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledOnceWith('message', listener, false); + })); + + it('removes popup from sessionstorage, closes and nulls when popup is opened', waitForAsync(() => { + // arrange + const popupMock = { + anyThing: 'truthy', + sessionStorage: mockStorage, + close: (): void => undefined, + }; + const removeItemSpy = spyOn(storagePersistenceService, 'remove'); + const closeSpy = spyOn(popupMock, 'close'); + + // act + (popUpService as any).popUp = popupMock; + (popUpService as any).cleanUp(null, { configId: 'configId1' }); + + // assert + expect(removeItemSpy).toHaveBeenCalledOnceWith('popupauth', { + configId: 'configId1', + }); + expect(closeSpy).toHaveBeenCalledTimes(1); + expect((popUpService as any).popUp).toBeNull(); + })); + }); +}); diff --git a/src/login/popup/popup.service.ts b/src/login/popup/popup.service.ts new file mode 100644 index 0000000..3bf6f65 --- /dev/null +++ b/src/login/popup/popup.service.ts @@ -0,0 +1,223 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { Observable, Subject } from 'rxjs'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { PopupOptions } from './popup-options'; +import { PopupResult } from './popup-result'; + +@Injectable() +export class PopUpService { + private readonly loggerService = inject(LoggerService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly document = inject(DOCUMENT); + + private readonly STORAGE_IDENTIFIER = 'popupauth'; + + private popUp: Window | null = null; + + private handle = -1; + + private readonly resultInternal$ = new Subject(); + + get result$(): Observable { + return this.resultInternal$.asObservable(); + } + + private get windowInternal(): Window | null { + return this.document.defaultView; + } + + isCurrentlyInPopup(config: OpenIdConfiguration): boolean { + if (this.canAccessSessionStorage()) { + const popup = this.storagePersistenceService.read( + this.STORAGE_IDENTIFIER, + config + ); + + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return false; + } + + return ( + Boolean(windowIdentifier.opener) && + windowIdentifier.opener !== windowIdentifier && + Boolean(popup) + ); + } + + return false; + } + + openPopUp( + url: string | null, + popupOptions: PopupOptions | undefined, + config: OpenIdConfiguration + ): void { + const optionsToPass = this.getOptions(popupOptions); + + this.storagePersistenceService.write( + this.STORAGE_IDENTIFIER, + 'true', + config + ); + + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return; + } + + if (!url) { + this.loggerService.logError(config, 'Could not open popup, url is empty'); + + return; + } + + this.popUp = windowIdentifier.open(url, '_blank', optionsToPass); + + if (!this.popUp) { + this.storagePersistenceService.remove(this.STORAGE_IDENTIFIER, config); + this.loggerService.logError(config, 'Could not open popup'); + + return; + } + + this.loggerService.logDebug(config, 'Opened popup with url ' + url); + + const listener = (event: MessageEvent): void => { + if (!event?.data || typeof event.data !== 'string') { + if (config.disableCleaningPopupOnInvalidMessage) { + return; + } + this.cleanUp(listener, config); + + return; + } + + this.loggerService.logDebug( + config, + 'Received message from popup with url ' + event.data + ); + + this.resultInternal$.next({ userClosed: false, receivedUrl: event.data }); + + this.cleanUp(listener, config); + }; + + windowIdentifier.addEventListener('message', listener, false); + + this.handle = windowIdentifier.setInterval(() => { + if (this.popUp?.closed) { + this.resultInternal$.next({ userClosed: true, receivedUrl: '' }); + + this.cleanUp(listener, config); + } + }, 200); + } + + sendMessageToMainWindow(url: string, config: OpenIdConfiguration): void { + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return; + } + + if (windowIdentifier.opener) { + const href = windowIdentifier.location.href; + + this.sendMessage(url, href, config); + } + } + + private cleanUp(listener: any, config: OpenIdConfiguration): void { + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return; + } + + windowIdentifier.removeEventListener('message', listener, false); + windowIdentifier.clearInterval(this.handle); + + if (this.popUp) { + this.storagePersistenceService.remove(this.STORAGE_IDENTIFIER, config); + this.popUp.close(); + this.popUp = null; + } + } + + private sendMessage( + url: string, + href: string, + config: OpenIdConfiguration + ): void { + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return; + } + + if (!url) { + this.loggerService.logDebug( + config, + `Can not send message to parent, no url: '${url}'` + ); + + return; + } + + windowIdentifier.opener.postMessage(url, href); + } + + private getOptions(popupOptions: PopupOptions | undefined): string { + const popupDefaultOptions = { + width: 500, + height: 500, + left: 50, + top: 50, + }; + const options: PopupOptions = { + ...popupDefaultOptions, + ...(popupOptions || {}), + }; + const windowIdentifier = this.windowInternal; + + if (!windowIdentifier) { + return ''; + } + + const width = options.width || popupDefaultOptions.width; + const height = options.height || popupDefaultOptions.height; + + const left: number = + windowIdentifier.screenLeft + (windowIdentifier.outerWidth - width) / 2; + const top: number = + windowIdentifier.screenTop + (windowIdentifier.outerHeight - height) / 2; + + options.left = left; + options.top = top; + + return Object.entries(options) + .map( + ([key, value]) => + `${encodeURIComponent(key)}=${encodeURIComponent(value)}` + ) + .join(','); + } + + private canAccessSessionStorage(): boolean { + return ( + typeof navigator !== 'undefined' && + navigator.cookieEnabled && + typeof Storage !== 'undefined' + ); + } +} diff --git a/src/login/response-type-validation/response-type-validation.service.spec.ts b/src/login/response-type-validation/response-type-validation.service.spec.ts new file mode 100644 index 0000000..679841c --- /dev/null +++ b/src/login/response-type-validation/response-type-validation.service.spec.ts @@ -0,0 +1,66 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { LoggerService } from '../../logging/logger.service'; +import { FlowHelper } from '../../utils/flowHelper/flow-helper.service'; +import { ResponseTypeValidationService } from './response-type-validation.service'; + +describe('ResponseTypeValidationService', () => { + let responseTypeValidationService: ResponseTypeValidationService; + let flowHelper: FlowHelper; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + ResponseTypeValidationService, + mockProvider(LoggerService), + mockProvider(FlowHelper), + ], + }); + }); + + beforeEach(() => { + responseTypeValidationService = TestBed.inject( + ResponseTypeValidationService + ); + flowHelper = TestBed.inject(FlowHelper); + }); + + it('should create', () => { + expect(responseTypeValidationService).toBeTruthy(); + }); + + describe('hasConfigValidResponseType', () => { + it('returns true if current configured flow is any implicit flow', () => { + spyOn(flowHelper, 'isCurrentFlowAnyImplicitFlow').and.returnValue(true); + + const result = responseTypeValidationService.hasConfigValidResponseType({ + configId: 'configId1', + }); + + expect(result).toEqual(true); + }); + + it('returns true if current configured flow is code flow', () => { + spyOn(flowHelper, 'isCurrentFlowAnyImplicitFlow').and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + + const result = responseTypeValidationService.hasConfigValidResponseType({ + configId: 'configId1', + }); + + expect(result).toEqual(true); + }); + + it('returns false if current configured flow is neither code nor implicit flow', () => { + spyOn(flowHelper, 'isCurrentFlowAnyImplicitFlow').and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + + const result = responseTypeValidationService.hasConfigValidResponseType({ + configId: 'configId1', + }); + + expect(result).toEqual(false); + }); + }); +}); diff --git a/src/login/response-type-validation/response-type-validation.service.ts b/src/login/response-type-validation/response-type-validation.service.ts new file mode 100644 index 0000000..0437ad2 --- /dev/null +++ b/src/login/response-type-validation/response-type-validation.service.ts @@ -0,0 +1,28 @@ +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; +import { FlowHelper } from '../../utils/flowHelper/flow-helper.service'; + +@Injectable() +export class ResponseTypeValidationService { + private readonly loggerService = inject(LoggerService); + + private readonly flowHelper = inject(FlowHelper); + + hasConfigValidResponseType(configuration: OpenIdConfiguration): boolean { + if (this.flowHelper.isCurrentFlowAnyImplicitFlow(configuration)) { + return true; + } + + if (this.flowHelper.isCurrentFlowCodeFlow(configuration)) { + return true; + } + + this.loggerService.logWarning( + configuration, + 'module configured incorrectly, invalid response_type. Check the responseType in the config' + ); + + return false; + } +} diff --git a/src/login/standard/standard-login.service.spec.ts b/src/login/standard/standard-login.service.spec.ts new file mode 100644 index 0000000..4313ccc --- /dev/null +++ b/src/login/standard/standard-login.service.spec.ts @@ -0,0 +1,253 @@ +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { FlowsDataService } from '../../flows/flows-data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { RedirectService } from '../../utils/redirect/redirect.service'; +import { UrlService } from '../../utils/url/url.service'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; +import { StandardLoginService } from './standard-login.service'; + +describe('StandardLoginService', () => { + let standardLoginService: StandardLoginService; + let loggerService: LoggerService; + let responseTypeValidationService: ResponseTypeValidationService; + let urlService: UrlService; + let redirectService: RedirectService; + let authWellKnownService: AuthWellKnownService; + let flowsDataService: FlowsDataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + StandardLoginService, + mockProvider(LoggerService), + mockProvider(ResponseTypeValidationService), + mockProvider(UrlService), + mockProvider(RedirectService), + mockProvider(AuthWellKnownService), + mockProvider(FlowsDataService), + ], + }); + }); + + beforeEach(() => { + standardLoginService = TestBed.inject(StandardLoginService); + loggerService = TestBed.inject(LoggerService); + responseTypeValidationService = TestBed.inject( + ResponseTypeValidationService + ); + standardLoginService = TestBed.inject(StandardLoginService); + urlService = TestBed.inject(UrlService); + redirectService = TestBed.inject(RedirectService); + authWellKnownService = TestBed.inject(AuthWellKnownService); + flowsDataService = TestBed.inject(FlowsDataService); + }); + + it('should create', () => { + expect(standardLoginService).toBeTruthy(); + }); + + describe('loginStandard', () => { + it('does nothing if it has an invalid response type', waitForAsync(() => { + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(false); + const loggerSpy = spyOn(loggerService, 'logError'); + + const result = standardLoginService.loginStandard({ + configId: 'configId1', + }); + + expect(result).toBeUndefined(); + expect(loggerSpy).toHaveBeenCalled(); + })); + + it('calls flowsDataService.setCodeFlowInProgress() if everything fits', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + const flowsDataSpy = spyOn(flowsDataService, 'setCodeFlowInProgress'); + + const result = standardLoginService.loginStandard(config); + + expect(result).toBeUndefined(); + expect(flowsDataSpy).toHaveBeenCalled(); + })); + + it('calls urlService.getAuthorizeUrl() if everything fits', waitForAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + + const result = standardLoginService.loginStandard(config); + + expect(result).toBeUndefined(); + })); + + it('redirects to URL with no URL handler', fakeAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + const redirectSpy = spyOn( + redirectService, + 'redirectTo' + ).and.callThrough(); + + standardLoginService.loginStandard(config); + tick(); + expect(redirectSpy).toHaveBeenCalledOnceWith('someUrl'); + })); + + it('redirects to URL with URL handler when urlHandler is given', fakeAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + const redirectSpy = spyOn(redirectService, 'redirectTo').and.callFake( + () => undefined + ); + const spy = jasmine.createSpy(); + const urlHandler = (url: any): void => { + spy(url); + }; + + standardLoginService.loginStandard(config, { urlHandler }); + tick(); + expect(spy).toHaveBeenCalledOnceWith('someUrl'); + expect(redirectSpy).not.toHaveBeenCalled(); + })); + + it('calls resetSilentRenewRunning', fakeAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('someUrl')); + const flowsDataSpy = spyOn(flowsDataService, 'resetSilentRenewRunning'); + + standardLoginService.loginStandard(config, {}); + tick(); + + expect(flowsDataSpy).toHaveBeenCalled(); + })); + + it('calls getAuthorizeUrl with custom params if they are given as parameter', fakeAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + const getAuthorizeUrlSpy = spyOn( + urlService, + 'getAuthorizeUrl' + ).and.returnValue(of('someUrl')); + const redirectSpy = spyOn(redirectService, 'redirectTo').and.callFake( + () => undefined + ); + + standardLoginService.loginStandard(config, { + customParams: { to: 'add', as: 'well' }, + }); + tick(); + expect(redirectSpy).toHaveBeenCalledOnceWith('someUrl'); + expect(getAuthorizeUrlSpy).toHaveBeenCalledOnceWith(config, { + customParams: { to: 'add', as: 'well' }, + }); + })); + + it('does nothing, logs only if getAuthorizeUrl returns falsy', fakeAsync(() => { + const config = { + authWellknownEndpointUrl: 'authWellknownEndpoint', + responseType: 'stubValue', + }; + + spyOn( + responseTypeValidationService, + 'hasConfigValidResponseType' + ).and.returnValue(true); + spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + const loggerSpy = spyOn(loggerService, 'logError'); + + spyOn(urlService, 'getAuthorizeUrl').and.returnValue(of('')); + const redirectSpy = spyOn(redirectService, 'redirectTo').and.callFake( + () => undefined + ); + + standardLoginService.loginStandard(config); + tick(); + expect(loggerSpy).toHaveBeenCalledOnceWith( + config, + 'Could not create URL', + '' + ); + expect(redirectSpy).not.toHaveBeenCalled(); + })); + }); +}); diff --git a/src/login/standard/standard-login.service.ts b/src/login/standard/standard-login.service.ts new file mode 100644 index 0000000..d4e230d --- /dev/null +++ b/src/login/standard/standard-login.service.ts @@ -0,0 +1,75 @@ +import { inject, Injectable } from 'injection-js'; +import { AuthOptions } from '../../auth-options'; +import { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { FlowsDataService } from '../../flows/flows-data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { RedirectService } from '../../utils/redirect/redirect.service'; +import { UrlService } from '../../utils/url/url.service'; +import { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service'; + +@Injectable() +export class StandardLoginService { + private readonly loggerService = inject(LoggerService); + + private readonly responseTypeValidationService = inject( + ResponseTypeValidationService + ); + + private readonly urlService = inject(UrlService); + + private readonly redirectService = inject(RedirectService); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + private readonly flowsDataService = inject(FlowsDataService); + + loginStandard( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): void { + if ( + !this.responseTypeValidationService.hasConfigValidResponseType( + configuration + ) + ) { + this.loggerService.logError(configuration, 'Invalid response type!'); + + return; + } + + this.loggerService.logDebug( + configuration, + 'BEGIN Authorize OIDC Flow, no auth data' + ); + this.flowsDataService.setCodeFlowInProgress(configuration); + + this.authWellKnownService + .queryAndStoreAuthWellKnownEndPoints(configuration) + .subscribe(() => { + const { urlHandler } = authOptions || {}; + + this.flowsDataService.resetSilentRenewRunning(configuration); + + this.urlService + .getAuthorizeUrl(configuration, authOptions) + .subscribe((url) => { + if (!url) { + this.loggerService.logError( + configuration, + 'Could not create URL', + url + ); + + return; + } + + if (urlHandler) { + urlHandler(url); + } else { + this.redirectService.redirectTo(url); + } + }); + }); + } +} diff --git a/src/logoff-revoke/logoff-revocation.service.spec.ts b/src/logoff-revoke/logoff-revocation.service.spec.ts new file mode 100644 index 0000000..94d6299 --- /dev/null +++ b/src/logoff-revoke/logoff-revocation.service.spec.ts @@ -0,0 +1,825 @@ +import { HttpHeaders } from '@angular/common/http'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Observable, of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { createRetriableStream } from '../../test/create-retriable-stream.helper'; +import { DataService } from '../api/data.service'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { CheckSessionService } from '../iframe/check-session.service'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { RedirectService } from '../utils/redirect/redirect.service'; +import { UrlService } from '../utils/url/url.service'; +import { LogoffRevocationService } from './logoff-revocation.service'; + +describe('Logout and Revoke Service', () => { + let service: LogoffRevocationService; + let dataService: DataService; + let loggerService: LoggerService; + let storagePersistenceService: StoragePersistenceService; + let urlService: UrlService; + let checkSessionService: CheckSessionService; + let resetAuthDataService: ResetAuthDataService; + let redirectService: RedirectService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(DataService), + mockProvider(LoggerService), + mockProvider(StoragePersistenceService), + mockProvider(UrlService), + mockProvider(CheckSessionService), + mockProvider(ResetAuthDataService), + mockProvider(RedirectService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(LogoffRevocationService); + dataService = TestBed.inject(DataService); + loggerService = TestBed.inject(LoggerService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + urlService = TestBed.inject(UrlService); + checkSessionService = TestBed.inject(CheckSessionService); + resetAuthDataService = TestBed.inject(ResetAuthDataService); + redirectService = TestBed.inject(RedirectService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('revokeAccessToken', () => { + it('uses token parameter if token as parameter is passed in the method', () => { + // Arrange + const paramToken = 'passedTokenAsParam'; + const revocationSpy = spyOn( + urlService, + 'createRevocationEndpointBodyAccessToken' + ); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue(of(null)); + + // Act + service.revokeAccessToken(config, paramToken); + // Assert + expect(revocationSpy).toHaveBeenCalledOnceWith(paramToken, config); + }); + + it('uses token parameter from persistence if no param is provided', () => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + const revocationSpy = spyOn( + urlService, + 'createRevocationEndpointBodyAccessToken' + ); + + spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1' }; + + // Act + service.revokeAccessToken(config); + // Assert + expect(revocationSpy).toHaveBeenCalledOnceWith(paramToken, config); + }); + + it('returns type observable', () => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1' }; + + // Act + const result = service.revokeAccessToken(config); + + // Assert + expect(result).toEqual(jasmine.any(Observable)); + }); + + it('loggs and returns unmodified response if request is positive', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + + spyOn(dataService, 'post').and.returnValue(of({ data: 'anything' })); + const config = { configId: 'configId1' }; + + // Act + service.revokeAccessToken(config).subscribe((result) => { + // Assert + expect(result).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }); + })); + + it('loggs error when request is negative', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logError'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + throwError(() => new Error('Error')) + ); + + // Act + service.revokeAccessToken(config).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it('should retry once', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeAccessToken(config).subscribe({ + next: (res) => { + // Assert + expect(res).toBeTruthy(); + expect(res).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeAccessToken(config).subscribe({ + next: (res) => { + // Assert + expect(res).toBeTruthy(); + expect(res).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logError'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeAccessToken(config).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + }); + + describe('revokeRefreshToken', () => { + it('uses refresh token parameter if token as parameter is passed in the method', () => { + // Arrange + const paramToken = 'passedTokenAsParam'; + const revocationSpy = spyOn( + urlService, + 'createRevocationEndpointBodyRefreshToken' + ); + + spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1' }; + + // Act + service.revokeRefreshToken(config, paramToken); + // Assert + expect(revocationSpy).toHaveBeenCalledOnceWith(paramToken, config); + }); + + it('uses refresh token parameter from persistence if no param is provided', () => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + const config = { configId: 'configId1' }; + const revocationSpy = spyOn( + urlService, + 'createRevocationEndpointBodyRefreshToken' + ); + + spyOn(dataService, 'post').and.returnValue(of(null)); + // Act + service.revokeRefreshToken(config); + // Assert + expect(revocationSpy).toHaveBeenCalledOnceWith(paramToken, config); + }); + + it('returns type observable', () => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1' }; + + // Act + const result = service.revokeRefreshToken(config); + + // Assert + expect(result).toEqual(jasmine.any(Observable)); + }); + + it('loggs and returns unmodified response if request is positive', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + + spyOn(dataService, 'post').and.returnValue(of({ data: 'anything' })); + const config = { configId: 'configId1' }; + + // Act + service.revokeRefreshToken(config).subscribe((result) => { + // Assert + expect(result).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }); + })); + + it('loggs error when request is negative', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logError'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + throwError(() => new Error('Error')) + ); + + // Act + service.revokeRefreshToken(config).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it('should retry once', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeRefreshToken(config).subscribe({ + next: (res) => { + // Assert + expect(res).toBeTruthy(); + expect(res).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logDebug'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeRefreshToken(config).subscribe({ + next: (res) => { + // Assert + expect(res).toBeTruthy(); + expect(res).toEqual({ data: 'anything' }); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(urlService, 'createRevocationEndpointBodyAccessToken'); + const loggerSpy = spyOn(loggerService, 'logError'); + const config = { configId: 'configId1' }; + + spyOn(dataService, 'post').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of({ data: 'anything' }) + ) + ); + + service.revokeRefreshToken(config).subscribe({ + error: (err) => { + expect(err).toBeTruthy(); + expect(loggerSpy).toHaveBeenCalled(); + }, + }); + })); + }); + + describe('logoff', () => { + it('logs and returns if `endSessionUrl` is false', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue(''); + + const serverStateChangedSpy = spyOn( + checkSessionService, + 'serverStateChanged' + ); + const config = { configId: 'configId1' }; + + // Act + const result$ = service.logoff(config, [config]); + + // Assert + result$.subscribe(() => { + expect(serverStateChangedSpy).not.toHaveBeenCalled(); + }); + })); + + it('logs and returns if `serverStateChanged` is true', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + const redirectSpy = spyOn(redirectService, 'redirectTo'); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(true); + const config = { configId: 'configId1' }; + + // Act + const result$ = service.logoff(config, [config]); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).not.toHaveBeenCalled(); + }); + })); + + it('calls urlHandler if urlhandler is passed', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + const spy = jasmine.createSpy(); + const urlHandler = (url: string): void => { + spy(url); + }; + const redirectSpy = spyOn(redirectService, 'redirectTo'); + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(false); + const config = { configId: 'configId1' }; + + // Act + const result$ = service.logoff(config, [config], { urlHandler }); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).not.toHaveBeenCalled(); + expect(spy).toHaveBeenCalledOnceWith('someValue'); + expect(resetAuthorizationDataSpy).toHaveBeenCalled(); + }); + })); + + it('calls redirect service if no logoutOptions are passed', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + + const redirectSpy = spyOn(redirectService, 'redirectTo'); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(false); + const config = { configId: 'configId1' }; + + // Act + const result$ = service.logoff(config, [config]); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).toHaveBeenCalledOnceWith('someValue'); + }); + })); + + it('calls redirect service if logoutOptions are passed and method is GET', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + + const redirectSpy = spyOn(redirectService, 'redirectTo'); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(false); + const config = { configId: 'configId1' }; + + // Act + const result$ = service.logoff(config, [config], { logoffMethod: 'GET' }); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).toHaveBeenCalledOnceWith('someValue'); + }); + })); + + it('calls dataservice post if logoutOptions are passed and method is POST', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + + const redirectSpy = spyOn(redirectService, 'redirectTo'); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(false); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'id-token' + ); + spyOn(urlService, 'getPostLogoutRedirectUrl').and.returnValue( + 'post-logout-redirect-url' + ); + spyOn(urlService, 'getEndSessionEndpoint').and.returnValue({ + url: 'some-url', + existingParams: '', + }); + const postSpy = spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1', clientId: 'clientId' }; + + // Act + const result$ = service.logoff(config, [config], { + logoffMethod: 'POST', + }); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).not.toHaveBeenCalled(); + expect(postSpy).toHaveBeenCalledOnceWith( + 'some-url', + { + id_token_hint: 'id-token', + client_id: 'clientId', + post_logout_redirect_uri: 'post-logout-redirect-url', + }, + config, + jasmine.anything() + ); + + const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders; + + expect(httpHeaders.has('Content-Type')).toBeTrue(); + expect(httpHeaders.get('Content-Type')).toBe( + 'application/x-www-form-urlencoded' + ); + }); + })); + + it('calls dataservice post if logoutOptions with customParams are passed and method is POST', waitForAsync(() => { + // Arrange + spyOn(urlService, 'getEndSessionUrl').and.returnValue('someValue'); + + const redirectSpy = spyOn(redirectService, 'redirectTo'); + + spyOn(checkSessionService, 'serverStateChanged').and.returnValue(false); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'id-token' + ); + spyOn(urlService, 'getPostLogoutRedirectUrl').and.returnValue( + 'post-logout-redirect-url' + ); + spyOn(urlService, 'getEndSessionEndpoint').and.returnValue({ + url: 'some-url', + existingParams: '', + }); + const postSpy = spyOn(dataService, 'post').and.returnValue(of(null)); + const config = { configId: 'configId1', clientId: 'clientId' }; + + // Act + const result$ = service.logoff(config, [config], { + logoffMethod: 'POST', + customParams: { + state: 'state', + logout_hint: 'logoutHint', + ui_locales: 'de fr en', + }, + }); + + // Assert + result$.subscribe(() => { + expect(redirectSpy).not.toHaveBeenCalled(); + expect(postSpy).toHaveBeenCalledOnceWith( + 'some-url', + { + id_token_hint: 'id-token', + client_id: 'clientId', + post_logout_redirect_uri: 'post-logout-redirect-url', + state: 'state', + logout_hint: 'logoutHint', + ui_locales: 'de fr en', + }, + config, + jasmine.anything() + ); + + const httpHeaders = postSpy.calls.mostRecent().args[3] as HttpHeaders; + + expect(httpHeaders.has('Content-Type')).toBeTrue(); + expect(httpHeaders.get('Content-Type')).toBe( + 'application/x-www-form-urlencoded' + ); + }); + })); + }); + + describe('logoffLocal', () => { + it('calls flowsService.resetAuthorizationData', () => { + // Arrange + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const config = { configId: 'configId1' }; + + // Act + service.logoffLocal(config, [config]); + + // Assert + expect(resetAuthorizationDataSpy).toHaveBeenCalled(); + }); + }); + + describe('logoffAndRevokeTokens', () => { + it('calls revokeRefreshToken and revokeAccessToken when storage holds a refreshtoken', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ revocationEndpoint: 'revocationEndpoint' }); + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + const revokeRefreshTokenSpy = spyOn( + service, + 'revokeRefreshToken' + ).and.returnValue(of({ any: 'thing' })); + const revokeAccessTokenSpy = spyOn( + service, + 'revokeAccessToken' + ).and.returnValue(of({ any: 'thing' })); + + // Act + service.logoffAndRevokeTokens(config, [config]).subscribe(() => { + // Assert + expect(revokeRefreshTokenSpy).toHaveBeenCalled(); + expect(revokeAccessTokenSpy).toHaveBeenCalled(); + }); + })); + + it('logs error when revokeaccesstoken throws an error', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ revocationEndpoint: 'revocationEndpoint' }); + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(service, 'revokeRefreshToken').and.returnValue( + of({ any: 'thing' }) + ); + const loggerSpy = spyOn(loggerService, 'logError'); + + spyOn(service, 'revokeAccessToken').and.returnValue( + throwError(() => new Error('Error')) + ); + + // Act + service.logoffAndRevokeTokens(config, [config]).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + + it('calls logoff in case of success', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(service, 'revokeRefreshToken').and.returnValue( + of({ any: 'thing' }) + ); + spyOn(service, 'revokeAccessToken').and.returnValue(of({ any: 'thing' })); + const logoffSpy = spyOn(service, 'logoff').and.returnValue(of(null)); + const config = { configId: 'configId1' }; + + // Act + service.logoffAndRevokeTokens(config, [config]).subscribe(() => { + // Assert + expect(logoffSpy).toHaveBeenCalled(); + }); + })); + + it('calls logoff with urlhandler in case of success', waitForAsync(() => { + // Arrange + const paramToken = 'damien'; + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue( + paramToken + ); + spyOn(service, 'revokeRefreshToken').and.returnValue( + of({ any: 'thing' }) + ); + spyOn(service, 'revokeAccessToken').and.returnValue(of({ any: 'thing' })); + const logoffSpy = spyOn(service, 'logoff').and.returnValue(of(null)); + const urlHandler = (_url: string): void => undefined; + const config = { configId: 'configId1' }; + + // Act + service + .logoffAndRevokeTokens(config, [config], { urlHandler }) + .subscribe(() => { + // Assert + expect(logoffSpy).toHaveBeenCalledOnceWith(config, [config], { + urlHandler, + }); + }); + })); + + it('calls revokeAccessToken when storage does not hold a refreshtoken', waitForAsync(() => { + // Arrange + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ revocationEndpoint: 'revocationEndpoint' }); + + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue(''); + const revokeRefreshTokenSpy = spyOn(service, 'revokeRefreshToken'); + const revokeAccessTokenSpy = spyOn( + service, + 'revokeAccessToken' + ).and.returnValue(of({ any: 'thing' })); + + // Act + service.logoffAndRevokeTokens(config, [config]).subscribe(() => { + // Assert + expect(revokeRefreshTokenSpy).not.toHaveBeenCalled(); + expect(revokeAccessTokenSpy).toHaveBeenCalled(); + }); + })); + + it('logs error when revokeaccesstoken throws an error', waitForAsync(() => { + // Arrange + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ revocationEndpoint: 'revocationEndpoint' }); + spyOn(storagePersistenceService, 'getRefreshToken').and.returnValue(''); + const loggerSpy = spyOn(loggerService, 'logError'); + + spyOn(service, 'revokeAccessToken').and.returnValue( + throwError(() => new Error('Error')) + ); + + // Act + service.logoffAndRevokeTokens(config, [config]).subscribe({ + error: (err) => { + expect(loggerSpy).toHaveBeenCalled(); + expect(err).toBeTruthy(); + }, + }); + })); + }); + + describe('logoffLocalMultiple', () => { + it('calls logoffLocal for every config which is present', () => { + // Arrange + const allConfigs = [{ configId: 'configId1' }, { configId: 'configId2' }]; + const resetAuthorizationDataSpy = spyOn( + resetAuthDataService, + 'resetAuthorizationData' + ); + const checkSessionServiceSpy = spyOn(checkSessionService, 'stop'); + + // Act + service.logoffLocalMultiple(allConfigs); + + // Assert + expect(resetAuthorizationDataSpy).toHaveBeenCalledTimes(2); + expect(checkSessionServiceSpy).toHaveBeenCalledTimes(2); + expect(resetAuthorizationDataSpy.calls.allArgs()).toEqual([ + [allConfigs[0], allConfigs], + [allConfigs[1], allConfigs], + ]); + }); + }); +}); diff --git a/src/logoff-revoke/logoff-revocation.service.ts b/src/logoff-revoke/logoff-revocation.service.ts new file mode 100644 index 0000000..b3187d6 --- /dev/null +++ b/src/logoff-revoke/logoff-revocation.service.ts @@ -0,0 +1,300 @@ +import { HttpHeaders } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of, throwError } from 'rxjs'; +import { catchError, concatMap, retry, switchMap } from 'rxjs/operators'; +import { DataService } from '../api/data.service'; +import { LogoutAuthOptions } from '../auth-options'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { ResetAuthDataService } from '../flows/reset-auth-data.service'; +import { CheckSessionService } from '../iframe/check-session.service'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { removeNullAndUndefinedValues } from '../utils/object/object.helper'; +import { RedirectService } from '../utils/redirect/redirect.service'; +import { UrlService } from '../utils/url/url.service'; + +@Injectable() +export class LogoffRevocationService { + private readonly loggerService = inject(LoggerService); + + private readonly dataService = inject(DataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly urlService = inject(UrlService); + + private readonly checkSessionService = inject(CheckSessionService); + + private readonly resetAuthDataService = inject(ResetAuthDataService); + + private readonly redirectService = inject(RedirectService); + + // Logs out on the server and the local client. + // If the server state has changed, check session, then only a local logout. + logoff( + config: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[], + logoutAuthOptions?: LogoutAuthOptions + ): Observable { + if (!config) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + this.loggerService.logDebug( + config, + 'logoff, remove auth', + logoutAuthOptions + ); + + const { urlHandler, customParams } = logoutAuthOptions || {}; + + const endSessionUrl = this.urlService.getEndSessionUrl( + config, + customParams + ); + + if (!endSessionUrl) { + this.loggerService.logDebug( + config, + 'No endsessionUrl present. Logoff was only locally. Returning.' + ); + + return of(null); + } + + if (this.checkSessionService.serverStateChanged(config)) { + this.loggerService.logDebug( + config, + 'Server State changed. Logoff was only locally. Returning.' + ); + + return of(null); + } + + if (urlHandler) { + this.loggerService.logDebug( + config, + `Custom UrlHandler found. Using this to handle logoff with url '${endSessionUrl}'` + ); + urlHandler(endSessionUrl); + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + + return of(null); + } + + return this.logoffInternal( + logoutAuthOptions, + endSessionUrl, + config, + allConfigs + ); + } + + logoffLocal( + config: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[] + ): void { + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + this.checkSessionService.stop(); + } + + logoffLocalMultiple(allConfigs: OpenIdConfiguration[]): void { + allConfigs.forEach((configuration) => + this.logoffLocal(configuration, allConfigs) + ); + } + + // The refresh token and and the access token are revoked on the server. If the refresh token does not exist + // only the access token is revoked. Then the logout run. + logoffAndRevokeTokens( + config: OpenIdConfiguration | null, + allConfigs: OpenIdConfiguration[], + logoutAuthOptions?: LogoutAuthOptions + ): Observable { + if (!config) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + const { revocationEndpoint } = + this.storagePersistenceService.read('authWellKnownEndPoints', config) || + {}; + + if (!revocationEndpoint) { + this.loggerService.logDebug(config, 'revocation endpoint not supported'); + + return this.logoff(config, allConfigs, logoutAuthOptions); + } + + if (this.storagePersistenceService.getRefreshToken(config)) { + return this.revokeRefreshToken(config).pipe( + switchMap((_) => this.revokeAccessToken(config)), + catchError((error) => { + const errorMessage = `revoke token failed`; + + this.loggerService.logError(config, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }), + concatMap(() => this.logoff(config, allConfigs, logoutAuthOptions)) + ); + } else { + return this.revokeAccessToken(config).pipe( + catchError((error) => { + const errorMessage = `revoke accessToken failed`; + + this.loggerService.logError(config, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }), + concatMap(() => this.logoff(config, allConfigs, logoutAuthOptions)) + ); + } + } + + // https://tools.ietf.org/html/rfc7009 + // revokes an access token on the STS. If no token is provided, then the token from + // the storage is revoked. You can pass any token to revoke. This makes it possible to + // manage your own tokens. The is a public API. + revokeAccessToken( + configuration: OpenIdConfiguration | null, + accessToken?: any + ): Observable { + if (!configuration) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + const accessTok = + accessToken || + this.storagePersistenceService.getAccessToken(configuration); + const body = this.urlService.createRevocationEndpointBodyAccessToken( + accessTok, + configuration + ); + + return this.sendRevokeRequest(configuration, body); + } + + // https://tools.ietf.org/html/rfc7009 + // revokes an refresh token on the STS. This is only required in the code flow with refresh tokens. + // If no token is provided, then the token from the storage is revoked. You can pass any token to revoke. + // This makes it possible to manage your own tokens. + revokeRefreshToken( + configuration: OpenIdConfiguration | null, + refreshToken?: any + ): Observable { + if (!configuration) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + const refreshTok = + refreshToken || + this.storagePersistenceService.getRefreshToken(configuration); + const body = this.urlService.createRevocationEndpointBodyRefreshToken( + refreshTok, + configuration + ); + + return this.sendRevokeRequest(configuration, body); + } + + private logoffInternal( + logoutAuthOptions: LogoutAuthOptions | undefined, + endSessionUrl: string, + config: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + const { logoffMethod, customParams } = logoutAuthOptions || {}; + + if (!logoffMethod || logoffMethod === 'GET') { + this.redirectService.redirectTo(endSessionUrl); + + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + + return of(null); + } + + const { state, logout_hint, ui_locales } = customParams || {}; + const { clientId } = config; + const idToken = this.storagePersistenceService.getIdToken(config); + const postLogoutRedirectUrl = + this.urlService.getPostLogoutRedirectUrl(config); + const headers = this.getHeaders(); + const { url } = this.urlService.getEndSessionEndpoint(config); + const body = { + id_token_hint: idToken, + client_id: clientId, + post_logout_redirect_uri: postLogoutRedirectUrl, + state, + logout_hint, + ui_locales, + }; + const bodyWithoutNullOrUndefined = removeNullAndUndefinedValues(body); + + this.resetAuthDataService.resetAuthorizationData(config, allConfigs); + + return this.dataService.post( + url, + bodyWithoutNullOrUndefined, + config, + headers + ); + } + + private sendRevokeRequest( + configuration: OpenIdConfiguration, + body: string | null + ): Observable { + const url = this.urlService.getRevocationEndpointUrl(configuration); + const headers = this.getHeaders(); + + return this.dataService.post(url, body, configuration, headers).pipe( + retry(2), + switchMap((response: any) => { + this.loggerService.logDebug( + configuration, + 'revocation endpoint post response: ', + response + ); + + return of(response); + }), + catchError((error) => { + const errorMessage = `Revocation request failed`; + + this.loggerService.logError(configuration, errorMessage, error); + + return throwError(() => new Error(errorMessage)); + }) + ); + } + + private getHeaders(): HttpHeaders { + let headers: HttpHeaders = new HttpHeaders(); + + headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); + + return headers; + } +} diff --git a/src/oidc.security.service.spec.ts b/src/oidc.security.service.spec.ts new file mode 100644 index 0000000..e9d124d --- /dev/null +++ b/src/oidc.security.service.spec.ts @@ -0,0 +1,794 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { mockProvider } from '../test/auto-mock'; +import { AuthStateService } from './auth-state/auth-state.service'; +import { CheckAuthService } from './auth-state/check-auth.service'; +import { CallbackService } from './callback/callback.service'; +import { RefreshSessionService } from './callback/refresh-session.service'; +import { AuthWellKnownService } from './config/auth-well-known/auth-well-known.service'; +import { ConfigurationService } from './config/config.service'; +import { FlowsDataService } from './flows/flows-data.service'; +import { CheckSessionService } from './iframe/check-session.service'; +import { LoginResponse } from './login/login-response'; +import { LoginService } from './login/login.service'; +import { LogoffRevocationService } from './logoff-revoke/logoff-revocation.service'; +import { OidcSecurityService } from './oidc.security.service'; +import { UserService } from './user-data/user.service'; +import { TokenHelperService } from './utils/tokenHelper/token-helper.service'; +import { UrlService } from './utils/url/url.service'; + +describe('OidcSecurityService', () => { + let oidcSecurityService: OidcSecurityService; + let configurationService: ConfigurationService; + let authStateService: AuthStateService; + let authWellKnownService: AuthWellKnownService; + let tokenHelperService: TokenHelperService; + let flowsDataService: FlowsDataService; + let logoffRevocationService: LogoffRevocationService; + let loginService: LoginService; + let refreshSessionService: RefreshSessionService; + let checkAuthService: CheckAuthService; + let checkSessionService: CheckSessionService; + let userService: UserService; + let urlService: UrlService; + let callbackService: CallbackService; + let authenticatedSpy: jasmine.Spy; + let userDataSpy: jasmine.Spy; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + OidcSecurityService, + mockProvider(CheckSessionService), + mockProvider(CheckAuthService), + mockProvider(UserService), + mockProvider(TokenHelperService), + mockProvider(ConfigurationService), + mockProvider(AuthStateService), + mockProvider(FlowsDataService), + mockProvider(CallbackService), + mockProvider(LogoffRevocationService), + mockProvider(LoginService), + mockProvider(RefreshSessionService), + mockProvider(UrlService), + mockProvider(AuthWellKnownService), + ], + }); + }); + + beforeEach(() => { + authStateService = TestBed.inject(AuthStateService); + tokenHelperService = TestBed.inject(TokenHelperService); + configurationService = TestBed.inject(ConfigurationService); + flowsDataService = TestBed.inject(FlowsDataService); + logoffRevocationService = TestBed.inject(LogoffRevocationService); + loginService = TestBed.inject(LoginService); + refreshSessionService = TestBed.inject(RefreshSessionService); + checkAuthService = TestBed.inject(CheckAuthService); + userService = TestBed.inject(UserService); + urlService = TestBed.inject(UrlService); + authWellKnownService = TestBed.inject(AuthWellKnownService); + checkSessionService = TestBed.inject(CheckSessionService); + callbackService = TestBed.inject(CallbackService); + + // this is required because these methods will be invoked by the signal properties when the service is created + authenticatedSpy = spyOnProperty( + authStateService, + 'authenticated$' + ).and.returnValue( + of({ isAuthenticated: false, allConfigsAuthenticated: [] }) + ); + userDataSpy = spyOnProperty(userService, 'userData$').and.returnValue( + of({ userData: null, allUserData: [] }) + ); + oidcSecurityService = TestBed.inject(OidcSecurityService); + }); + + it('should create', () => { + expect(oidcSecurityService).toBeTruthy(); + }); + + describe('userData$', () => { + it('calls userService.userData$', waitForAsync(() => { + oidcSecurityService.userData$.subscribe(() => { + // 1x from this subscribe + // 1x by the signal property + expect(userDataSpy).toHaveBeenCalledTimes(2); + }); + })); + }); + + describe('userData', () => { + it('calls userService.userData$', waitForAsync(() => { + const _userdata = oidcSecurityService.userData(); + + expect(userDataSpy).toHaveBeenCalledTimes(1); + })); + }); + + describe('isAuthenticated$', () => { + it('calls authStateService.isAuthenticated$', waitForAsync(() => { + oidcSecurityService.isAuthenticated$.subscribe(() => { + // 1x from this subscribe + // 1x by the signal property + expect(authenticatedSpy).toHaveBeenCalledTimes(2); + }); + })); + }); + + describe('authenticated', () => { + it('calls authStateService.isAuthenticated$', waitForAsync(() => { + const _authenticated = oidcSecurityService.authenticated(); + + expect(authenticatedSpy).toHaveBeenCalledTimes(1); + })); + }); + + describe('checkSessionChanged$', () => { + it('calls checkSessionService.checkSessionChanged$', waitForAsync(() => { + const spy = spyOnProperty( + checkSessionService, + 'checkSessionChanged$' + ).and.returnValue(of(true)); + + oidcSecurityService.checkSessionChanged$.subscribe(() => { + expect(spy).toHaveBeenCalledTimes(1); + }); + })); + }); + + describe('stsCallback$', () => { + it('calls callbackService.stsCallback$', waitForAsync(() => { + const spy = spyOnProperty( + callbackService, + 'stsCallback$' + ).and.returnValue(of()); + + oidcSecurityService.stsCallback$.subscribe(() => { + expect(spy).toHaveBeenCalledTimes(1); + }); + })); + }); + + describe('preloadAuthWellKnownDocument', () => { + it('calls authWellKnownService.queryAndStoreAuthWellKnownEndPoints with config', waitForAsync(() => { + const config = { configId: 'configid1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn( + authWellKnownService, + 'queryAndStoreAuthWellKnownEndPoints' + ).and.returnValue(of({})); + + oidcSecurityService.preloadAuthWellKnownDocument().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('getConfigurations', () => { + it('is not of type observable', () => { + expect(oidcSecurityService.getConfigurations).not.toEqual( + jasmine.any(Observable) + ); + }); + + it('calls configurationProvider.getAllConfigurations', () => { + const spy = spyOn(configurationService, 'getAllConfigurations'); + + oidcSecurityService.getConfigurations(); + + expect(spy).toHaveBeenCalledTimes(1); + }); + }); + + describe('getConfiguration', () => { + it('is not of type observable', () => { + expect(oidcSecurityService.getConfiguration).not.toEqual( + jasmine.any(Observable) + ); + }); + + it('calls configurationProvider.getOpenIDConfiguration with passed configId when configId is passed', () => { + const spy = spyOn(configurationService, 'getOpenIDConfiguration'); + + oidcSecurityService.getConfiguration('configId'); + + expect(spy).toHaveBeenCalledOnceWith('configId'); + }); + }); + + describe('getUserData', () => { + it('calls configurationProvider.getOpenIDConfiguration with config', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(userService, 'getUserDataFromStore').and.returnValue({ + some: 'thing', + }); + + oidcSecurityService.getUserData('configId').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + + it('returns userdata', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + spyOn(userService, 'getUserDataFromStore').and.returnValue({ + some: 'thing', + }); + + oidcSecurityService.getUserData('configId').subscribe((result) => { + expect(result).toEqual({ some: 'thing' }); + }); + })); + }); + + describe('checkAuth', () => { + it('calls checkAuthService.checkAuth() without url if none is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + + oidcSecurityService.checkAuth().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], undefined); + }); + })); + + it('calls checkAuthService.checkAuth() with url if one is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn(checkAuthService, 'checkAuth').and.returnValue( + of({} as LoginResponse) + ); + + oidcSecurityService.checkAuth('some-url').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], 'some-url'); + }); + })); + }); + + describe('checkAuthMultiple', () => { + it('calls checkAuthService.checkAuth() without url if none is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn(checkAuthService, 'checkAuthMultiple').and.returnValue( + of([{}] as LoginResponse[]) + ); + + oidcSecurityService.checkAuthMultiple().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith([config], undefined); + }); + })); + + it('calls checkAuthService.checkAuthMultiple() with url if one is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn(checkAuthService, 'checkAuthMultiple').and.returnValue( + of([{}] as LoginResponse[]) + ); + + oidcSecurityService.checkAuthMultiple('some-url').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith([config], 'some-url'); + }); + })); + }); + + describe('isAuthenticated()', () => { + it('calls authStateService.isAuthenticated with passed configId when configId is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(authStateService, 'isAuthenticated').and.returnValue( + true + ); + + oidcSecurityService.isAuthenticated().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('checkAuthIncludingServer', () => { + it('calls checkAuthService.checkAuthIncludingServer()', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn( + checkAuthService, + 'checkAuthIncludingServer' + ).and.returnValue(of({} as LoginResponse)); + + oidcSecurityService.checkAuthIncludingServer().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config]); + }); + })); + }); + + describe('getAccessToken', () => { + it('calls authStateService.getAccessToken()', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(authStateService, 'getAccessToken').and.returnValue(''); + + oidcSecurityService.getAccessToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('getIdToken', () => { + it('calls authStateService.getIdToken()', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(authStateService, 'getIdToken').and.returnValue(''); + + oidcSecurityService.getIdToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('getRefreshToken', () => { + it('calls authStateService.getRefreshToken()', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn(authStateService, 'getRefreshToken').and.returnValue( + '' + ); + + oidcSecurityService.getRefreshToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('getAuthenticationResult', () => { + it('calls authStateService.getAuthenticationResult()', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn( + authStateService, + 'getAuthenticationResult' + ).and.returnValue(null); + + oidcSecurityService.getAuthenticationResult().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('getPayloadFromIdToken', () => { + it('calls `authStateService.getIdToken` method, encode = false', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + spyOn(authStateService, 'getIdToken').and.returnValue('some-token'); + const spy = spyOn( + tokenHelperService, + 'getPayloadFromToken' + ).and.returnValue(null); + + oidcSecurityService.getPayloadFromIdToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-token', false, config); + }); + })); + + it('calls `authStateService.getIdToken` method, encode = true', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + spyOn(authStateService, 'getIdToken').and.returnValue('some-token'); + const spy = spyOn( + tokenHelperService, + 'getPayloadFromToken' + ).and.returnValue(null); + + oidcSecurityService.getPayloadFromIdToken(true).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-token', true, config); + }); + })); + }); + + describe('getPayloadFromAccessToken', () => { + it('calls `authStateService.getAccessToken` method, encode = false', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + spyOn(authStateService, 'getAccessToken').and.returnValue( + 'some-access-token' + ); + const spy = spyOn( + tokenHelperService, + 'getPayloadFromToken' + ).and.returnValue(null); + + oidcSecurityService.getPayloadFromAccessToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + 'some-access-token', + false, + config + ); + }); + })); + + it('calls `authStateService.getIdToken` method, encode = true', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + spyOn(authStateService, 'getAccessToken').and.returnValue( + 'some-access-token' + ); + const spy = spyOn( + tokenHelperService, + 'getPayloadFromToken' + ).and.returnValue(null); + + oidcSecurityService.getPayloadFromAccessToken(true).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('some-access-token', true, config); + }); + })); + }); + + describe('setState', () => { + it('calls flowsDataService.setAuthStateControl with param', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn(flowsDataService, 'setAuthStateControl'); + + oidcSecurityService.setState('anyString').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith('anyString', config); + }); + })); + }); + + describe('getState', () => { + it('calls flowsDataService.getAuthStateControl', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn(flowsDataService, 'getAuthStateControl'); + + oidcSecurityService.getState().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config); + }); + })); + }); + + describe('authorize', () => { + it('calls login service login', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn(loginService, 'login'); + + oidcSecurityService.authorize(); + + expect(spy).toHaveBeenCalledOnceWith(config, undefined); + })); + + it('calls login service login with authoptions', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn(loginService, 'login'); + + oidcSecurityService.authorize('configId', { + customParams: { some: 'param' }, + }); + + expect(spy).toHaveBeenCalledOnceWith(config, { + customParams: { some: 'param' }, + }); + })); + }); + + describe('authorizeWithPopUp', () => { + it('calls login service loginWithPopUp', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + const spy = spyOn(loginService, 'loginWithPopUp').and.callFake(() => + of({} as LoginResponse) + ); + + oidcSecurityService.authorizeWithPopUp().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + config, + [config], + undefined, + undefined + ); + }); + })); + }); + + describe('forceRefreshSession', () => { + it('calls refreshSessionService userForceRefreshSession with configId from config when none is passed', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + + const spy = spyOn( + refreshSessionService, + 'userForceRefreshSession' + ).and.returnValue(of({} as LoginResponse)); + + oidcSecurityService.forceRefreshSession().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], undefined); + }); + })); + }); + + describe('logoffAndRevokeTokens', () => { + it('calls logoffRevocationService.logoffAndRevokeTokens', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + const spy = spyOn( + logoffRevocationService, + 'logoffAndRevokeTokens' + ).and.returnValue(of(null)); + + oidcSecurityService.logoffAndRevokeTokens().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], undefined); + }); + })); + }); + + describe('logoff', () => { + it('calls logoffRevocationService.logoff', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + const spy = spyOn(logoffRevocationService, 'logoff').and.returnValue( + of(null) + ); + + oidcSecurityService.logoff().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, [config], undefined); + }); + })); + }); + + describe('logoffLocal', () => { + it('calls logoffRevocationService.logoffLocal', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + const spy = spyOn(logoffRevocationService, 'logoffLocal'); + + oidcSecurityService.logoffLocal(); + expect(spy).toHaveBeenCalledOnceWith(config, [config]); + })); + }); + + describe('logoffLocalMultiple', () => { + it('calls logoffRevocationService.logoffLocalMultiple', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfigurations').and.returnValue( + of({ allConfigs: [config], currentConfig: config }) + ); + const spy = spyOn(logoffRevocationService, 'logoffLocalMultiple'); + + oidcSecurityService.logoffLocalMultiple(); + expect(spy).toHaveBeenCalledOnceWith([config]); + })); + }); + + describe('revokeAccessToken', () => { + it('calls logoffRevocationService.revokeAccessToken', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn( + logoffRevocationService, + 'revokeAccessToken' + ).and.returnValue(of(null)); + + oidcSecurityService.revokeAccessToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, undefined); + }); + })); + + it('calls logoffRevocationService.revokeAccessToken with accesstoken', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn( + logoffRevocationService, + 'revokeAccessToken' + ).and.returnValue(of(null)); + + oidcSecurityService.revokeAccessToken('access_token').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, 'access_token'); + }); + })); + }); + + describe('revokeRefreshToken', () => { + it('calls logoffRevocationService.revokeRefreshToken', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn( + logoffRevocationService, + 'revokeRefreshToken' + ).and.returnValue(of(null)); + + oidcSecurityService.revokeRefreshToken().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, undefined); + }); + })); + + it('calls logoffRevocationService.revokeRefreshToken with refresh token', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + const spy = spyOn( + logoffRevocationService, + 'revokeRefreshToken' + ).and.returnValue(of(null)); + + oidcSecurityService.revokeRefreshToken('refresh_token').subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, 'refresh_token'); + }); + })); + }); + + describe('getEndSessionUrl', () => { + it('calls logoffRevocationService.getEndSessionUrl ', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(urlService, 'getEndSessionUrl').and.returnValue(null); + + oidcSecurityService.getEndSessionUrl().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, undefined); + }); + })); + + it('calls logoffRevocationService.getEndSessionUrl with customparams', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(urlService, 'getEndSessionUrl').and.returnValue(null); + + oidcSecurityService + .getEndSessionUrl({ custom: 'params' }) + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, { custom: 'params' }); + }); + })); + }); + + describe('getAuthorizeUrl', () => { + it('calls urlService.getAuthorizeUrl ', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(urlService, 'getAuthorizeUrl').and.returnValue( + of(null) + ); + + oidcSecurityService.getAuthorizeUrl().subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, undefined); + }); + })); + + it('calls urlService.getAuthorizeUrl with customparams', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(configurationService, 'getOpenIDConfiguration').and.returnValue( + of(config) + ); + + const spy = spyOn(urlService, 'getAuthorizeUrl').and.returnValue( + of(null) + ); + + oidcSecurityService + .getAuthorizeUrl({ custom: 'params' }) + .subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith(config, { + customParams: { custom: 'params' }, + }); + }); + })); + }); +}); diff --git a/src/oidc.security.service.ts b/src/oidc.security.service.ts new file mode 100644 index 0000000..e3eb186 --- /dev/null +++ b/src/oidc.security.service.ts @@ -0,0 +1,576 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable } from 'rxjs'; +import { concatMap, map } from 'rxjs/operators'; +import { AuthOptions, LogoutAuthOptions } from './auth-options'; +import { AuthenticatedResult } from './auth-state/auth-result'; +import { AuthStateService } from './auth-state/auth-state.service'; +import { CheckAuthService } from './auth-state/check-auth.service'; +import { CallbackService } from './callback/callback.service'; +import { RefreshSessionService } from './callback/refresh-session.service'; +import { AuthWellKnownEndpoints } from './config/auth-well-known/auth-well-known-endpoints'; +import { AuthWellKnownService } from './config/auth-well-known/auth-well-known.service'; +import { ConfigurationService } from './config/config.service'; +import { OpenIdConfiguration } from './config/openid-configuration'; +import { AuthResult } from './flows/callback-context'; +import { FlowsDataService } from './flows/flows-data.service'; +import { CheckSessionService } from './iframe/check-session.service'; +import { LoginResponse } from './login/login-response'; +import { LoginService } from './login/login.service'; +import { PopupOptions } from './login/popup/popup-options'; +import { LogoffRevocationService } from './logoff-revoke/logoff-revocation.service'; +import { UserService } from './user-data/user.service'; +import { UserDataResult } from './user-data/userdata-result'; +import { TokenHelperService } from './utils/tokenHelper/token-helper.service'; +import { UrlService } from './utils/url/url.service'; +import { toSignal } from 'injection-js/rxjs-interop'; + +@Injectable() +export class OidcSecurityService { + private readonly checkSessionService = inject(CheckSessionService); + + private readonly checkAuthService = inject(CheckAuthService); + + private readonly userService = inject(UserService); + + private readonly tokenHelperService = inject(TokenHelperService); + + private readonly configurationService = inject(ConfigurationService); + + private readonly authStateService = inject(AuthStateService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly callbackService = inject(CallbackService); + + private readonly logoffRevocationService = inject(LogoffRevocationService); + + private readonly loginService = inject(LoginService); + + private readonly refreshSessionService = inject(RefreshSessionService); + + private readonly urlService = inject(UrlService); + + private readonly authWellKnownService = inject(AuthWellKnownService); + + /** + * Provides information about the user after they have logged in. + * + * @returns Returns an object containing either the user data directly (single config) or + * the user data per config in case you are running with multiple configs + */ + get userData$(): Observable { + return this.userService.userData$; + } + + /** + * Provides information about the user after they have logged in. + * + * @returns Returns an object containing either the user data directly (single config) or + * the user data per config in case you are running with multiple configs + */ + userData = toSignal(this.userData$, { requireSync: true }); + + /** + * Emits each time an authorization event occurs. + * + * @returns Returns an object containing if you are authenticated or not. + * Single Config: true if config is authenticated, false if not. + * Multiple Configs: true is all configs are authenticated, false if only one of them is not + * + * The `allConfigsAuthenticated` property contains the auth information _per config_. + */ + get isAuthenticated$(): Observable { + return this.authStateService.authenticated$; + } + + /** + * Emits each time an authorization event occurs. + * + * @returns Returns an object containing if you are authenticated or not. + * Single Config: true if config is authenticated, false if not. + * Multiple Configs: true is all configs are authenticated, false if only one of them is not + * + * The `allConfigsAuthenticated` property contains the auth information _per config_. + */ + authenticated = toSignal(this.isAuthenticated$, { requireSync: true }); + + /** + * Emits each time the server sends a CheckSession event and the value changed. This property will always return + * true. + */ + get checkSessionChanged$(): Observable { + return this.checkSessionService.checkSessionChanged$; + } + + /** + * Emits on a Security Token Service callback. The observable will never contain a value. + */ + get stsCallback$(): Observable { + return this.callbackService.stsCallback$; + } + + preloadAuthWellKnownDocument( + configId?: string + ): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + concatMap((config) => + this.authWellKnownService.queryAndStoreAuthWellKnownEndPoints(config) + ) + ); + } + + /** + * Returns the currently active OpenID configurations. + * + * @returns an array of OpenIdConfigurations. + */ + getConfigurations(): OpenIdConfiguration[] { + return this.configurationService.getAllConfigurations(); + } + + /** + * Returns a single active OpenIdConfiguration. + * + * @param configId The configId to identify the config. If not passed, the first one is being returned + */ + getConfiguration(configId?: string): Observable { + return this.configurationService.getOpenIDConfiguration(configId); + } + + /** + * Returns the userData for a configuration + * + * @param configId The configId to identify the config. If not passed, the first one is being used + */ + getUserData(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.userService.getUserDataFromStore(config))); + } + + /** + * Starts the complete setup flow for one configuration. Calling will start the entire authentication flow, and the returned observable + * will denote whether the user was successfully authenticated including the user data, the access token, the configId and + * an error message in case an error happened + * + * @param url The URL to perform the authorization on the behalf of. + * @param configId The configId to perform the authorization on the behalf of. If not passed, the first configs will be taken + * + * @returns An object `LoginResponse` containing all information about the login + */ + checkAuth(url?: string, configId?: string): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.checkAuthService.checkAuth(currentConfig, allConfigs, url) + ) + ); + } + + /** + * Starts the complete setup flow for multiple configurations. + * Calling will start the entire authentication flow, and the returned observable + * will denote whether the user was successfully authenticated including the user data, the access token, the configId and + * an error message in case an error happened in an array for each config which was provided + * + * @param url The URL to perform the authorization on the behalf of. + * + * @returns An array of `LoginResponse` objects containing all information about the logins + */ + checkAuthMultiple(url?: string): Observable { + return this.configurationService + .getOpenIDConfigurations() + .pipe( + concatMap(({ allConfigs }) => + this.checkAuthService.checkAuthMultiple(allConfigs, url) + ) + ); + } + + /** + * Provides information about the current authenticated state + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns A boolean whether the config is authenticated or not. + */ + isAuthenticated(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.authStateService.isAuthenticated(config))); + } + + /** + * Checks the server for an authenticated session using the iframe silent renew if not locally authenticated. + */ + checkAuthIncludingServer(configId?: string): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.checkAuthService.checkAuthIncludingServer( + currentConfig, + allConfigs + ) + ) + ); + } + + /** + * Returns the access token for the login scenario. + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns A string with the access token. + */ + getAccessToken(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.authStateService.getAccessToken(config))); + } + + /** + * Returns the ID token for the sign-in. + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns A string with the id token. + */ + getIdToken(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.authStateService.getIdToken(config))); + } + + /** + * Returns the refresh token, if present, for the sign-in. + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns A string with the refresh token. + */ + getRefreshToken(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.authStateService.getRefreshToken(config))); + } + + /** + * Returns the authentication result, if present, for the sign-in. + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns A object with the authentication result + */ + getAuthenticationResult(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + map((config) => this.authStateService.getAuthenticationResult(config)) + ); + } + + /** + * Returns the payload from the ID token. + * + * @param encode Set to true if the payload is base64 encoded + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns The payload from the id token. + */ + getPayloadFromIdToken(encode = false, configId?: string): Observable { + return this.configurationService.getOpenIDConfiguration(configId).pipe( + map((config) => { + const token = this.authStateService.getIdToken(config); + + return this.tokenHelperService.getPayloadFromToken( + token, + encode, + config + ); + }) + ); + } + + /** + * Returns the payload from the access token. + * + * @param encode Set to true if the payload is base64 encoded + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns The payload from the access token. + */ + getPayloadFromAccessToken( + encode = false, + configId?: string + ): Observable { + return this.configurationService.getOpenIDConfiguration(configId).pipe( + map((config) => { + const token = this.authStateService.getAccessToken(config); + + return this.tokenHelperService.getPayloadFromToken( + token, + encode, + config + ); + }) + ); + } + + /** + * Sets a custom state for the authorize request. + * + * @param state The state to set. + * @param configId The configId to check the information for. If not passed, the first configs will be taken + */ + setState(state: string, configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + map((config) => + this.flowsDataService.setAuthStateControl(state, config) + ) + ); + } + + /** + * Gets the state value used for the authorize request. + * + * @param configId The configId to check the information for. If not passed, the first configs will be taken + * + * @returns The state value used for the authorize request. + */ + getState(configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe(map((config) => this.flowsDataService.getAuthStateControl(config))); + } + + /** + * Redirects the user to the Security Token Service to begin the authentication process. + * + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * @param authOptions The custom options for the the authentication request. + */ + authorize(configId?: string, authOptions?: AuthOptions): void { + this.configurationService + .getOpenIDConfiguration(configId) + .subscribe((config) => this.loginService.login(config, authOptions)); + } + + /** + * Opens the Security Token Service in a new window to begin the authentication process. + * + * @param authOptions The custom options for the authentication request. + * @param popupOptions The configuration for the popup window. + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns An `Observable` containing all information about the login + */ + authorizeWithPopUp( + authOptions?: AuthOptions, + popupOptions?: PopupOptions, + configId?: string + ): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.loginService.loginWithPopUp( + currentConfig, + allConfigs, + authOptions, + popupOptions + ) + ) + ); + } + + /** + * Manually refreshes the session. + * + * @param customParams Custom parameters to pass to the refresh request. + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns An `Observable` containing all information about the login + */ + forceRefreshSession( + customParams?: { [key: string]: string | number | boolean }, + configId?: string + ): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.refreshSessionService.userForceRefreshSession( + currentConfig, + allConfigs, + customParams + ) + ) + ); + } + + /** + * Revokes the refresh token (if present) and the access token on the server and then performs the logoff operation. + * The refresh token and and the access token are revoked on the server. If the refresh token does not exist + * only the access token is revoked. Then the logout run. + * + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * @param logoutAuthOptions The custom options for the request. + * + * @returns An observable when the action is finished + */ + logoffAndRevokeTokens( + configId?: string, + logoutAuthOptions?: LogoutAuthOptions + ): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.logoffRevocationService.logoffAndRevokeTokens( + currentConfig, + allConfigs, + logoutAuthOptions + ) + ) + ); + } + + /** + * Logs out on the server and the local client. If the server state has changed, confirmed via check session, + * then only a local logout is performed. + * + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * @param logoutAuthOptions with custom parameters and/or an custom url handler + */ + logoff( + configId?: string, + logoutAuthOptions?: LogoutAuthOptions + ): Observable { + return this.configurationService + .getOpenIDConfigurations(configId) + .pipe( + concatMap(({ allConfigs, currentConfig }) => + this.logoffRevocationService.logoff( + currentConfig, + allConfigs, + logoutAuthOptions + ) + ) + ); + } + + /** + * Logs the user out of the application without logging them out of the server. + * Use this method if you have _one_ config enabled. + * + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + */ + logoffLocal(configId?: string): void { + this.configurationService + .getOpenIDConfigurations(configId) + .subscribe(({ allConfigs, currentConfig }) => + this.logoffRevocationService.logoffLocal(currentConfig, allConfigs) + ); + } + + /** + * Logs the user out of the application for all configs without logging them out of the server. + * Use this method if you have _multiple_ configs enabled. + */ + logoffLocalMultiple(): void { + this.configurationService + .getOpenIDConfigurations() + .subscribe(({ allConfigs }) => + this.logoffRevocationService.logoffLocalMultiple(allConfigs) + ); + } + + /** + * Revokes an access token on the Security Token Service. This is only required in the code flow with refresh tokens. If no token is + * provided, then the token from the storage is revoked. You can pass any token to revoke. + * https://tools.ietf.org/html/rfc7009 + * + * @param accessToken The access token to revoke. + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns An observable when the action is finished + */ + revokeAccessToken(accessToken?: any, configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + concatMap((config) => + this.logoffRevocationService.revokeAccessToken(config, accessToken) + ) + ); + } + + /** + * Revokes a refresh token on the Security Token Service. This is only required in the code flow with refresh tokens. If no token is + * provided, then the token from the storage is revoked. You can pass any token to revoke. + * https://tools.ietf.org/html/rfc7009 + * + * @param refreshToken The access token to revoke. + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns An observable when the action is finished + */ + revokeRefreshToken(refreshToken?: any, configId?: string): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + concatMap((config) => + this.logoffRevocationService.revokeRefreshToken(config, refreshToken) + ) + ); + } + + /** + * Creates the end session URL which can be used to implement an alternate server logout. + * + * @param customParams + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns A string with the end session url or null + */ + getEndSessionUrl( + customParams?: { [p: string]: string | number | boolean }, + configId?: string + ): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + map((config) => this.urlService.getEndSessionUrl(config, customParams)) + ); + } + + /** + * Creates the authorize URL based on your flow + * + * @param customParams + * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken + * + * @returns A string with the authorize URL or null + */ + getAuthorizeUrl( + customParams?: { [p: string]: string | number | boolean }, + configId?: string + ): Observable { + return this.configurationService + .getOpenIDConfiguration(configId) + .pipe( + concatMap((config) => + this.urlService.getAuthorizeUrl( + config, + customParams ? { customParams } : undefined + ) + ) + ); + } +} diff --git a/src/provide-auth.spec.ts b/src/provide-auth.spec.ts new file mode 100644 index 0000000..af0a4e0 --- /dev/null +++ b/src/provide-auth.spec.ts @@ -0,0 +1,95 @@ +import { APP_INITIALIZER } from '@angular/core'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../test/auto-mock'; +import { PASSED_CONFIG } from './auth-config'; +import { ConfigurationService } from './config/config.service'; +import { + StsConfigHttpLoader, + StsConfigLoader, + StsConfigStaticLoader, +} from './config/loader/config-loader'; +import { OidcSecurityService } from './oidc.security.service'; +import { provideAuth, withAppInitializerAuthCheck } from './provide-auth'; + +describe('provideAuth', () => { + describe('APP_CONFIG', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + providers: [ + provideAuth({ config: { authority: 'something' } }), + mockProvider(ConfigurationService), + ], + }).compileComponents(); + })); + + it('should provide config', () => { + const config = TestBed.inject(PASSED_CONFIG); + + expect(config).toEqual({ config: { authority: 'something' } }); + }); + + it('should create StsConfigStaticLoader if config is passed', () => { + const configLoader = TestBed.inject(StsConfigLoader); + + expect(configLoader instanceof StsConfigStaticLoader).toBe(true); + }); + }); + + describe('StsConfigHttpLoader', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + providers: [ + provideAuth({ + loader: { + provide: StsConfigLoader, + useFactory: () => new StsConfigHttpLoader(of({})), + }, + }), + mockProvider(ConfigurationService), + ], + }).compileComponents(); + })); + + it('should create StsConfigStaticLoader if config is passed', () => { + const configLoader = TestBed.inject(StsConfigLoader); + + expect(configLoader instanceof StsConfigHttpLoader).toBe(true); + }); + }); + + describe('features', () => { + let oidcSecurityServiceMock: jasmine.SpyObj; + + beforeEach(waitForAsync(() => { + oidcSecurityServiceMock = jasmine.createSpyObj( + 'OidcSecurityService', + ['checkAuthMultiple'] + ); + TestBed.configureTestingModule({ + providers: [ + provideAuth( + { config: { authority: 'something' } }, + withAppInitializerAuthCheck() + ), + mockProvider(ConfigurationService), + { + provide: OidcSecurityService, + useValue: oidcSecurityServiceMock, + }, + ], + }).compileComponents(); + })); + + it('should provide APP_INITIALIZER config', () => { + const config = TestBed.inject(APP_INITIALIZER); + + expect(config.length) + .withContext('Expected an APP_INITIALIZER to be registered') + .toBe(1); + expect(oidcSecurityServiceMock.checkAuthMultiple).toHaveBeenCalledTimes( + 1 + ); + }); + }); +}); diff --git a/src/provide-auth.ts b/src/provide-auth.ts new file mode 100644 index 0000000..1730034 --- /dev/null +++ b/src/provide-auth.ts @@ -0,0 +1,79 @@ +import { + APP_INITIALIZER, + EnvironmentProviders, + makeEnvironmentProviders, + Provider, +} from 'injection-js'; +import { + createStaticLoader, + PASSED_CONFIG, + PassedInitialConfig, +} from './auth-config'; +import { StsConfigLoader } from './config/loader/config-loader'; +import { AbstractLoggerService } from './logging/abstract-logger.service'; +import { ConsoleLoggerService } from './logging/console-logger.service'; +import { OidcSecurityService } from './oidc.security.service'; +import { AbstractSecurityStorage } from './storage/abstract-security-storage'; +import { DefaultSessionStorageService } from './storage/default-sessionstorage.service'; + +/** + * A feature to be used with `provideAuth`. + */ +export interface AuthFeature { + ɵproviders: Provider[]; +} + +export function provideAuth( + passedConfig: PassedInitialConfig, + ...features: AuthFeature[] +): EnvironmentProviders { + const providers = _provideAuth(passedConfig); + + for (const feature of features) { + providers.push(...feature.ɵproviders); + } + + return makeEnvironmentProviders(providers); +} + +export function _provideAuth(passedConfig: PassedInitialConfig): Provider[] { + return [ + // Make the PASSED_CONFIG available through injection + { provide: PASSED_CONFIG, useValue: passedConfig }, + + // Create the loader: Either the one getting passed or a static one + passedConfig?.loader || { + provide: StsConfigLoader, + useFactory: createStaticLoader, + deps: [PASSED_CONFIG], + }, + { + provide: AbstractSecurityStorage, + useClass: DefaultSessionStorageService, + }, + { provide: AbstractLoggerService, useClass: ConsoleLoggerService }, + ]; +} + +/** + * Configures an app initializer, which is called before the app starts, and + * resolves any OAuth callback variables. + * When used, it replaces the need to manually call + * `OidcSecurityService.checkAuth(...)` or + * `OidcSecurityService.checkAuthMultiple(...)`. + * + * @see https://angular.dev/api/core/APP_INITIALIZER + */ +export function withAppInitializerAuthCheck(): AuthFeature { + return { + ɵproviders: [ + { + provide: APP_INITIALIZER, + useFactory: (oidcSecurityService: OidcSecurityService) => () => + oidcSecurityService.checkAuthMultiple(), + multi: true, + deps: [OidcSecurityService], + }, + ], + }; +} diff --git a/src/public-api.ts b/src/public-api.ts new file mode 100644 index 0000000..f6c1af3 --- /dev/null +++ b/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of angular-auth-oidc-client + */ + +export * from '.'; diff --git a/src/public-events/event-types.ts b/src/public-events/event-types.ts new file mode 100644 index 0000000..54f35a9 --- /dev/null +++ b/src/public-events/event-types.ts @@ -0,0 +1,17 @@ +export enum EventTypes { + /** + * This only works in the AppModule Constructor + */ + ConfigLoaded, + CheckingAuth, + CheckingAuthFinished, + CheckingAuthFinishedWithError, + ConfigLoadingFailed, + CheckSessionReceived, + UserDataChanged, + NewAuthenticationResult, + TokenExpired, + IdTokenExpired, + SilentRenewStarted, + SilentRenewFailed, +} diff --git a/src/public-events/notification.ts b/src/public-events/notification.ts new file mode 100644 index 0000000..ec9d0ec --- /dev/null +++ b/src/public-events/notification.ts @@ -0,0 +1,6 @@ +import { EventTypes } from './event-types'; + +export interface OidcClientNotification { + type: EventTypes; + value?: T; +} diff --git a/src/public-events/public-events.service.spec.ts b/src/public-events/public-events.service.spec.ts new file mode 100644 index 0000000..dcc5a78 --- /dev/null +++ b/src/public-events/public-events.service.spec.ts @@ -0,0 +1,69 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { filter } from 'rxjs/operators'; +import { EventTypes } from './event-types'; +import { PublicEventsService } from './public-events.service'; + +describe('Events Service', () => { + let eventsService: PublicEventsService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [PublicEventsService], + }); + }); + + beforeEach(() => { + eventsService = TestBed.inject(PublicEventsService); + }); + + it('should create', () => { + expect(eventsService).toBeTruthy(); + }); + + it('registering to single event with one event emit works', waitForAsync(() => { + eventsService.registerForEvents().subscribe((firedEvent) => { + expect(firedEvent).toBeTruthy(); + expect(firedEvent).toEqual({ + type: EventTypes.ConfigLoaded, + value: { myKey: 'myValue' }, + }); + }); + eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' }); + })); + + it('registering to single event with multiple same event emit works', waitForAsync(() => { + const spy = jasmine.createSpy('spy'); + + eventsService.registerForEvents().subscribe((firedEvent) => { + spy(firedEvent); + expect(firedEvent).toBeTruthy(); + }); + eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' }); + eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue2' }); + + expect(spy.calls.count()).toBe(2); + expect(spy.calls.first().args[0]).toEqual({ + type: EventTypes.ConfigLoaded, + value: { myKey: 'myValue' }, + }); + expect(spy.calls.mostRecent().args[0]).toEqual({ + type: EventTypes.ConfigLoaded, + value: { myKey: 'myValue2' }, + }); + })); + + it('registering to single event with multiple emit works', waitForAsync(() => { + eventsService + .registerForEvents() + .pipe(filter((x) => x.type === EventTypes.ConfigLoaded)) + .subscribe((firedEvent) => { + expect(firedEvent).toBeTruthy(); + expect(firedEvent).toEqual({ + type: EventTypes.ConfigLoaded, + value: { myKey: 'myValue' }, + }); + }); + eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' }); + eventsService.fireEvent(EventTypes.NewAuthenticationResult, true); + })); +}); diff --git a/src/public-events/public-events.service.ts b/src/public-events/public-events.service.ts new file mode 100644 index 0000000..030edec --- /dev/null +++ b/src/public-events/public-events.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from 'injection-js'; +import { Observable, ReplaySubject } from 'rxjs'; +import { EventTypes } from './event-types'; +import { OidcClientNotification } from './notification'; + +@Injectable() +export class PublicEventsService { + private readonly notify = new ReplaySubject>(1); + + /** + * Fires a new event. + * + * @param type The event type. + * @param value The event value. + */ + fireEvent(type: EventTypes, value?: T): void { + this.notify.next({ type, value }); + } + + /** + * Wires up the event notification observable. + */ + registerForEvents(): Observable> { + return this.notify.asObservable(); + } +} diff --git a/src/storage/abstract-security-storage.ts b/src/storage/abstract-security-storage.ts new file mode 100644 index 0000000..f2efeb6 --- /dev/null +++ b/src/storage/abstract-security-storage.ts @@ -0,0 +1,34 @@ +import { Injectable } from 'injection-js'; + +/** + * Implement this class-interface to create a custom storage. + */ +@Injectable() +export abstract class AbstractSecurityStorage { + /** + * This method must contain the logic to read the storage. + * + * @return The value of the given key + */ + abstract read(key: string): string | null; + + /** + * This method must contain the logic to write the storage. + * + * @param key The key to write a value for + * @param value The value for the given key + */ + abstract write(key: string, value: string): void; + + /** + * This method must contain the logic to remove an item from the storage. + * + * @param key The value for the key to be removed + */ + abstract remove(key: string): void; + + /** + * This method must contain the logic to remove all items from the storage. + */ + abstract clear(): void; +} diff --git a/src/storage/browser-storage.service.spec.ts b/src/storage/browser-storage.service.spec.ts new file mode 100644 index 0000000..e40c86e --- /dev/null +++ b/src/storage/browser-storage.service.spec.ts @@ -0,0 +1,168 @@ +import { TestBed } from '@angular/core/testing'; +import { mockClass, mockProvider } from '../../test/auto-mock'; +import { LoggerService } from '../logging/logger.service'; +import { AbstractSecurityStorage } from './abstract-security-storage'; +import { BrowserStorageService } from './browser-storage.service'; +import { DefaultSessionStorageService } from './default-sessionstorage.service'; + +describe('BrowserStorageService', () => { + let service: BrowserStorageService; + let abstractSecurityStorage: AbstractSecurityStorage; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(LoggerService), + { + provide: AbstractSecurityStorage, + useClass: mockClass(DefaultSessionStorageService), + }, + ], + }); + }); + + beforeEach(() => { + abstractSecurityStorage = TestBed.inject(AbstractSecurityStorage); + service = TestBed.inject(BrowserStorageService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('read', () => { + it('returns null if there is no storage', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(false); + + expect(service.read('anything', config)).toBeNull(); + }); + + it('returns null if getItem returns null', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(true); + + const result = service.read('anything', config); + + expect(result).toBeNull(); + }); + + it('returns the item if getItem returns an item', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(true); + const returnValue = `{ "name":"John", "age":30, "city":"New York"}`; + + spyOn(abstractSecurityStorage, 'read').and.returnValue(returnValue); + const result = service.read('anything', config); + + expect(result).toEqual(JSON.parse(returnValue)); + }); + }); + + describe('write', () => { + it('returns false if there is no storage', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(false); + + expect(service.write('anyvalue', config)).toBeFalse(); + }); + + it('writes object correctly with configId', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(true); + const writeSpy = spyOn( + abstractSecurityStorage, + 'write' + ).and.callThrough(); + + const result = service.write({ anyKey: 'anyvalue' }, config); + + expect(result).toBe(true); + expect(writeSpy).toHaveBeenCalledOnceWith( + 'configId1', + JSON.stringify({ anyKey: 'anyvalue' }) + ); + }); + + it('writes null if item is falsy', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(true); + + const writeSpy = spyOn( + abstractSecurityStorage, + 'write' + ).and.callThrough(); + const somethingFalsy = ''; + + const result = service.write(somethingFalsy, config); + + expect(result).toBe(true); + expect(writeSpy).toHaveBeenCalledOnceWith( + 'configId1', + JSON.stringify(null) + ); + }); + }); + + describe('remove', () => { + it('returns false if there is no storage', () => { + const config = { configId: 'configId1' }; + + spyOn(service as any, 'hasStorage').and.returnValue(false); + expect(service.remove('anything', config)).toBeFalse(); + }); + + it('returns true if removeItem is called', () => { + spyOn(service as any, 'hasStorage').and.returnValue(true); + const config = { configId: 'configId1' }; + + const setItemSpy = spyOn( + abstractSecurityStorage, + 'remove' + ).and.callThrough(); + + const result = service.remove('anyKey', config); + + expect(result).toBe(true); + expect(setItemSpy).toHaveBeenCalledOnceWith('anyKey'); + }); + }); + + describe('clear', () => { + it('returns false if there is no storage', () => { + spyOn(service as any, 'hasStorage').and.returnValue(false); + const config = { configId: 'configId1' }; + + expect(service.clear(config)).toBeFalse(); + }); + + it('returns true if clear is called', () => { + spyOn(service as any, 'hasStorage').and.returnValue(true); + + const setItemSpy = spyOn( + abstractSecurityStorage, + 'clear' + ).and.callThrough(); + const config = { configId: 'configId1' }; + + const result = service.clear(config); + + expect(result).toBe(true); + expect(setItemSpy).toHaveBeenCalledTimes(1); + }); + }); + + describe('hasStorage', () => { + it('returns false if there is no storage', () => { + (Storage as any) = undefined; + expect((service as any).hasStorage()).toBeFalse(); + Storage = Storage; + }); + }); +}); diff --git a/src/storage/browser-storage.service.ts b/src/storage/browser-storage.service.ts new file mode 100644 index 0000000..e8afdb9 --- /dev/null +++ b/src/storage/browser-storage.service.ts @@ -0,0 +1,118 @@ +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { AbstractSecurityStorage } from './abstract-security-storage'; + +@Injectable() +export class BrowserStorageService { + private readonly loggerService = inject(LoggerService); + + private readonly abstractSecurityStorage = inject(AbstractSecurityStorage); + + read(key: string, configuration: OpenIdConfiguration): any { + const { configId } = configuration; + + if (!configId) { + this.loggerService.logDebug( + configuration, + `Wanted to read '${key}' but configId was '${configId}'` + ); + + return null; + } + + if (!this.hasStorage()) { + this.loggerService.logDebug( + configuration, + `Wanted to read '${key}' but Storage was undefined` + ); + + return null; + } + + const storedConfig = this.abstractSecurityStorage.read(configId); + + if (!storedConfig) { + return null; + } + + return JSON.parse(storedConfig); + } + + write(value: any, configuration: OpenIdConfiguration): boolean { + const { configId } = configuration; + + if (!configId) { + this.loggerService.logDebug( + configuration, + `Wanted to write but configId was '${configId}'` + ); + + return false; + } + + if (!this.hasStorage()) { + this.loggerService.logDebug( + configuration, + `Wanted to write but Storage was falsy` + ); + + return false; + } + + value = value || null; + + this.abstractSecurityStorage.write(configId, JSON.stringify(value)); + + return true; + } + + remove(key: string, configuration: OpenIdConfiguration): boolean { + if (!this.hasStorage()) { + this.loggerService.logDebug( + configuration, + `Wanted to remove '${key}' but Storage was falsy` + ); + + return false; + } + + // const storage = this.getStorage(configuration); + // if (!storage) { + // this.loggerService.logDebug(configuration, `Wanted to write '${key}' but Storage was falsy`); + + // return false; + // } + + this.abstractSecurityStorage.remove(key); + + return true; + } + + // TODO THIS STORAGE WANTS AN ID BUT CLEARS EVERYTHING + clear(configuration: OpenIdConfiguration): boolean { + if (!this.hasStorage()) { + this.loggerService.logDebug( + configuration, + `Wanted to clear storage but Storage was falsy` + ); + + return false; + } + + // const storage = this.getStorage(configuration); + // if (!storage) { + // this.loggerService.logDebug(configuration, `Wanted to clear storage but Storage was falsy`); + + // return false; + // } + + this.abstractSecurityStorage.clear(); + + return true; + } + + private hasStorage(): boolean { + return typeof Storage !== 'undefined'; + } +} diff --git a/src/storage/default-localstorage.service.spec.ts b/src/storage/default-localstorage.service.spec.ts new file mode 100644 index 0000000..319d609 --- /dev/null +++ b/src/storage/default-localstorage.service.spec.ts @@ -0,0 +1,60 @@ +import { TestBed } from '@angular/core/testing'; +import { DefaultLocalStorageService } from './default-localstorage.service'; + +describe('DefaultLocalStorageService', () => { + let service: DefaultLocalStorageService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DefaultLocalStorageService], + }); + }); + + beforeEach(() => { + service = TestBed.inject(DefaultLocalStorageService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('read', () => { + it('should call localstorage.getItem', () => { + const spy = spyOn(localStorage, 'getItem'); + + service.read('henlo'); + + expect(spy).toHaveBeenCalledOnceWith('henlo'); + }); + }); + + describe('write', () => { + it('should call localstorage.setItem', () => { + const spy = spyOn(localStorage, 'setItem'); + + service.write('henlo', 'furiend'); + + expect(spy).toHaveBeenCalledOnceWith('henlo', 'furiend'); + }); + }); + + describe('remove', () => { + it('should call localstorage.removeItem', () => { + const spy = spyOn(localStorage, 'removeItem'); + + service.remove('henlo'); + + expect(spy).toHaveBeenCalledOnceWith('henlo'); + }); + }); + + describe('clear', () => { + it('should call localstorage.clear', () => { + const spy = spyOn(localStorage, 'clear'); + + service.clear(); + + expect(spy).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/src/storage/default-localstorage.service.ts b/src/storage/default-localstorage.service.ts new file mode 100644 index 0000000..2fc9e82 --- /dev/null +++ b/src/storage/default-localstorage.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from 'injection-js'; +import { AbstractSecurityStorage } from './abstract-security-storage'; + +@Injectable() +export class DefaultLocalStorageService implements AbstractSecurityStorage { + public read(key: string): string | null { + return localStorage.getItem(key); + } + + public write(key: string, value: string): void { + localStorage.setItem(key, value); + } + + public remove(key: string): void { + localStorage.removeItem(key); + } + + public clear(): void { + localStorage.clear(); + } +} diff --git a/src/storage/default-sessionstorage.service.spec.ts b/src/storage/default-sessionstorage.service.spec.ts new file mode 100644 index 0000000..73f6cb6 --- /dev/null +++ b/src/storage/default-sessionstorage.service.spec.ts @@ -0,0 +1,60 @@ +import { TestBed } from '@angular/core/testing'; +import { DefaultSessionStorageService } from './default-sessionstorage.service'; + +describe('DefaultSessionStorageService', () => { + let service: DefaultSessionStorageService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DefaultSessionStorageService], + }); + }); + + beforeEach(() => { + service = TestBed.inject(DefaultSessionStorageService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('read', () => { + it('should call sessionstorage.getItem', () => { + const spy = spyOn(sessionStorage, 'getItem'); + + service.read('henlo'); + + expect(spy).toHaveBeenCalledOnceWith('henlo'); + }); + }); + + describe('write', () => { + it('should call sessionstorage.setItem', () => { + const spy = spyOn(sessionStorage, 'setItem'); + + service.write('henlo', 'furiend'); + + expect(spy).toHaveBeenCalledOnceWith('henlo', 'furiend'); + }); + }); + + describe('remove', () => { + it('should call sessionstorage.removeItem', () => { + const spy = spyOn(sessionStorage, 'removeItem'); + + service.remove('henlo'); + + expect(spy).toHaveBeenCalledOnceWith('henlo'); + }); + }); + + describe('clear', () => { + it('should call sessionstorage.clear', () => { + const spy = spyOn(sessionStorage, 'clear'); + + service.clear(); + + expect(spy).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/src/storage/default-sessionstorage.service.ts b/src/storage/default-sessionstorage.service.ts new file mode 100644 index 0000000..93dbbc5 --- /dev/null +++ b/src/storage/default-sessionstorage.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from 'injection-js'; +import { AbstractSecurityStorage } from './abstract-security-storage'; + +@Injectable() +export class DefaultSessionStorageService implements AbstractSecurityStorage { + public read(key: string): string | null { + return sessionStorage.getItem(key); + } + + public write(key: string, value: string): void { + sessionStorage.setItem(key, value); + } + + public remove(key: string): void { + sessionStorage.removeItem(key); + } + + public clear(): void { + sessionStorage.clear(); + } +} diff --git a/src/storage/storage-persistence.service.spec.ts b/src/storage/storage-persistence.service.spec.ts new file mode 100644 index 0000000..204fee1 --- /dev/null +++ b/src/storage/storage-persistence.service.spec.ts @@ -0,0 +1,258 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../test/auto-mock'; +import { BrowserStorageService } from './browser-storage.service'; +import { StoragePersistenceService } from './storage-persistence.service'; + +describe('Storage Persistence Service', () => { + let service: StoragePersistenceService; + let securityStorage: BrowserStorageService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [mockProvider(BrowserStorageService)], + }); + }); + + beforeEach(() => { + service = TestBed.inject(StoragePersistenceService); + securityStorage = TestBed.inject(BrowserStorageService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('read', () => { + it('reads from oidcSecurityStorage with configId', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(securityStorage, 'read'); + + service.read('authNonce', config); + expect(spy).toHaveBeenCalledOnceWith('authNonce', config); + }); + + it('returns undefined (not throws exception) if key to read is not present on config', () => { + const config = { configId: 'configId1' }; + + spyOn(securityStorage, 'read').and.returnValue({ some: 'thing' }); + const result = service.read('authNonce', config); + + expect(result).toBeUndefined(); + }); + }); + + describe('write', () => { + it('writes to oidcSecurityStorage with correct key and correct config', () => { + const config = { configId: 'configId1' }; + const readSpy = spyOn(securityStorage, 'read'); + const writeSpy = spyOn(securityStorage, 'write'); + + service.write('authNonce', 'anyValue', config); + + expect(readSpy).toHaveBeenCalledOnceWith('authNonce', config); + expect(writeSpy).toHaveBeenCalledOnceWith( + { authNonce: 'anyValue' }, + config + ); + }); + }); + + describe('remove', () => { + it('should remove key from config', () => { + const config = { configId: 'configId1' }; + const readSpy = spyOn(securityStorage, 'read').and.returnValue({ + authNonce: 'anyValue', + }); + const writeSpy = spyOn(securityStorage, 'write'); + + service.remove('authNonce', config); + + expect(readSpy).toHaveBeenCalledOnceWith('authNonce', config); + expect(writeSpy).toHaveBeenCalledOnceWith({}, config); + }); + + it('does not crash when read with configId returns null', () => { + const config = { configId: 'configId1' }; + const readSpy = spyOn(securityStorage, 'read').and.returnValue(null); + const writeSpy = spyOn(securityStorage, 'write'); + + service.remove('authNonce', config); + + expect(readSpy).toHaveBeenCalledOnceWith('authNonce', config); + expect(writeSpy).toHaveBeenCalledOnceWith({}, config); + }); + }); + + describe('clear', () => { + it('should call oidcSecurityStorage.clear()', () => { + const clearSpy = spyOn(securityStorage, 'clear'); + + service.clear({}); + + expect(clearSpy).toHaveBeenCalledTimes(1); + }); + }); + + describe('resetStorageFlowData', () => { + it('resets the correct values', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(service, 'remove'); + + service.resetStorageFlowData(config); + + expect(spy).toHaveBeenCalledTimes(10); + expect(spy.calls.argsFor(0)).toEqual(['session_state', config]); + expect(spy.calls.argsFor(1)).toEqual([ + 'storageSilentRenewRunning', + config, + ]); + expect(spy.calls.argsFor(2)).toEqual([ + 'storageCodeFlowInProgress', + config, + ]); + expect(spy.calls.argsFor(3)).toEqual(['codeVerifier', config]); + expect(spy.calls.argsFor(4)).toEqual(['userData', config]); + expect(spy.calls.argsFor(5)).toEqual([ + 'storageCustomParamsAuthRequest', + config, + ]); + expect(spy.calls.argsFor(6)).toEqual(['access_token_expires_at', config]); + expect(spy.calls.argsFor(7)).toEqual([ + 'storageCustomParamsRefresh', + config, + ]); + expect(spy.calls.argsFor(8)).toEqual([ + 'storageCustomParamsEndSession', + config, + ]); + expect(spy.calls.argsFor(9)).toEqual(['reusable_refresh_token', config]); + }); + }); + + describe('resetAuthStateInStorage', () => { + it('resets the correct values', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(service, 'remove'); + + service.resetAuthStateInStorage(config); + + expect(spy.calls.argsFor(0)).toEqual(['authzData', config]); + expect(spy.calls.argsFor(1)).toEqual(['reusable_refresh_token', config]); + expect(spy.calls.argsFor(2)).toEqual(['authnResult', config]); + }); + }); + + describe('getAccessToken', () => { + it('get calls oidcSecurityStorage.read with correct key and returns the value', () => { + const returnValue = { authzData: 'someValue' }; + const config = { configId: 'configId1' }; + const spy = spyOn(securityStorage, 'read').and.returnValue(returnValue); + const result = service.getAccessToken(config); + + expect(result).toBe('someValue'); + expect(spy).toHaveBeenCalledOnceWith('authzData', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns null', () => { + const spy = spyOn(securityStorage, 'read').and.returnValue(null); + const config = { configId: 'configId1' }; + const result = service.getAccessToken(config); + + expect(result).toBeFalsy(); + expect(spy).toHaveBeenCalledOnceWith('authzData', config); + }); + }); + + describe('getIdToken', () => { + it('get calls oidcSecurityStorage.read with correct key and returns the value', () => { + const returnValue = { authnResult: { id_token: 'someValue' } }; + const spy = spyOn(securityStorage, 'read').and.returnValue(returnValue); + const config = { configId: 'configId1' }; + const result = service.getIdToken(config); + + expect(result).toBe('someValue'); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns null', () => { + const spy = spyOn(securityStorage, 'read').and.returnValue(null); + const config = { configId: 'configId1' }; + const result = service.getIdToken(config); + + expect(result).toBeFalsy(); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + }); + + describe('getAuthenticationResult', () => { + it('get calls oidcSecurityStorage.read with correct key and returns the value', () => { + const returnValue = { authnResult: { id_token: 'someValue' } }; + const config = { configId: 'configId1' }; + const spy = spyOn(securityStorage, 'read').and.returnValue(returnValue); + const result = service.getAuthenticationResult(config); + + expect(result.id_token).toBe('someValue'); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns null', () => { + const spy = spyOn(securityStorage, 'read').and.returnValue(null); + const config = { configId: 'configId1' }; + const result = service.getAuthenticationResult(config); + + expect(result).toBeFalsy(); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + }); + + describe('getRefreshToken', () => { + it('get calls oidcSecurityStorage.read with correct key and returns the value (refresh token with mandatory rotation - default)', () => { + const returnValue = { authnResult: { refresh_token: 'someValue' } }; + const spy = spyOn(securityStorage, 'read').and.returnValue(returnValue); + const config = { configId: 'configId1' }; + const result = service.getRefreshToken(config); + + expect(result).toBe('someValue'); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns the value (refresh token without rotation)', () => { + const returnValue = { reusable_refresh_token: 'test_refresh_token' }; + const config = { + configId: 'configId1', + allowUnsafeReuseRefreshToken: true, + }; + const spy = spyOn(securityStorage, 'read'); + + spy + .withArgs('reusable_refresh_token', config) + .and.returnValue(returnValue); + spy.withArgs('authnResult', config).and.returnValue(undefined); + const result = service.getRefreshToken(config); + + expect(result).toBe(returnValue.reusable_refresh_token); + expect(spy).toHaveBeenCalledTimes(2); + expect(spy).toHaveBeenCalledWith('authnResult', config); + expect(spy).toHaveBeenCalledWith('reusable_refresh_token', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns null', () => { + const returnValue = { authnResult: { NO_refresh_token: 'someValue' } }; + const spy = spyOn(securityStorage, 'read').and.returnValue(returnValue); + const config = { configId: 'configId1' }; + const result = service.getRefreshToken(config); + + expect(result).toBeUndefined(); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + + it('get calls oidcSecurityStorage.read with correct key and returns null', () => { + const spy = spyOn(securityStorage, 'read').and.returnValue(null); + const config = { configId: 'configId1' }; + const result = service.getRefreshToken(config); + + expect(result).toBeUndefined(); + expect(spy).toHaveBeenCalledOnceWith('authnResult', config); + }); + }); +}); diff --git a/src/storage/storage-persistence.service.ts b/src/storage/storage-persistence.service.ts new file mode 100644 index 0000000..5f1cea2 --- /dev/null +++ b/src/storage/storage-persistence.service.ts @@ -0,0 +1,97 @@ +import { inject, Injectable } from 'injection-js'; +import { AuthResult } from '../flows/callback-context'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { BrowserStorageService } from './browser-storage.service'; + +export type StorageKeys = + | 'authnResult' + | 'authzData' + | 'access_token_expires_at' + | 'authWellKnownEndPoints' + | 'userData' + | 'authNonce' + | 'codeVerifier' + | 'authStateControl' + | 'reusable_refresh_token' + | 'session_state' + | 'storageSilentRenewRunning' + | 'storageCodeFlowInProgress' + | 'storageCustomParamsAuthRequest' + | 'storageCustomParamsRefresh' + | 'storageCustomParamsEndSession' + | 'redirect' + | 'configIds' + | 'jwtKeys' + | 'popupauth'; + + +export class StoragePersistenceService { + private readonly browserStorageService = inject(BrowserStorageService); + + read(key: StorageKeys, config: OpenIdConfiguration): any { + const storedConfig = this.browserStorageService.read(key, config) || {}; + + return storedConfig[key]; + } + + write(key: StorageKeys, value: any, config: OpenIdConfiguration): boolean { + const storedConfig = this.browserStorageService.read(key, config) || {}; + + storedConfig[key] = value; + + return this.browserStorageService.write(storedConfig, config); + } + + remove(key: StorageKeys, config: OpenIdConfiguration): void { + const storedConfig = this.browserStorageService.read(key, config) || {}; + + delete storedConfig[key]; + + this.browserStorageService.write(storedConfig, config); + } + + clear(config: OpenIdConfiguration): void { + this.browserStorageService.clear(config); + } + + resetStorageFlowData(config: OpenIdConfiguration): void { + this.remove('session_state', config); + this.remove('storageSilentRenewRunning', config); + this.remove('storageCodeFlowInProgress', config); + this.remove('codeVerifier', config); + this.remove('userData', config); + this.remove('storageCustomParamsAuthRequest', config); + this.remove('access_token_expires_at', config); + this.remove('storageCustomParamsRefresh', config); + this.remove('storageCustomParamsEndSession', config); + this.remove('reusable_refresh_token', config); + } + + resetAuthStateInStorage(config: OpenIdConfiguration): void { + this.remove('authzData', config); + this.remove('reusable_refresh_token', config); + this.remove('authnResult', config); + } + + getAccessToken(config: OpenIdConfiguration): string { + return this.read('authzData', config); + } + + getIdToken(config: OpenIdConfiguration): string { + return this.read('authnResult', config)?.id_token; + } + + getRefreshToken(config: OpenIdConfiguration): string { + const refreshToken = this.read('authnResult', config)?.refresh_token; + + if (!refreshToken && config.allowUnsafeReuseRefreshToken) { + return this.read('reusable_refresh_token', config); + } + + return refreshToken; + } + + getAuthenticationResult(config: OpenIdConfiguration): AuthResult { + return this.read('authnResult', config); + } +} diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..b4d91d6 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,18 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js'; +import 'zone.js/testing'; +import { getTestBed } from 'injection-js/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), + { + teardown: { destroyAfterEach: false }, + } +); diff --git a/src/user-data/user-service.spec.ts b/src/user-data/user-service.spec.ts new file mode 100644 index 0000000..bdf8210 --- /dev/null +++ b/src/user-data/user-service.spec.ts @@ -0,0 +1,651 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Observable, of, throwError } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { createRetriableStream } from '../../test/create-retriable-stream.helper'; +import { DataService } from '../api/data.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { PlatformProvider } from '../utils/platform-provider/platform.provider'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { UserService } from './user.service'; + +const DUMMY_USER_DATA = { + sub: 'a5461470-33eb-4b2d-82d4-b0484e96ad7f', + preferred_username: 'john@test.com', + organization: 'testing', +}; + +describe('User Service', () => { + let loggerService: LoggerService; + let userService: UserService; + let storagePersistenceService: StoragePersistenceService; + let eventsService: PublicEventsService; + let dataService: DataService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(StoragePersistenceService), + mockProvider(LoggerService), + mockProvider(DataService), + mockProvider(PlatformProvider), + PublicEventsService, + TokenHelperService, + FlowHelper, + ], + }); + }); + + beforeEach(() => { + loggerService = TestBed.inject(LoggerService); + userService = TestBed.inject(UserService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + eventsService = TestBed.inject(PublicEventsService); + dataService = TestBed.inject(DataService); + }); + + it('should create', () => { + expect(userService).toBeTruthy(); + }); + + it('public authorize$ is observable$', () => { + expect(userService.userData$).toEqual(jasmine.any(Observable)); + }); + + describe('getAndPersistUserDataInStore', () => { + it('if not currentFlow is NOT id Token or Code flow, return decoded ID Token - passed as argument', waitForAsync(() => { + const isRenewProcess = false; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = ''; + + const config = { + responseType: 'notcode', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(decodedIdToken).toBe(token); + }); + })); + + it('if not currentFlow is NOT id Token or Code flow, "setUserDataToStore" is called with the decodedIdToken', waitForAsync(() => { + const isRenewProcess = false; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = ''; + + const config = { + responseType: 'notcode', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + spyOn(userService, 'setUserDataToStore'); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(decodedIdToken).toBe(token); + }); + + expect(userService.setUserDataToStore).toHaveBeenCalled(); + })); + + it('if not currentFlow is id token or code flow with renewProcess going -> return existing data from storage', waitForAsync(() => { + const isRenewProcess = true; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = 'userDataInstore'; + + const config = { + responseType: 'code', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(userDataInstore).toBe(token); + }); + })); + + it('if not currentFlow is id token or code flow and not renewProcess --> ask server for data', waitForAsync(() => { + const isRenewProcess = false; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = ''; + const userDataFromSts = 'userDataFromSts'; + + const config = { + responseType: 'code', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + const spy = spyOn( + userService as any, + 'getIdentityUserData' + ).and.returnValue(of(userDataFromSts)); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(userDataFromSts).toEqual(token); + }); + + expect(spy).toHaveBeenCalled(); + })); + + it(`if not currentFlow is id token or code flow and not renewprocess + --> ask server for data + --> logging if it has userdata`, waitForAsync(() => { + const isRenewProcess = false; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = ''; + const userDataFromSts = 'userDataFromSts'; + + const config = { + responseType: 'code', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + const spy = spyOn( + userService as any, + 'getIdentityUserData' + ).and.returnValue(of(userDataFromSts)); + + spyOn(loggerService, 'logDebug'); + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(userDataFromSts).toEqual(token); + }); + + expect(spy).toHaveBeenCalled(); + expect(loggerService.logDebug).toHaveBeenCalled(); + })); + + it(`if not currentFlow is id token or code flow and not renewprocess + --> ask server for data + --> throwing Error if it has no userdata `, waitForAsync(() => { + const isRenewProcess = false; + const idToken = ''; + const decodedIdToken = { sub: 'decodedIdToken' }; + const userDataInstore = ''; + const userDataFromSts = null; + + const config = { + responseType: 'code', + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + const spyGetIdentityUserData = spyOn( + userService as any, + 'getIdentityUserData' + ).and.returnValue(of(userDataFromSts)); + + spyOn(loggerService, 'logDebug'); + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe({ + error: (err) => { + expect(err.message).toEqual( + 'Received no user data, request failed' + ); + }, + }); + + expect(spyGetIdentityUserData).toHaveBeenCalled(); + })); + + it(`if not currentFlow is id token or code flow and renewprocess and renewUserInfoAfterTokenRenew + --> ask server for data`, waitForAsync(() => { + const isRenewProcess = true; + const idToken = ''; + const decodedIdToken = 'decodedIdToken'; + const userDataInstore = 'userDataInStore'; + const userDataFromSts = 'userDataFromSts'; + + const config = { + responseType: 'code', + renewUserInfoAfterTokenRenew: true, + configId: 'configId1', + } as OpenIdConfiguration; + + spyOn(userService, 'getUserDataFromStore').and.returnValue( + userDataInstore + ); + const spy = spyOn( + userService as any, + 'getIdentityUserData' + ).and.returnValue(of(userDataFromSts)); + + userService + .getAndPersistUserDataInStore( + config, + [config], + isRenewProcess, + idToken, + decodedIdToken + ) + .subscribe((token) => { + expect(userDataFromSts).toEqual(token); + }); + + expect(spy).toHaveBeenCalled(); + })); + }); + + describe('getUserDataFromStore', () => { + it('returns null if there is not data', () => { + const config = { configId: 'configId1' }; + const result = userService.getUserDataFromStore(config); + + expect(result).toBeNull(); + }); + + it('returns value if there is data', () => { + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('userData', config) + .and.returnValue('userData'); + const result = userService.getUserDataFromStore(config); + + expect(result).toBeTruthy(); + }); + }); + + describe('setUserDataToStore', () => { + it('sets userData in storagePersistenceService', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(storagePersistenceService, 'write'); + + userService.setUserDataToStore('userDataForTest', config, [config]); + expect(spy).toHaveBeenCalledOnceWith( + 'userData', + 'userDataForTest', + config + ); + }); + + it('userDataInternal$ is called when userData is set', () => { + const config = { configId: 'configId1' }; + + const spy = spyOn((userService as any).userDataInternal$, 'next'); + + userService.setUserDataToStore('userDataForTest', config, [config]); + + expect(spy).toHaveBeenCalledOnceWith({ + userData: 'userDataForTest', + allUserData: [{ configId: 'configId1', userData: 'userDataForTest' }], + }); + }); + + it('eventService.fireEvent is called when userData is set', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(eventsService, 'fireEvent'); + + userService.setUserDataToStore('userDataForTest', config, [config]); + + expect(spy).toHaveBeenCalledOnceWith(EventTypes.UserDataChanged, { + configId: 'configId1', + userData: 'userDataForTest', + }); + }); + }); + + describe('resetUserDataInStore', () => { + it('resets userData sets null in storagePersistenceService', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(storagePersistenceService, 'remove'); + + userService.resetUserDataInStore(config, [config]); + + expect(spy).toHaveBeenCalledOnceWith('userData', config); + }); + + it('userDataInternal$ is called with null when userData is reset', () => { + const config = { configId: 'configId1' }; + const spy = spyOn((userService as any).userDataInternal$, 'next'); + + userService.resetUserDataInStore(config, [config]); + + expect(spy).toHaveBeenCalledOnceWith({ + userData: null, + allUserData: [{ configId: 'configId1', userData: null }], + }); + }); + + it('eventService.fireEvent is called with null when userData is reset', () => { + const config = { configId: 'configId1' }; + const spy = spyOn(eventsService, 'fireEvent'); + + userService.resetUserDataInStore(config, [config]); + + expect(spy).toHaveBeenCalledOnceWith(EventTypes.UserDataChanged, { + configId: 'configId1', + userData: null, + }); + }); + }); + + describe('publishUserDataIfExists', () => { + it('do nothing if no userData is stored', () => { + spyOn(userService, 'getUserDataFromStore').and.returnValue(''); + const observableSpy = spyOn( + (userService as any).userDataInternal$, + 'next' + ); + const eventSpy = spyOn(eventsService, 'fireEvent'); + const config = { configId: 'configId1' }; + + userService.publishUserDataIfExists(config, [config]); + + expect(observableSpy).not.toHaveBeenCalled(); + expect(eventSpy).not.toHaveBeenCalled(); + }); + + it('userDataInternal is fired if userData exists with single config', () => { + spyOn(userService, 'getUserDataFromStore').and.returnValue('something'); + const observableSpy = spyOn( + (userService as any).userDataInternal$, + 'next' + ); + const config = { configId: 'configId1' }; + + userService.publishUserDataIfExists(config, [config]); + + expect(observableSpy).toHaveBeenCalledOnceWith({ + userData: 'something', + allUserData: [{ configId: 'configId1', userData: 'something' }], + }); + }); + + it('userDataInternal is fired if userData exists with multiple configs', () => { + const allConfigs = [{ configId: 'configId1' }, { configId: 'configId2' }]; + const observableSpy = spyOn( + (userService as any).userDataInternal$, + 'next' + ); + + spyOn(storagePersistenceService, 'read') + .withArgs('userData', allConfigs[0]) + .and.returnValue('somethingForConfig1') + .withArgs('userData', allConfigs[1]) + .and.returnValue('somethingForConfig2'); + + userService.publishUserDataIfExists(allConfigs[0], allConfigs); + + expect(observableSpy).toHaveBeenCalledOnceWith({ + userData: null, + allUserData: [ + { configId: 'configId1', userData: 'somethingForConfig1' }, + { configId: 'configId2', userData: 'somethingForConfig2' }, + ], + }); + }); + + it('event service UserDataChanged is fired if userData exists', () => { + const allConfigs = [{ configId: 'configId1' }, { configId: 'configId2' }]; + + spyOn(userService, 'getUserDataFromStore').and.returnValue('something'); + const eventSpy = spyOn(eventsService, 'fireEvent'); + + userService.publishUserDataIfExists(allConfigs[0], allConfigs); + + expect(eventSpy).toHaveBeenCalledOnceWith(EventTypes.UserDataChanged, { + configId: 'configId1', + userData: 'something', + }); + }); + }); + + describe('validateUserDataSubIdToken', () => { + it('with no idTokenSub returns false', () => { + const serviceAsAny = userService as any; + const config = { configId: 'configId1' }; + + const result = serviceAsAny.validateUserDataSubIdToken( + config, + '', + 'anything' + ); + + expect(result).toBeFalse(); + }); + + it('with no userDataSub returns false', () => { + const serviceAsAny = userService as any; + const config = { configId: 'configId1' }; + + const result = serviceAsAny.validateUserDataSubIdToken( + config, + 'something', + '' + ); + + expect(result).toBeFalse(); + }); + + it('with idTokenSub and userDataSub not match logs and returns false', () => { + const serviceAsAny = userService as any; + const loggerSpy = spyOn(loggerService, 'logDebug'); + const config = { configId: 'configId1' }; + + const result = serviceAsAny.validateUserDataSubIdToken( + config, + 'something', + 'something2' + ); + + expect(result).toBeFalse(); + expect(loggerSpy).toHaveBeenCalledOnceWith( + config, + 'validateUserDataSubIdToken failed', + 'something', + 'something2' + ); + }); + }); + + describe('getIdentityUserData', () => { + it('does nothing if no authWellKnownEndPoints are set', waitForAsync(() => { + const config = { configId: 'configId1' }; + const serviceAsAny = userService as any; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + serviceAsAny.getIdentityUserData(config).subscribe({ + error: (err: any) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('does nothing if no userInfoEndpoint is set', waitForAsync(() => { + const config = { configId: 'configId1' }; + const serviceAsAny = userService as any; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ userInfoEndpoint: null }); + serviceAsAny.getIdentityUserData(config).subscribe({ + error: (err: any) => { + expect(err).toBeTruthy(); + }, + }); + })); + + it('gets userData if authwell and userInfoEndpoint is set', waitForAsync(() => { + const config = { configId: 'configId1' }; + const serviceAsAny = userService as any; + const spy = spyOn(dataService, 'get').and.returnValue(of({})); + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ userInfoEndpoint: 'userInfoEndpoint' }); + serviceAsAny.getIdentityUserData(config).subscribe(() => { + expect(spy).toHaveBeenCalledOnceWith( + 'userInfoEndpoint', + config, + 'accessToken' + ); + }); + })); + }); + + it('should retry once', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ userInfoEndpoint: 'userInfoEndpoint' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + of(DUMMY_USER_DATA) + ) + ); + + (userService as any).getIdentityUserData(config).subscribe({ + next: (res: any) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_USER_DATA); + }, + }); + })); + + it('should retry twice', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ userInfoEndpoint: 'userInfoEndpoint' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of(DUMMY_USER_DATA) + ) + ); + + (userService as any).getIdentityUserData(config).subscribe({ + next: (res: any) => { + expect(res).toBeTruthy(); + expect(res).toEqual(DUMMY_USER_DATA); + }, + }); + })); + + it('should fail after three tries', waitForAsync(() => { + const config = { configId: 'configId1' }; + + spyOn(storagePersistenceService, 'getAccessToken').and.returnValue( + 'accessToken' + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ userInfoEndpoint: 'userInfoEndpoint' }); + spyOn(dataService, 'get').and.returnValue( + createRetriableStream( + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + throwError(() => new Error('Error')), + of(DUMMY_USER_DATA) + ) + ); + + (userService as any).getIdentityUserData(config).subscribe({ + error: (err: any) => { + expect(err).toBeTruthy(); + }, + }); + })); +}); diff --git a/src/user-data/user.service.ts b/src/user-data/user.service.ts new file mode 100644 index 0000000..2ef4653 --- /dev/null +++ b/src/user-data/user.service.ts @@ -0,0 +1,333 @@ +import { inject, Injectable } from 'injection-js'; +import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; +import { map, retry, switchMap } from 'rxjs/operators'; +import { DataService } from '../api/data.service'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { LoggerService } from '../logging/logger.service'; +import { EventTypes } from '../public-events/event-types'; +import { PublicEventsService } from '../public-events/public-events.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { ConfigUserDataResult, UserDataResult } from './userdata-result'; + +const DEFAULT_USERRESULT = { userData: null, allUserData: [] }; + +@Injectable() +export class UserService { + private readonly userDataInternal$ = new BehaviorSubject( + DEFAULT_USERRESULT + ); + + get userData$(): Observable { + return this.userDataInternal$.asObservable(); + } + + private readonly loggerService = inject(LoggerService); + + private readonly tokenHelperService = inject(TokenHelperService); + + private readonly flowHelper = inject(FlowHelper); + + private readonly oidcDataService = inject(DataService); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly eventService = inject(PublicEventsService); + + getAndPersistUserDataInStore( + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + isRenewProcess = false, + idToken?: string, + decodedIdToken?: any + ): Observable { + idToken = + idToken || + this.storagePersistenceService.getIdToken(currentConfiguration); + decodedIdToken = + decodedIdToken || + this.tokenHelperService.getPayloadFromToken( + idToken, + false, + currentConfiguration + ); + + const existingUserDataFromStorage = + this.getUserDataFromStore(currentConfiguration); + const haveUserData = !!existingUserDataFromStorage; + const isCurrentFlowImplicitFlowWithAccessToken = + this.flowHelper.isCurrentFlowImplicitFlowWithAccessToken( + currentConfiguration + ); + const isCurrentFlowCodeFlow = + this.flowHelper.isCurrentFlowCodeFlow(currentConfiguration); + + const accessToken = + this.storagePersistenceService.getAccessToken(currentConfiguration); + + if (!(isCurrentFlowImplicitFlowWithAccessToken || isCurrentFlowCodeFlow)) { + this.loggerService.logDebug( + currentConfiguration, + `authCallback idToken flow with accessToken ${accessToken}` + ); + + this.setUserDataToStore(decodedIdToken, currentConfiguration, allConfigs); + + return of(decodedIdToken); + } + + const { renewUserInfoAfterTokenRenew } = currentConfiguration; + + if (!isRenewProcess || renewUserInfoAfterTokenRenew || !haveUserData) { + return this.getUserDataOidcFlowAndSave( + decodedIdToken.sub, + currentConfiguration, + allConfigs + ).pipe( + switchMap((userData) => { + this.loggerService.logDebug( + currentConfiguration, + 'Received user data: ', + userData + ); + if (!!userData) { + this.loggerService.logDebug( + currentConfiguration, + 'accessToken: ', + accessToken + ); + + return of(userData); + } else { + return throwError( + () => new Error('Received no user data, request failed') + ); + } + }) + ); + } + + return of(existingUserDataFromStorage); + } + + getUserDataFromStore(currentConfiguration: OpenIdConfiguration | null): any { + if (!currentConfiguration) { + return throwError( + () => + new Error( + 'Please provide a configuration before setting up the module' + ) + ); + } + + return ( + this.storagePersistenceService.read('userData', currentConfiguration) || + null + ); + } + + publishUserDataIfExists( + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + const userData = this.getUserDataFromStore(currentConfiguration); + + if (userData) { + this.fireUserDataEvent(currentConfiguration, allConfigs, userData); + } + } + + setUserDataToStore( + userData: any, + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + this.storagePersistenceService.write( + 'userData', + userData, + currentConfiguration + ); + this.fireUserDataEvent(currentConfiguration, allConfigs, userData); + } + + resetUserDataInStore( + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): void { + this.storagePersistenceService.remove('userData', currentConfiguration); + this.fireUserDataEvent(currentConfiguration, allConfigs, null); + } + + private getUserDataOidcFlowAndSave( + idTokenSub: any, + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[] + ): Observable { + return this.getIdentityUserData(currentConfiguration).pipe( + map((data: any) => { + if ( + this.validateUserDataSubIdToken( + currentConfiguration, + idTokenSub, + data?.sub + ) + ) { + this.setUserDataToStore(data, currentConfiguration, allConfigs); + + return data; + } else { + // something went wrong, user data sub does not match that from id_token + this.loggerService.logWarning( + currentConfiguration, + `User data sub does not match sub in id_token, resetting` + ); + this.resetUserDataInStore(currentConfiguration, allConfigs); + + return null; + } + }) + ); + } + + private getIdentityUserData( + currentConfiguration: OpenIdConfiguration + ): Observable { + const token = + this.storagePersistenceService.getAccessToken(currentConfiguration); + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + currentConfiguration + ); + + if (!authWellKnownEndPoints) { + this.loggerService.logWarning( + currentConfiguration, + 'init check session: authWellKnownEndpoints is undefined' + ); + + return throwError(() => new Error('authWellKnownEndpoints is undefined')); + } + + const userInfoEndpoint = authWellKnownEndPoints.userInfoEndpoint; + + if (!userInfoEndpoint) { + this.loggerService.logError( + currentConfiguration, + 'init check session: authWellKnownEndpoints.userinfo_endpoint is undefined; set auto_userinfo = false in config' + ); + + return throwError( + () => new Error('authWellKnownEndpoints.userinfo_endpoint is undefined') + ); + } + + return this.oidcDataService + .get(userInfoEndpoint, currentConfiguration, token) + .pipe(retry(2)); + } + + private validateUserDataSubIdToken( + currentConfiguration: OpenIdConfiguration, + idTokenSub: any, + userDataSub: any + ): boolean { + if (!idTokenSub) { + return false; + } + + if (!userDataSub) { + return false; + } + + if (idTokenSub.toString() !== userDataSub.toString()) { + this.loggerService.logDebug( + currentConfiguration, + 'validateUserDataSubIdToken failed', + idTokenSub, + userDataSub + ); + + return false; + } + + return true; + } + + private fireUserDataEvent( + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + passedUserData: any + ): void { + const userData = this.composeSingleOrMultipleUserDataObject( + currentConfiguration, + allConfigs, + passedUserData + ); + + this.userDataInternal$.next(userData); + + const { configId } = currentConfiguration; + + this.eventService.fireEvent(EventTypes.UserDataChanged, { + configId, + userData: passedUserData, + }); + } + + private composeSingleOrMultipleUserDataObject( + currentConfiguration: OpenIdConfiguration, + allConfigs: OpenIdConfiguration[], + passedUserData: any + ): UserDataResult { + const hasManyConfigs = allConfigs.length > 1; + + if (!hasManyConfigs) { + const { configId } = currentConfiguration; + + return this.composeSingleUserDataResult(configId ?? '', passedUserData); + } + + const allUserData: ConfigUserDataResult[] = allConfigs.map((config) => { + const currentConfigId = currentConfiguration.configId ?? ''; + const configId = config.configId ?? ''; + + if (this.currentConfigIsToUpdate(currentConfigId, config)) { + return { configId, userData: passedUserData }; + } + + const alreadySavedUserData = + this.storagePersistenceService.read('userData', config) || null; + + return { + configId, + userData: alreadySavedUserData, + }; + }); + + return { + userData: null, + allUserData, + }; + } + + private composeSingleUserDataResult( + configId: string, + userData: any + ): UserDataResult { + return { + userData, + allUserData: [{ configId, userData }], + }; + } + + private currentConfigIsToUpdate( + configId: string, + config: OpenIdConfiguration + ): boolean { + return config.configId === configId; + } +} diff --git a/src/user-data/userdata-result.ts b/src/user-data/userdata-result.ts new file mode 100644 index 0000000..40744fc --- /dev/null +++ b/src/user-data/userdata-result.ts @@ -0,0 +1,9 @@ +export interface UserDataResult { + userData: any; + allUserData: ConfigUserDataResult[]; +} + +export interface ConfigUserDataResult { + configId: string; + userData: any; +} diff --git a/src/utils/collections/collections.helper.ts b/src/utils/collections/collections.helper.ts new file mode 100644 index 0000000..f83619f --- /dev/null +++ b/src/utils/collections/collections.helper.ts @@ -0,0 +1,7 @@ +export function flattenArray(array: any[][]): any[] { + return array.reduce( + (flattened, elem) => + flattened.concat(Array.isArray(elem) ? flattenArray(elem) : elem), + [] + ); +} diff --git a/src/utils/crypto/crypto.service.spec.ts b/src/utils/crypto/crypto.service.spec.ts new file mode 100644 index 0000000..42f91e5 --- /dev/null +++ b/src/utils/crypto/crypto.service.spec.ts @@ -0,0 +1,71 @@ +import { DOCUMENT } from '../../dom'; +import { TestBed } from '@angular/core/testing'; +import { CryptoService } from './crypto.service'; + +describe('CryptoService', () => { + let cryptoService: CryptoService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + CryptoService, + { + provide: DOCUMENT, + useValue: { defaultView: { crypto: 'some-thing' } }, + }, + ], + }); + }); + + beforeEach(() => { + cryptoService = TestBed.inject(CryptoService); + }); + + it('should create', () => { + expect(cryptoService).toBeTruthy(); + }); + + it('should return crypto if crypto is present', () => { + // arrange + + // act + const crypto = cryptoService.getCrypto(); + + // assert + expect(crypto).toBe('some-thing'); + }); +}); + +describe('CryptoService: msCrypto', () => { + let cryptoService: CryptoService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + CryptoService, + { + provide: DOCUMENT, + useValue: { defaultView: { msCrypto: 'some-msCrypto-thing' } }, + }, + ], + }); + }); + + beforeEach(() => { + cryptoService = TestBed.inject(CryptoService); + }); + + it('should create', () => { + expect(cryptoService).toBeTruthy(); + }); + + it('should return crypto if crypto is present', () => { + // arrange + + // act + const crypto = cryptoService.getCrypto(); + + // assert + expect(crypto).toBe('some-msCrypto-thing'); + }); +}); diff --git a/src/utils/crypto/crypto.service.ts b/src/utils/crypto/crypto.service.ts new file mode 100644 index 0000000..6639148 --- /dev/null +++ b/src/utils/crypto/crypto.service.ts @@ -0,0 +1,15 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; + +@Injectable() +export class CryptoService { + private readonly document = inject(DOCUMENT); + + getCrypto(): any { + // support for IE, (window.crypto || window.msCrypto) + return ( + this.document.defaultView?.crypto || + (this.document.defaultView as any)?.msCrypto + ); + } +} diff --git a/src/utils/equality/equality.service.spec.ts b/src/utils/equality/equality.service.spec.ts new file mode 100644 index 0000000..98f18f7 --- /dev/null +++ b/src/utils/equality/equality.service.spec.ts @@ -0,0 +1,217 @@ +import { TestBed } from '@angular/core/testing'; +import { IFrameService } from '../../iframe/existing-iframe.service'; +import { EqualityService } from './equality.service'; + +describe('EqualityService Tests', () => { + let equalityHelperService: EqualityService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [EqualityService, IFrameService], + }); + }); + + beforeEach(() => { + equalityHelperService = TestBed.inject(EqualityService); + }); + + it('should create', () => { + expect(equalityHelperService).toBeTruthy(); + }); + + describe('areEqual', () => { + it('first arg is null returns false', () => { + const result = equalityHelperService.areEqual(null, 'somestring'); + + expect(result).toBe(false); + }); + + it('second arg is null returns false', () => { + const result = equalityHelperService.areEqual('somestring', null); + + expect(result).toBe(false); + }); + + it('first arg is undefined returns false', () => { + const result = equalityHelperService.areEqual(undefined, 'somestring'); + + expect(result).toBe(false); + }); + + it('second arg is undefined returns false', () => { + const result = equalityHelperService.areEqual('somestring', undefined); + + expect(result).toBe(false); + }); + + it('two empty strings return false', () => { + const result = equalityHelperService.areEqual('', ''); + + expect(result).toBe(false); + }); + + it('two equal strings return true', () => { + const result = equalityHelperService.areEqual('somestring', 'somestring'); + + expect(result).toBe(true); + }); + + it('two equal strings but different casing returns false', () => { + const result = equalityHelperService.areEqual('somestring', 'Somestring'); + + expect(result).toBe(false); + }); + + it('two same arrays return true', () => { + const array1 = ['somestring1', 'somestring2']; + const array2 = ['somestring1', 'somestring2']; + const result = equalityHelperService.areEqual(array1, array2); + + expect(result).toBe(true); + }); + + it('two same arrays (bit not casing) return false', () => { + const array1 = ['somestring1', 'SOMESTRING2']; + const array2 = ['somestring1', 'somestring2']; + const result = equalityHelperService.areEqual(array1, array2); + + expect(result).toBe(false); + }); + + it('two different arrays return false', () => { + const array1 = ['somestring1']; + const array2 = ['somestring1', 'somestring2']; + const result = equalityHelperService.areEqual(array1, array2); + + expect(result).toBe(false); + }); + + it('two same objects return true', () => { + const object1 = { name: 'Phil', age: 67 }; + const object2 = { name: 'Phil', age: 67 }; + const result = equalityHelperService.areEqual(object1, object2); + + expect(result).toBe(true); + }); + + it('two different objects return false', () => { + const object1 = { name: 'Phil', age: 67 }; + const object2 = { name: 'Mike', age: 67 }; + const result = equalityHelperService.areEqual(object1, object2); + + expect(result).toBe(false); + }); + + it('string and array (same) return true', () => { + const array1 = ['somestring1']; + const string2 = 'somestring1'; + const result = equalityHelperService.areEqual(array1, string2); + + expect(result).toBe(true); + }); + + it('array and string (same) return true', () => { + const array1 = ['somestring1']; + const string2 = 'somestring1'; + const result = equalityHelperService.areEqual(string2, array1); + + expect(result).toBe(true); + }); + + it('string and array (different) return false', () => { + const array1 = ['somestring']; + const string2 = 'somestring1'; + const result = equalityHelperService.areEqual(string2, array1); + + expect(result).toBe(false); + }); + + it('array and string (same) return true', () => { + const array1 = ['somestring1']; + const string2 = 'somestring'; + const result = equalityHelperService.areEqual(array1, string2); + + expect(result).toBe(false); + }); + + it('boolean and boolean return false', () => { + const result = equalityHelperService.areEqual(true, false); + + expect(result).toBe(false); + }); + + it('boolean and boolean return false', () => { + const result = equalityHelperService.areEqual(true, true); + + expect(result).toBe(true); + }); + }); + + describe('isStringEqualOrNonOrderedArrayEqual', () => { + const testCases = [ + { + input1: 'value1', + input2: 'value1', + expected: true, + }, + { + input1: 'value1', + input2: 'value2', + expected: false, + }, + // old "x" (string) , [x] new invalid + { + input1: 'value1', + input2: ['value2'] as any[], + expected: false, + }, + // old [x], new "x" (string) invalid + { + input1: ['value2'] as any[], + input2: 'value1', + expected: false, + }, + { + input1: ['value1'] as any[], + input2: ['value2'] as any[], + expected: false, + }, + // old [x,y,z], new [x,y] invalid + // old [x], new [y,x] invalid + { + input1: ['value1'] as any[], + input2: ['value1', 'value2'] as any[], + expected: false, + }, + { + input1: ['value1', 'value2'] as any[], + input2: ['value1', 'value2'] as any[], + expected: true, + }, + // old [x,y], new [y,x] valid + { + input1: ['value1', 'value2'] as any[], + input2: ['value2', 'value1'] as any[], + expected: true, + }, + // old [x,y,z], new [y,z,x] valid + { + input1: ['x', 'y', 'z'] as any[], + input2: ['y', 'z', 'x'] as any[], + expected: true, + }, + ]; + + testCases.forEach(({ input1, input2, expected }) => { + it(`returns '${expected}' if '${input1}' and '${input2}' is given`, () => { + const result = + equalityHelperService.isStringEqualOrNonOrderedArrayEqual( + input1, + input2 + ); + + expect(result).toBe(expected); + }); + }); + }); +}); diff --git a/src/utils/equality/equality.service.ts b/src/utils/equality/equality.service.ts new file mode 100644 index 0000000..09e712f --- /dev/null +++ b/src/utils/equality/equality.service.ts @@ -0,0 +1,130 @@ +import { Injectable } from 'injection-js'; + +@Injectable() +export class EqualityService { + isStringEqualOrNonOrderedArrayEqual( + value1: string | any[], + value2: string | any[] + ): boolean { + if (this.isNullOrUndefined(value1)) { + return false; + } + + if (this.isNullOrUndefined(value2)) { + return false; + } + + if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) { + return false; + } + + if (this.bothValuesAreStrings(value1, value2)) { + return value1 === value2; + } + + return this.arraysHaveEqualContent(value1 as any[], value2 as any[]); + } + + areEqual( + value1: string | any[] | any | null | undefined, + value2: string | any[] | any | null | undefined + ): boolean { + if (!value1 || !value2) { + return false; + } + + if (this.bothValuesAreArrays(value1, value2)) { + return this.arraysStrictEqual(value1 as any[], value2 as any[]); + } + + if (this.bothValuesAreStrings(value1, value2)) { + return value1 === value2; + } + + if (this.bothValuesAreObjects(value1, value2)) { + return ( + JSON.stringify(value1).toLowerCase() === + JSON.stringify(value2).toLowerCase() + ); + } + + if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) { + if (Array.isArray(value1) && this.valueIsString(value2)) { + return value1[0] === value2; + } + if (Array.isArray(value2) && this.valueIsString(value1)) { + return value2[0] === value1; + } + } + + return value1 === value2; + } + + private oneValueIsStringAndTheOtherIsArray( + value1: string | any | any[], + value2: string | any | any[] + ): boolean { + return ( + (Array.isArray(value1) && this.valueIsString(value2)) || + (Array.isArray(value2) && this.valueIsString(value1)) + ); + } + + private bothValuesAreObjects( + value1: string | any | any[], + value2: string | any | any[] + ): boolean { + return this.valueIsObject(value1) && this.valueIsObject(value2); + } + + private bothValuesAreStrings( + value1: string | any | any[], + value2: string | any | any[] + ): boolean { + return this.valueIsString(value1) && this.valueIsString(value2); + } + + private bothValuesAreArrays( + value1: string | any | any[], + value2: string | any | any[] + ): boolean { + return Array.isArray(value1) && Array.isArray(value2); + } + + private valueIsString(value: any): boolean { + return typeof value === 'string' || value instanceof String; + } + + private valueIsObject(value: any): boolean { + return typeof value === 'object'; + } + + private arraysStrictEqual(arr1: Array, arr2: Array): boolean { + if (arr1.length !== arr2.length) { + return false; + } + + for (let i = arr1.length; i--; ) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + + return true; + } + + private arraysHaveEqualContent( + arr1: Array, + arr2: Array + ): boolean { + if (arr1.length !== arr2.length) { + return false; + } + + return arr1.some((v) => arr2.includes(v)); + } + + private isNullOrUndefined(val: any): boolean { + return val === null || val === undefined; + } +} diff --git a/src/utils/flowHelper/flow-helper.service.spec.ts b/src/utils/flowHelper/flow-helper.service.spec.ts new file mode 100644 index 0000000..52849ab --- /dev/null +++ b/src/utils/flowHelper/flow-helper.service.spec.ts @@ -0,0 +1,171 @@ +import { TestBed } from '@angular/core/testing'; +import { FlowHelper } from './flow-helper.service'; + +describe('Flow Helper Service', () => { + let flowHelper: FlowHelper; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [FlowHelper], + }); + }); + + beforeEach(() => { + flowHelper = TestBed.inject(FlowHelper); + }); + + it('should create', () => { + expect(flowHelper).toBeTruthy(); + }); + + it('isCurrentFlowCodeFlow returns false if current flow is not code flow', () => { + const config = { responseType: 'id_token token', configId: 'configId1' }; + + expect(flowHelper.isCurrentFlowCodeFlow(config)).toBeFalse(); + }); + + it('isCurrentFlowCodeFlow returns true if current flow is code flow', () => { + const config = { responseType: 'code' }; + + expect(flowHelper.isCurrentFlowCodeFlow(config)).toBeTrue(); + }); + + it('currentFlowIs returns true if current flow is code flow', () => { + const config = { responseType: 'code' }; + + expect(flowHelper.currentFlowIs('code', config)).toBeTrue(); + }); + + it('currentFlowIs returns true if current flow is code flow (array)', () => { + const config = { responseType: 'code' }; + + expect(flowHelper.currentFlowIs(['code'], config)).toBeTrue(); + }); + + it('currentFlowIs returns true if current flow is id_token token or code (array)', () => { + const config = { responseType: 'id_token token' }; + + expect( + flowHelper.currentFlowIs(['id_token token', 'code'], config) + ).toBeTrue(); + }); + + it('currentFlowIs returns true if current flow is code flow', () => { + const config = { responseType: 'id_token token' }; + + expect(flowHelper.currentFlowIs('code', config)).toBeFalse(); + }); + + it('isCurrentFlowImplicitFlowWithAccessToken return true if flow is "id_token token"', () => { + const config = { responseType: 'id_token token' }; + + const result = flowHelper.isCurrentFlowImplicitFlowWithAccessToken(config); + + expect(result).toBeTrue(); + }); + + it('isCurrentFlowImplicitFlowWithAccessToken return false if flow is not "id_token token"', () => { + const config = { responseType: 'id_token2 token2' }; + + const result = flowHelper.isCurrentFlowImplicitFlowWithAccessToken(config); + + expect(result).toBeFalse(); + }); + + it('isCurrentFlowImplicitFlowWithoutAccessToken return true if flow is "id_token"', () => { + const config = { responseType: 'id_token' }; + + const result = ( + flowHelper as any + ).isCurrentFlowImplicitFlowWithoutAccessToken(config); + + expect(result).toBeTrue(); + }); + + it('isCurrentFlowImplicitFlowWithoutAccessToken return false if flow is not "id_token token"', () => { + const config = { responseType: 'id_token2' }; + + const result = ( + flowHelper as any + ).isCurrentFlowImplicitFlowWithoutAccessToken(config); + + expect(result).toBeFalse(); + }); + + it('isCurrentFlowCodeFlowWithRefreshTokens return false if flow is not code flow', () => { + const config = { responseType: 'not code' }; + + const result = flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config); + + expect(result).toBeFalse(); + }); + + it('isCurrentFlowCodeFlowWithRefreshTokens return false if useRefreshToken is set to false', () => { + const config = { responseType: 'not code', useRefreshToken: false }; + + const result = flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config); + + expect(result).toBeFalse(); + }); + + it('isCurrentFlowCodeFlowWithRefreshTokens return true if useRefreshToken is set to true and code flow', () => { + const config = { responseType: 'code', useRefreshToken: true }; + + const result = flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config); + + expect(result).toBeTrue(); + }); + + describe('isCurrentFlowAnyImplicitFlow', () => { + it('returns true if currentFlowIsImplicitFlowWithAccessToken is true', () => { + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(true); + spyOn( + flowHelper as any, + 'isCurrentFlowImplicitFlowWithoutAccessToken' + ).and.returnValue(false); + + const result = flowHelper.isCurrentFlowAnyImplicitFlow({ + configId: 'configId1', + }); + + expect(result).toBeTrue(); + }); + + it('returns true if isCurrentFlowImplicitFlowWithoutAccessToken is true', () => { + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(false); + spyOn( + flowHelper as any, + 'isCurrentFlowImplicitFlowWithoutAccessToken' + ).and.returnValue(true); + + const result = flowHelper.isCurrentFlowAnyImplicitFlow({ + configId: 'configId1', + }); + + expect(result).toBeTrue(); + }); + + it('returns false it is not any implicit flow', () => { + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(false); + spyOn( + flowHelper as any, + 'isCurrentFlowImplicitFlowWithoutAccessToken' + ).and.returnValue(false); + + const result = flowHelper.isCurrentFlowAnyImplicitFlow({ + configId: 'configId1', + }); + + expect(result).toBeFalse(); + }); + }); +}); diff --git a/src/utils/flowHelper/flow-helper.service.ts b/src/utils/flowHelper/flow-helper.service.ts new file mode 100644 index 0000000..f9454b4 --- /dev/null +++ b/src/utils/flowHelper/flow-helper.service.ts @@ -0,0 +1,55 @@ +import { Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; + +@Injectable() +export class FlowHelper { + isCurrentFlowCodeFlow(configuration: OpenIdConfiguration): boolean { + return this.currentFlowIs('code', configuration); + } + + isCurrentFlowAnyImplicitFlow(configuration: OpenIdConfiguration): boolean { + return ( + this.isCurrentFlowImplicitFlowWithAccessToken(configuration) || + this.isCurrentFlowImplicitFlowWithoutAccessToken(configuration) + ); + } + + isCurrentFlowCodeFlowWithRefreshTokens( + configuration: OpenIdConfiguration | null + ): boolean { + if (!configuration) { + return false; + } + + const { useRefreshToken } = configuration; + + return ( + this.isCurrentFlowCodeFlow(configuration) && Boolean(useRefreshToken) + ); + } + + isCurrentFlowImplicitFlowWithAccessToken( + configuration: OpenIdConfiguration + ): boolean { + return this.currentFlowIs('id_token token', configuration); + } + + currentFlowIs( + flowTypes: string[] | string, + configuration: OpenIdConfiguration + ): boolean { + const { responseType } = configuration; + + if (Array.isArray(flowTypes)) { + return flowTypes.some((x) => responseType === x); + } + + return responseType === flowTypes; + } + + private isCurrentFlowImplicitFlowWithoutAccessToken( + configuration: OpenIdConfiguration + ): boolean { + return this.currentFlowIs('id_token', configuration); + } +} diff --git a/src/utils/object/object.helper.ts b/src/utils/object/object.helper.ts new file mode 100644 index 0000000..71a001a --- /dev/null +++ b/src/utils/object/object.helper.ts @@ -0,0 +1,11 @@ +export function removeNullAndUndefinedValues(obj: any): any { + const copy = { ...obj }; + + for (const key in obj) { + if (obj[key] === undefined || obj[key] === null) { + delete copy[key]; + } + } + + return copy; +} diff --git a/src/utils/platform-provider/platform-provider.spec.ts b/src/utils/platform-provider/platform-provider.spec.ts new file mode 100644 index 0000000..979a91c --- /dev/null +++ b/src/utils/platform-provider/platform-provider.spec.ts @@ -0,0 +1,44 @@ +import { PLATFORM_ID } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { PlatformProvider } from './platform.provider'; + +describe('PlatformProvider Tests', () => { + it('should create', () => { + TestBed.configureTestingModule({ + providers: [ + PlatformProvider, + { provide: PLATFORM_ID, useValue: 'browser' }, + ], + }); + + const service = TestBed.inject(PlatformProvider); + + expect(service).toBeTruthy(); + }); + + it('isBrowser equals true if "isPlatformBrowser" is true', () => { + TestBed.configureTestingModule({ + providers: [ + PlatformProvider, + { provide: PLATFORM_ID, useValue: 'browser' }, + ], + }); + + const service = TestBed.inject(PlatformProvider); + + expect(service.isBrowser()).toBe(true); + }); + + it('isBrowser equals true if "isPlatformBrowser" is true', () => { + TestBed.configureTestingModule({ + providers: [ + PlatformProvider, + { provide: PLATFORM_ID, useValue: 'notABrowser' }, + ], + }); + + const service = TestBed.inject(PlatformProvider); + + expect(service.isBrowser()).toBe(false); + }); +}); diff --git a/src/utils/platform-provider/platform.provider.ts b/src/utils/platform-provider/platform.provider.ts new file mode 100644 index 0000000..d7c1645 --- /dev/null +++ b/src/utils/platform-provider/platform.provider.ts @@ -0,0 +1,11 @@ +import { isPlatformBrowser } from '@angular/common'; +import { Injectable, PLATFORM_ID, inject } from 'injection-js'; + +@Injectable() +export class PlatformProvider { + private readonly platformId = inject(PLATFORM_ID); + + isBrowser(): boolean { + return isPlatformBrowser(this.platformId); + } +} diff --git a/src/utils/redirect/redirect.service.spec.ts b/src/utils/redirect/redirect.service.spec.ts new file mode 100644 index 0000000..786e5ad --- /dev/null +++ b/src/utils/redirect/redirect.service.spec.ts @@ -0,0 +1,46 @@ +import { DOCUMENT } from '../../dom'; +import { TestBed } from '@angular/core/testing'; +import { RedirectService } from './redirect.service'; + +describe('Redirect Service Tests', () => { + let service: RedirectService; + let myDocument: Document; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + RedirectService, + { + provide: DOCUMENT, + useValue: { + location: { + get href(): string { + return 'fakeUrl'; + }, + set href(_value) { + // ... + }, + }, + }, + }, + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(RedirectService); + myDocument = TestBed.inject(DOCUMENT); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + expect(myDocument).toBeTruthy(); + }); + + it('redirectTo sets window location href', () => { + const spy = spyOnProperty(myDocument.location, 'href', 'set'); + + service.redirectTo('anyurl'); + expect(spy).toHaveBeenCalledOnceWith('anyurl'); + }); +}); diff --git a/src/utils/redirect/redirect.service.ts b/src/utils/redirect/redirect.service.ts new file mode 100644 index 0000000..1453351 --- /dev/null +++ b/src/utils/redirect/redirect.service.ts @@ -0,0 +1,12 @@ + +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; + +@Injectable() +export class RedirectService { + private readonly document = inject(DOCUMENT); + + redirectTo(url: string): void { + this.document.location.href = url; + } +} diff --git a/src/utils/tokenHelper/token-helper.service.spec.ts b/src/utils/tokenHelper/token-helper.service.spec.ts new file mode 100644 index 0000000..d3ee296 --- /dev/null +++ b/src/utils/tokenHelper/token-helper.service.spec.ts @@ -0,0 +1,485 @@ +import { TestBed } from '@angular/core/testing'; +import { mockProvider } from '../../../test/auto-mock'; +import { LoggerService } from '../../logging/logger.service'; +import { TokenHelperService } from './token-helper.service'; + +describe('Token Helper Service', () => { + let tokenHelperService: TokenHelperService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [mockProvider(LoggerService)], + }); + }); + + beforeEach(() => { + tokenHelperService = TestBed.inject(TokenHelperService); + }); + + it('should create', () => { + expect(tokenHelperService).toBeTruthy(); + }); + + describe('getTokenExpirationDate', () => { + it('returns not null if param has no property exp', () => { + const result = tokenHelperService.getTokenExpirationDate({}); + + expect(result).toBeDefined(); + }); + + it('returns date if param has no property exp', () => { + const result = tokenHelperService.getTokenExpirationDate({}); + + expect(result instanceof Date).toBe(true); + }); + + it('returns correct date if param has property exp', () => { + const expectedDate = new Date(0); + + expectedDate.setUTCSeconds(123); + + const result = tokenHelperService.getTokenExpirationDate({ + exp: 123, + }); + + expect(expectedDate.toString()).toEqual(result.toString()); + }); + }); + + describe('getSigningInputFromToken', () => { + it('returns empty string if token is not valid', () => { + const result = tokenHelperService.getSigningInputFromToken('', true, { + configId: 'configId1', + }); + + expect(result).toBe(''); + }); + + it('returns string if token is valid', () => { + const token = 'a.valid.token'; + const result = tokenHelperService.getSigningInputFromToken(token, true, { + configId: 'configId1', + }); + + expect(result).toBe('a.valid'); + }); + }); + + describe('getPayloadFromToken', () => { + it('returns not null if token is undefined, encode is false', () => { + const result = tokenHelperService.getPayloadFromToken(undefined, false, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is undefined, encode is true', () => { + const result = tokenHelperService.getPayloadFromToken(undefined, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is null, encode is true', () => { + const result = tokenHelperService.getPayloadFromToken(null, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is empty, encode is true', () => { + const result = tokenHelperService.getPayloadFromToken('', true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is true', () => { + const result = tokenHelperService.getPayloadFromToken( + 'testStringWithoutDots', + true, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is false', () => { + const result = tokenHelperService.getPayloadFromToken( + 'testStringWithoutDots', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has only one point, encode is false', () => { + const result = tokenHelperService.getPayloadFromToken( + 'testStringWith.dot', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns payload if token is correct, encode is true 1', () => { + const token = 'abc.def.ghi'; + const expected = 'def'; + const result = tokenHelperService.getPayloadFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true 2', () => { + const token = 'abc.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.ghi'; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getPayloadFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true 3', () => { + const token = 'abc.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.ghi'; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getPayloadFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true 4', () => { + const token = + 'SGVsbG8gV29ybGQgMTIzIQ==.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.SGVsbG8gV29ybGQgMTIzIQ=='; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getPayloadFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false 1', () => { + const token = 'abc.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.ghi'; + const expected = JSON.parse('{ "text" : "Hello World 123!"}'); + const result = tokenHelperService.getPayloadFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false 2', () => { + const token = + 'SGVsbG8gV29ybGQgMTIzIQ==.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.SGVsbG8gV29ybGQgMTIzIQ=='; + const expected = JSON.parse(`{ "text" : "Hello World 123!"}`); + const result = tokenHelperService.getPayloadFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false 3', () => { + const token = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEw7PDqyJ9.wMn-1oLWnxKJolMGb7YKnlwjqusWf4xnnjABgFaDkI4'; + const jsonString = `{ "name" : "John D\xF3\xEB" }`; + const expected = JSON.parse(jsonString); + const result = tokenHelperService.getPayloadFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false 4', () => { + const token = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' + + '.eyJzdWIiOiIxIiwibmFtZSI6IkpvaG4gRF83NDc377-977-9MDEiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjI0MjQyfQ' + + '.RqIi_sO2g592anknIvfks4p7kPy8mOcN0YZUHz-8pFw'; + + const jsonString = `{ "admin": true, "sub": "1", "iat": 1516224242 }`; + const expected = JSON.parse(jsonString); + const result = tokenHelperService.getPayloadFromToken(token, false, { + configId: 'configId1', + }); + + expect(result).toEqual(jasmine.objectContaining(expected)); + }); + }); + + describe('getHeaderFromToken', () => { + it('returns not null if token is undefined, encode is false', () => { + const result = tokenHelperService.getHeaderFromToken(undefined, false, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is undefined, encode is true', () => { + const result = tokenHelperService.getHeaderFromToken(undefined, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is null, encode is true', () => { + const result = tokenHelperService.getHeaderFromToken(null, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is empty, encode is true', () => { + const result = tokenHelperService.getHeaderFromToken('', true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is true', () => { + const result = tokenHelperService.getHeaderFromToken( + 'testStringWithoutDots', + true, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is false', () => { + const result = tokenHelperService.getHeaderFromToken( + 'testStringWithoutDots', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has only one point, encode is false', () => { + const result = tokenHelperService.getHeaderFromToken( + 'testStringWith.dot', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'abc.def.ghi'; + const expected = 'abc'; + const result = tokenHelperService.getHeaderFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.def.ghi'; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getHeaderFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false', () => { + const token = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.def.ghi'; + const expected = JSON.parse(`{ "text" : "Hello World 123!"}`); + const result = tokenHelperService.getHeaderFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false', () => { + const token = + 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.SGVsbG8gV29ybGQgMTIzIQ==.SGVsbG8gV29ybGQgMTIzIQ=='; + const expected = JSON.parse(`{ "text" : "Hello World 123!"}`); + const result = tokenHelperService.getHeaderFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.abc.ghi'; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getHeaderFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = + 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.SGVsbG8gV29ybGQgMTIzIQ==.SGVsbG8gV29ybGQgMTIzIQ=='; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getHeaderFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false', () => { + const token = + 'eyJ0ZXh0IjogIkhlbGxvIFdvcmxkIDEyMyEifQ=.SGVsbG8gV29ybGQgMTIzIQ==.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const expected = JSON.parse(`{"text": "Hello World 123!"}`); + const result = tokenHelperService.getHeaderFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + }); + + describe('getSignatureFromToken', () => { + it('returns not null if token is undefined, encode is false', () => { + const result = tokenHelperService.getSignatureFromToken( + undefined, + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token is undefined, encode is true', () => { + const result = tokenHelperService.getSignatureFromToken(undefined, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is null, encode is true', () => { + const result = tokenHelperService.getSignatureFromToken(null, true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token is empty, encode is true', () => { + const result = tokenHelperService.getSignatureFromToken('', true, { + configId: 'configId1', + }); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is true', () => { + const result = tokenHelperService.getSignatureFromToken( + 'testStringWithoutDots', + true, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has no points, encode is false', () => { + const result = tokenHelperService.getSignatureFromToken( + 'testStringWithoutDots', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns not null if token has only one point, encode is false', () => { + const result = tokenHelperService.getSignatureFromToken( + 'testStringWith.dot', + false, + { configId: 'configId1' } + ); + + expect(result).toEqual({}); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'abc.def.ghi'; + const expected = 'ghi'; + const result = tokenHelperService.getSignatureFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'def.ghi.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const expected = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const result = tokenHelperService.getSignatureFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false', () => { + const token = 'def.ghi.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const expected = JSON.parse(`{ "text" : "Hello World 123!"}`); + const result = tokenHelperService.getSignatureFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is false', () => { + const token = + 'SGVsbG8gV29ybGQgMTIzIQ==.SGVsbG8gV29ybGQgMTIzIQ==.eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9'; + const expected = JSON.parse(`{ "text" : "Hello World 123!"}`); + const result = tokenHelperService.getSignatureFromToken(token, false, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.abc.ghi'; + const expected = 'ghi'; + const result = tokenHelperService.getSignatureFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + + it('returns payload if token is correct, encode is true', () => { + const token = + 'eyAidGV4dCIgOiAiSGVsbG8gV29ybGQgMTIzISJ9.SGVsbG8gV29ybGQgMTIzIQ==.SGVsbG8gV29ybGQgMTIzIQ=='; + const expected = 'SGVsbG8gV29ybGQgMTIzIQ=='; + const result = tokenHelperService.getSignatureFromToken(token, true, { + configId: 'configId1', + }); + + expect(expected).toEqual(result); + }); + }); +}); diff --git a/src/utils/tokenHelper/token-helper.service.ts b/src/utils/tokenHelper/token-helper.service.ts new file mode 100644 index 0000000..31ad11c --- /dev/null +++ b/src/utils/tokenHelper/token-helper.service.ts @@ -0,0 +1,182 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { LoggerService } from '../../logging/logger.service'; + +const PARTS_OF_TOKEN = 3; + +@Injectable() +export class TokenHelperService { + private readonly loggerService = inject(LoggerService); + + private readonly document = inject(DOCUMENT); + + getTokenExpirationDate(dataIdToken: any): Date { + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'exp')) { + return new Date(new Date().toUTCString()); + } + + const date = new Date(0); // The 0 here is the key, which sets the date to the epoch + + date.setUTCSeconds(dataIdToken.exp); + + return date; + } + + getSigningInputFromToken( + token: string | undefined | null, + encoded: boolean, + configuration: OpenIdConfiguration + ): string { + if (!this.tokenIsValid(token, configuration)) { + return ''; + } + + const header: string = this.getHeaderFromToken( + token, + encoded, + configuration + ); + const payload: string = this.getPayloadFromToken( + token, + encoded, + configuration + ); + + return [header, payload].join('.'); + } + + getHeaderFromToken( + token: string | undefined | null, + encoded: boolean, + configuration: OpenIdConfiguration + ): any { + if (!this.tokenIsValid(token, configuration)) { + return {}; + } + + return this.getPartOfToken(token, 0, encoded); + } + + getPayloadFromToken( + token: string | undefined | null, + encoded: boolean, + configuration: OpenIdConfiguration | null + ): any { + if (!configuration) { + return {}; + } + + if (!this.tokenIsValid(token, configuration)) { + return {}; + } + + return this.getPartOfToken(token, 1, encoded); + } + + getSignatureFromToken( + token: string | undefined | null, + encoded: boolean, + configuration: OpenIdConfiguration + ): any { + if (!this.tokenIsValid(token, configuration)) { + return {}; + } + + return this.getPartOfToken(token, 2, encoded); + } + + private getPartOfToken(token: string, index: number, encoded: boolean): any { + const partOfToken = this.extractPartOfToken(token, index); + + if (encoded) { + return partOfToken; + } + + const result = this.urlBase64Decode(partOfToken); + + return JSON.parse(result); + } + + private urlBase64Decode(str: string): string { + let output = str.replace(/-/g, '+').replace(/_/g, '/'); + + switch (output.length % 4) { + case 0: + break; + case 2: + output += '=='; + break; + case 3: + output += '='; + break; + default: + throw Error('Illegal base64url string!'); + } + + const decoded = + typeof this.document.defaultView !== 'undefined' + ? this.document.defaultView?.atob(output) + : Buffer.from(output, 'base64').toString('binary'); + + if (!decoded) { + return ''; + } + + try { + // Going backwards: from byte stream, to percent-encoding, to original string. + return decodeURIComponent( + decoded + .split('') + .map( + (c: string) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) + ) + .join('') + ); + } catch (err) { + return decoded; + } + } + + private tokenIsValid( + token: string | undefined | null, + configuration: OpenIdConfiguration + ): token is string { + if (!token) { + this.loggerService.logError( + configuration, + `token '${token}' is not valid --> token falsy` + ); + + return false; + } + + if (!(token as string).includes('.')) { + this.loggerService.logError( + configuration, + `token '${token}' is not valid --> no dots included` + ); + + return false; + } + + const parts = token.split('.'); + + if (parts.length !== PARTS_OF_TOKEN) { + this.loggerService.logError( + configuration, + `token '${token}' is not valid --> token has to have exactly ${ + PARTS_OF_TOKEN - 1 + } dots` + ); + + return false; + } + + return true; + } + + private extractPartOfToken(token: string, index: number): string { + return token.split('.')[index]; + } +} diff --git a/src/utils/url/current-url.service.spec.ts b/src/utils/url/current-url.service.spec.ts new file mode 100644 index 0000000..cd05d81 --- /dev/null +++ b/src/utils/url/current-url.service.spec.ts @@ -0,0 +1,78 @@ +import { DOCUMENT } from '../../dom'; +import { TestBed } from '@angular/core/testing'; +import { CurrentUrlService } from './current-url.service'; + +describe('CurrentUrlService with existing Url', () => { + let service: CurrentUrlService; + + const documentValue = { + defaultView: { location: 'http://my-url.com?state=my-state' }, + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + { + provide: DOCUMENT, + useValue: documentValue, + }, + ], + }); + + service = TestBed.inject(CurrentUrlService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getCurrentUrl', () => { + it('returns the current URL', () => { + const currentUrl = service.getCurrentUrl(); + + expect(currentUrl).toBe('http://my-url.com?state=my-state'); + }); + }); + + describe('getStateParamFromCurrentUrl', () => { + it('returns null if there is no current URL', () => { + spyOn(service, 'getCurrentUrl').and.returnValue(null); + + const stateParam = service.getStateParamFromCurrentUrl(''); + + expect(stateParam).toBe(null); + }); + + it('returns the state param for the URL', () => { + const stateParam = service.getStateParamFromCurrentUrl(); + + expect(stateParam).toBe('my-state'); + }); + + it('returns the state param for the URL if one is passed', () => { + const stateParam = service.getStateParamFromCurrentUrl( + 'http://my-url.com?state=my-passed-state' + ); + + expect(stateParam).toBe('my-passed-state'); + }); + + it('returns the state param for the URL if one is passed as empty string', () => { + const stateParam = service.getStateParamFromCurrentUrl(''); + + expect(stateParam).toBe('my-state'); + }); + + it('returns the state param for the URL if one is passed as null', () => { + const stateParam = service.getStateParamFromCurrentUrl(undefined); + + expect(stateParam).toBe('my-state'); + }); + + it('returns the state param for the URL if one is passed as undefined', () => { + const stateParam = service.getStateParamFromCurrentUrl(undefined); + + expect(stateParam).toBe('my-state'); + }); + }); +}); diff --git a/src/utils/url/current-url.service.ts b/src/utils/url/current-url.service.ts new file mode 100644 index 0000000..59a70ab --- /dev/null +++ b/src/utils/url/current-url.service.ts @@ -0,0 +1,24 @@ +import { DOCUMENT } from '../../dom'; +import { inject, Injectable } from 'injection-js'; + +@Injectable() +export class CurrentUrlService { + private readonly document: Document = inject(DOCUMENT); + + getStateParamFromCurrentUrl(url?: string): string | null { + const currentUrl = url || this.getCurrentUrl(); + + if (!currentUrl) { + return null; + } + + const parsedUrl = new URL(currentUrl); + const urlParams = new URLSearchParams(parsedUrl.search); + + return urlParams.get('state'); + } + + getCurrentUrl(): string | null { + return this.document?.defaultView?.location.toString() ?? null; + } +} diff --git a/src/utils/url/uri-encoder.ts b/src/utils/url/uri-encoder.ts new file mode 100644 index 0000000..3fd2168 --- /dev/null +++ b/src/utils/url/uri-encoder.ts @@ -0,0 +1,19 @@ +import { HttpParameterCodec } from '@ngify/http'; + +export class UriEncoder implements HttpParameterCodec { + encodeKey(key: string): string { + return encodeURIComponent(key); + } + + encodeValue(value: string): string { + return encodeURIComponent(value); + } + + decodeKey(key: string): string { + return decodeURIComponent(key); + } + + decodeValue(value: string): string { + return decodeURIComponent(value); + } +} diff --git a/src/utils/url/url.service.spec.ts b/src/utils/url/url.service.spec.ts new file mode 100644 index 0000000..09ba88f --- /dev/null +++ b/src/utils/url/url.service.spec.ts @@ -0,0 +1,2092 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../../test/auto-mock'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { FlowsDataService } from '../../flows/flows-data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { JwtWindowCryptoService } from '../../validation/jwt-window-crypto.service'; +import { FlowHelper } from '../flowHelper/flow-helper.service'; +import { UrlService } from './url.service'; + +describe('UrlService Tests', () => { + let service: UrlService; + let flowHelper: FlowHelper; + let flowsDataService: FlowsDataService; + let jwtWindowCryptoService: JwtWindowCryptoService; + let storagePersistenceService: StoragePersistenceService; + let loggerService: LoggerService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + UrlService, + mockProvider(LoggerService), + mockProvider(FlowsDataService), + FlowHelper, + mockProvider(StoragePersistenceService), + mockProvider(JwtWindowCryptoService), + ], + }); + }); + + beforeEach(() => { + service = TestBed.inject(UrlService); + loggerService = TestBed.inject(LoggerService); + flowHelper = TestBed.inject(FlowHelper); + flowsDataService = TestBed.inject(FlowsDataService); + jwtWindowCryptoService = TestBed.inject(JwtWindowCryptoService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('getUrlWithoutQueryParameters', () => { + it('should return a new instance of the passed URL without any query parameters', () => { + const url = new URL('https://any.url'); + + const params = [ + { key: 'doot', value: 'boop' }, + { key: 'blep', value: 'blep' }, + ]; + + params.forEach((p) => { + url.searchParams.set(p.key, p.value); + }); + + const sut = service.getUrlWithoutQueryParameters(url); + + params.forEach((p) => { + expect(sut.searchParams.has(p.key)).toBeFalse(); + }); + }); + }); + + describe('queryParametersExist', () => { + const expected = new URLSearchParams(); + + const params = [ + { key: 'doot', value: 'boop' }, + { key: 'blep', value: 'blep' }, + ]; + + params.forEach((p) => { + expected.set(p.key, p.value); + }); + + const matchingUrls = [ + new URL('https://any.url?doot=boop&blep=blep'), + new URL('https://any.url?doot=boop&blep=blep&woop=doot'), + ]; + + const nonMatchingUrls = [ + new URL('https://any.url?doot=boop'), + new URL('https://any.url?blep=blep&woop=doot'), + ]; + + matchingUrls.forEach((mu) => { + it(`should return true for ${mu.toString()}`, () => { + expect( + service.queryParametersExist(expected, mu.searchParams) + ).toBeTrue(); + }); + }); + + nonMatchingUrls.forEach((nmu) => { + it(`should return false for ${nmu.toString()}`, () => { + expect( + service.queryParametersExist(expected, nmu.searchParams) + ).toBeFalse(); + }); + }); + }); + + describe('isCallbackFromSts', () => { + it(`should return false if config says to check redirect URI, and it doesn't match`, () => { + const nonMatchingUrls = [ + { + url: 'https://the-redirect.url', + config: { + redirectUrl: 'https://the-redirect.url?with=parameter', + checkRedirectUrlWhenCheckingIfIsCallback: true, + }, + }, + { + url: 'https://the-redirect.url?wrong=parameter', + config: { + redirectUrl: 'https://the-redirect.url?with=parameter', + checkRedirectUrlWhenCheckingIfIsCallback: true, + }, + }, + { + url: 'https://not-the-redirect.url', + config: { + redirectUrl: 'https://the-redirect.url', + checkRedirectUrlWhenCheckingIfIsCallback: true, + }, + }, + ]; + + nonMatchingUrls.forEach((nmu) => { + expect(service.isCallbackFromSts(nmu.url, nmu.config)).toBeFalse(); + }); + }); + + const testingValues = [ + { param: 'code', isCallbackFromSts: true }, + { param: 'state', isCallbackFromSts: true }, + { param: 'token', isCallbackFromSts: true }, + { param: 'id_token', isCallbackFromSts: true }, + { param: 'some_param', isCallbackFromSts: false }, + ]; + + testingValues.forEach(({ param, isCallbackFromSts }) => { + it(`should return ${isCallbackFromSts} when param is ${param}`, () => { + const result = service.isCallbackFromSts( + `https://any.url/?${param}=anyvalue` + ); + + expect(result).toBe(isCallbackFromSts); + }); + }); + }); + + describe('getUrlParameter', () => { + it('returns empty string when there is no urlToCheck', () => { + const result = service.getUrlParameter('', 'code'); + + expect(result).toBe(''); + }); + + it('returns empty string when there is no name', () => { + const result = service.getUrlParameter('url', ''); + + expect(result).toBe(''); + }); + + it('returns empty string when name is not a uri', () => { + const result = service.getUrlParameter('url', 'anything'); + + expect(result).toBe(''); + }); + + it('parses Url correctly with hash in the end', () => { + const urlToCheck = + 'https://www.example.com/signin?code=thisisacode&state=0000.1234.000#'; + const code = service.getUrlParameter(urlToCheck, 'code'); + const state = service.getUrlParameter(urlToCheck, 'state'); + + expect(code).toBe('thisisacode'); + expect(state).toBe('0000.1234.000'); + }); + + it('parses url with special chars in param and hash in the end', () => { + const urlToCheck = + 'https://www.example.com/signin?code=thisisa$-_.+!*(),code&state=0000.1234.000#'; + const code = service.getUrlParameter(urlToCheck, 'code'); + const state = service.getUrlParameter(urlToCheck, 'state'); + + expect(code).toBe('thisisa$-_.+!*(),code'); + expect(state).toBe('0000.1234.000'); + }); + + it('parses Url correctly with number&delimiter in params', () => { + const urlToCheck = + 'https://www.example.com/signin?code=thisisacode&state=0000.1234.000'; + const code = service.getUrlParameter(urlToCheck, 'code'); + const state = service.getUrlParameter(urlToCheck, 'state'); + + expect(code).toBe('thisisacode'); + expect(state).toBe('0000.1234.000'); + }); + + it('gets correct param if params divided vith slash', () => { + const urlToCheck = + 'https://www.example.com/signin?state=0000.1234.000&ui_locales=de&code=thisisacode#lang=de'; + const code = service.getUrlParameter(urlToCheck, 'code'); + const state = service.getUrlParameter(urlToCheck, 'state'); + + expect(code).toBe('thisisacode'); + expect(state).toBe('0000.1234.000'); + }); + + it('gets correct params when response_mode=fragment', () => { + // Test url taken from an example in the RFC: https://datatracker.ietf.org/doc/html/rfc6749#section-4.2.2 + const urlToCheck = + 'http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600'; + const accessToken = service.getUrlParameter(urlToCheck, 'access_token'); + const state = service.getUrlParameter(urlToCheck, 'state'); + const tokenType = service.getUrlParameter(urlToCheck, 'token_type'); + const expiresIn = service.getUrlParameter(urlToCheck, 'expires_in'); + + expect(accessToken).toBe('2YotnFZFEjr1zCsicMWpAA'); + expect(state).toBe('xyz'); + expect(tokenType).toBe('example'); + expect(expiresIn).toBe('3600'); + }); + + it('gets correct params when square brackets are present', () => { + const urlToCheck = + 'http://example.com/cb#state=abc[&code=abc&arr[]=1&some_param=abc]&arr[]=2&arr[]=3'; + const state = service.getUrlParameter(urlToCheck, 'state'); + const code = service.getUrlParameter(urlToCheck, 'code'); + const someParam = service.getUrlParameter(urlToCheck, 'some_param'); + const array = service.getUrlParameter(urlToCheck, 'arr[]'); + + expect(state).toBe('abc['); + expect(code).toBe('abc'); + expect(someParam).toBe('abc]'); + expect(['1', '2', '3']).toContain(array); + }); + }); + + describe('createAuthorizeUrl', () => { + it('returns empty string when no authoizationendpoint given -> wellKnownEndpoints null', () => { + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + 'https://localhost:44386', + 'nonce', + 'state' + ); + + expect(value).toEqual(''); + }); + + it('returns empty string when no authoizationendpoint given -> configurationProvider null', () => { + (service as any).configurationProvider = null; + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + 'https://localhost:44386', + 'nonce', + 'state' + ); + + expect(value).toEqual(''); + }); + + it('returns empty string when clientId is null', () => { + const config = { configId: 'configId1', clientId: '' }; + const authorizationEndpoint = 'authorizationEndpoint'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + 'https://localhost:44386', + 'nonce', + 'state', + config + ); + + expect(value).toEqual(''); + }); + + it('returns empty string when responseType is null', () => { + const config = { + configId: 'configId1', + clientId: 'something', + responseType: undefined, + }; + const authorizationEndpoint = 'authorizationEndpoint'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + 'https://localhost:44386', + 'nonce', + 'state', + config + ); + + expect(value).toEqual(''); + }); + + it('returns empty string when scope is null', () => { + const config = { + configId: 'configId1', + clientId: 'something', + responseType: 'responsetype', + scope: undefined, + }; + const authorizationEndpoint = 'authorizationEndpoint'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + 'https://localhost:44386', + 'nonce', + 'state', + config + ); + + expect(value).toEqual(''); + }); + + it('createAuthorizeUrl with code flow and codeChallenge adds "code_challenge" and "code_challenge_method" param', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'code'; + config.scope = 'openid email profile'; + config.redirectUrl = 'https://localhost:44386'; + config.customParamsAuthRequest = { + testcustom: 'customvalue', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint: 'http://example' }); + + const value = (service as any).createAuthorizeUrl( + 'codeChallenge', // Code Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=code' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&code_challenge=codeChallenge&code_challenge_method=S256' + + '&testcustom=customvalue'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl with prompt adds prompt value', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.configId = 'configId1'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + 'myprompt' + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&prompt=myprompt'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl with prompt and custom values adds prompt value and custom values', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.configId = 'configId1'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + 'myprompt', + { to: 'add', as: 'well' } + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&to=add&as=well' + + '&prompt=myprompt'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl with hdParam adds hdparam value', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.hdParam = 'myHdParam'; + config.configId = 'configId1'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&hd=myHdParam'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl with custom value', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.configId = 'configId1'; + + config.customParamsAuthRequest = { + testcustom: 'customvalue', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&testcustom=customvalue'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl with custom values', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.configId = 'configId1'; + + config.customParamsAuthRequest = { + t4: 'ABC abc 123', + t3: '#', + t2: '-_.!~*()', + t1: ';,/?:@&=+$', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state&t4=ABC%20abc%20123&t3=%23&t2=-_.!~*()&t1=%3B%2C%2F%3F%3A%40%26%3D%2B%24'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl creates URL with with custom values and dynamic custom values', () => { + const config = { + authority: 'https://localhost:5001', + redirectUrl: 'https://localhost:44386', + clientId: + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + responseType: 'id_token token', + scope: 'openid email profile', + configId: 'configId1', + customParamsAuthRequest: { + t4: 'ABC abc 123', + t3: '#', + t2: '-_.!~*()', + t1: ';,/?:@&=+$', + }, + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + null, + { to: 'add', as: 'well' } + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&t4=ABC%20abc%20123&t3=%23&t2=-_.!~*()&t1=%3B%2C%2F%3F%3A%40%26%3D%2B%24' + + '&to=add&as=well'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl creates URL with custom values equals null and dynamic custom values', () => { + const config = { + authority: 'https://localhost:5001', + redirectUrl: 'https://localhost:44386', + clientId: + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + responseType: 'id_token token', + scope: 'openid email profile', + customParamsAuthRequest: undefined, + configId: 'configId1', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + null, + { to: 'add', as: 'well' } + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&to=add&as=well'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl creates URL with custom values not given and dynamic custom values', () => { + const config = { + authority: 'https://localhost:5001', + redirectUrl: 'https://localhost:44386', + clientId: + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + responseType: 'id_token token', + scope: 'openid email profile', + configId: 'configId1', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + null, + { to: 'add', as: 'well' } + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&to=add&as=well'; + + expect(value).toEqual(expectValue); + }); + + // https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oidc + it('createAuthorizeUrl with custom URL like active-directory-b2c', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = 'myid'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: + 'https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_sign_in', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_sign_in' + + '&client_id=myid' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state'; + + expect(value).toEqual(expectValue); + }); + + it('createAuthorizeUrl default', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.configId = 'configId1'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'http://example', + }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=id_token%20token' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state'; + + expect(value).toEqual(expectValue); + }); + + it('should add the prompt only once even if it is configured AND passed with `none` in silent renew case, taking the passed one', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'code'; + config.scope = 'openid email profile'; + config.redirectUrl = 'https://localhost:44386'; + + config.customParamsAuthRequest = { + prompt: 'select_account', + }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint: 'http://example' }); + + const value = (service as any).createAuthorizeUrl( + '', // Implicit Flow + config.redirectUrl, + 'nonce', + 'state', + config, + 'somePrompt' + ); + + const expectValue = + 'http://example?client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + + '&redirect_uri=https%3A%2F%2Flocalhost%3A44386' + + '&response_type=code' + + '&scope=openid%20email%20profile' + + '&nonce=nonce' + + '&state=state' + + '&code_challenge=' + + '&code_challenge_method=S256' + + '&prompt=somePrompt'; + + expect(value).toEqual(expectValue); + }); + }); + + describe('createRevocationEndpointBodyAccessToken', () => { + it('createRevocationBody access_token default', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.postLogoutRedirectUri = 'https://localhost:44386/Unauthorized'; + + const revocationEndpoint = 'http://example?cod=ddd'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + revocationEndpoint, + }); + + const value = service.createRevocationEndpointBodyAccessToken( + 'mytoken', + config + ); + const expectValue = + 'client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com&token=mytoken&token_type_hint=access_token'; + + expect(value).toEqual(expectValue); + }); + + it('createRevocationEndpointBodyAccessToken returns null when no clientId is given', () => { + const config = { + authority: 'https://localhost:5001', + clientId: '', + } as OpenIdConfiguration; + const value = service.createRevocationEndpointBodyAccessToken( + 'mytoken', + config + ); + + expect(value).toBeNull(); + }); + }); + + describe('createRevocationEndpointBodyRefreshToken', () => { + it('createRevocationBody refresh_token default', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.postLogoutRedirectUri = 'https://localhost:44386/Unauthorized'; + + const revocationEndpoint = 'http://example?cod=ddd'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + revocationEndpoint, + }); + + const value = service.createRevocationEndpointBodyRefreshToken( + 'mytoken', + config + ); + const expectValue = + 'client_id=188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com&token=mytoken&token_type_hint=refresh_token'; + + expect(value).toEqual(expectValue); + }); + + it('createRevocationEndpointBodyRefreshToken returns null when no clientId is given', () => { + const config = { + authority: 'https://localhost:5001', + clientId: undefined, + } as OpenIdConfiguration; + const value = service.createRevocationEndpointBodyRefreshToken( + 'mytoken', + config + ); + + expect(value).toBeNull(); + }); + }); + + describe('getRevocationEndpointUrl', () => { + it('getRevocationEndpointUrl with params', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.postLogoutRedirectUri = 'https://localhost:44386/Unauthorized'; + + const revocationEndpoint = 'http://example?cod=ddd'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + revocationEndpoint, + }); + + const value = service.getRevocationEndpointUrl(config); + + const expectValue = 'http://example'; + + expect(value).toEqual(expectValue); + }); + + it('getRevocationEndpointUrl default', () => { + const config = { + authority: 'https://localhost:5001', + } as OpenIdConfiguration; + + config.redirectUrl = 'https://localhost:44386'; + config.clientId = + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com'; + config.responseType = 'id_token token'; + config.scope = 'openid email profile'; + config.postLogoutRedirectUri = 'https://localhost:44386/Unauthorized'; + + const revocationEndpoint = 'http://example'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + revocationEndpoint, + }); + + const value = service.getRevocationEndpointUrl(config); + + const expectValue = 'http://example'; + + expect(value).toEqual(expectValue); + }); + + it('getRevocationEndpointUrl returns null when there is not revociationendpoint given', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', {}) + .and.returnValue({ + revocationEndpoint: null, + }); + const value = service.getRevocationEndpointUrl({}); + + expect(value).toBeNull(); + }); + + it('getRevocationEndpointUrl returns null when there is no wellKnownEndpoints given', () => { + const value = service.getRevocationEndpointUrl({}); + + expect(value).toBeNull(); + }); + }); + + describe('getRedirectUrl', () => { + it('returns configured redirectUrl', () => { + const config = { configId: 'configId1', redirectUrl: 'one-url' }; + const url = (service as any).getRedirectUrl(config); + + expect(url).toEqual('one-url'); + }); + + it('returns redefined redirectUrl in AuthOptions', () => { + const config = { configId: 'configId1', redirectUrl: 'one-url' }; + const url = (service as any).getRedirectUrl(config, { + redirectUrl: 'other-url', + }); + + expect(url).toEqual('other-url'); + }); + }); + + describe('getAuthorizeUrl', () => { + it('returns null if no config is given', waitForAsync(() => { + service.getAuthorizeUrl(null).subscribe((url) => { + expect(url).toBeNull(); + }); + })); + + it('returns null if current flow is code flow and no redirect url is defined', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + + service.getAuthorizeUrl({ configId: 'configId1' }).subscribe((result) => { + expect(result).toBeNull(); + }); + })); + + it('returns empty string if current flow is code flow, config disabled pkce and there is a redirecturl', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const config = { + configId: 'configId1', + disablePkce: true, + redirectUrl: 'some-redirectUrl', + } as OpenIdConfiguration; + + service.getAuthorizeUrl(config).subscribe((result) => { + expect(result).toBe(''); + }); + })); + + it('returns url if current flow is code flow, config disabled pkce, there is a redirecturl and awkep are given', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const config = { + configId: 'configId1', + disablePkce: false, + redirectUrl: 'some-redirectUrl', + clientId: 'some-clientId', + responseType: 'testResponseType', + scope: 'testScope', + hdParam: undefined, + customParamsAuthRequest: undefined, + } as OpenIdConfiguration; + + const authorizationEndpoint = 'authorizationEndpoint'; + + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of('some-code-challenge') + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + service.getAuthorizeUrl(config).subscribe((result) => { + expect(result).toBe( + 'authorizationEndpoint?client_id=some-clientId&redirect_uri=some-redirectUrl&response_type=testResponseType&scope=testScope&nonce=undefined&state=undefined&code_challenge=some-code-challenge&code_challenge_method=S256' + ); + }); + })); + + it('calls createUrlImplicitFlowAuthorize if current flow is NOT code flow', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + const spyCreateUrlCodeFlowAuthorize = spyOn( + service as any, + 'createUrlCodeFlowAuthorize' + ); + const spyCreateUrlImplicitFlowAuthorize = spyOn( + service as any, + 'createUrlImplicitFlowAuthorize' + ); + + service.getAuthorizeUrl({ configId: 'configId1' }).subscribe(() => { + expect(spyCreateUrlCodeFlowAuthorize).not.toHaveBeenCalled(); + expect(spyCreateUrlImplicitFlowAuthorize).toHaveBeenCalled(); + }); + })); + + it('return empty string if flow is not code flow and createUrlImplicitFlowAuthorize returns falsy', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + const spy = spyOn( + service as any, + 'createUrlImplicitFlowAuthorize' + ).and.returnValue(''); + const resultObs$ = service.getAuthorizeUrl({ configId: 'configId1' }); + + resultObs$.subscribe((result) => { + expect(spy).toHaveBeenCalled(); + expect(result).toBe(''); + }); + })); + }); + + describe('getRefreshSessionSilentRenewUrl', () => { + it('calls createUrlCodeFlowWithSilentRenew if current flow is code flow', () => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(true); + const spy = spyOn(service as any, 'createUrlCodeFlowWithSilentRenew'); + + service.getRefreshSessionSilentRenewUrl({ configId: 'configId1' }); + expect(spy).toHaveBeenCalled(); + }); + + it('calls createUrlImplicitFlowWithSilentRenew if current flow is NOT code flow', () => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + const spyCreateUrlCodeFlowWithSilentRenew = spyOn( + service as any, + 'createUrlCodeFlowWithSilentRenew' + ); + const spyCreateUrlImplicitFlowWithSilentRenew = spyOn( + service as any, + 'createUrlImplicitFlowWithSilentRenew' + ); + + service.getRefreshSessionSilentRenewUrl({ configId: 'configId1' }); + expect(spyCreateUrlCodeFlowWithSilentRenew).not.toHaveBeenCalled(); + expect(spyCreateUrlImplicitFlowWithSilentRenew).toHaveBeenCalled(); + }); + + it('return empty string if flow is not code flow and createUrlImplicitFlowWithSilentRenew returns falsy', waitForAsync(() => { + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + const spy = spyOn( + service as any, + 'createUrlImplicitFlowWithSilentRenew' + ).and.returnValue(''); + const resultObs$ = service.getRefreshSessionSilentRenewUrl({ + configId: 'configId1', + }); + + resultObs$.subscribe((result) => { + expect(spy).toHaveBeenCalled(); + expect(result).toBe(''); + }); + })); + }); + + describe('createBodyForCodeFlowCodeRequest', () => { + it('returns null if no code verifier is set', () => { + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(null); + const result = service.createBodyForCodeFlowCodeRequest( + 'notRelevantParam', + { configId: 'configId1' } + ); + + expect(result).toBeNull(); + }); + + it('returns null if no clientId is set', () => { + const codeVerifier = 'codeverifier'; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(codeVerifier); + const clientId = ''; + const result = service.createBodyForCodeFlowCodeRequest( + 'notRelevantParam', + { clientId } + ); + + expect(result).toBeNull(); + }); + + it('returns null if silentrenewRunning is false and redirectUrl is falsy', () => { + const codeVerifier = 'codeverifier'; + const code = 'code'; + const redirectUrl = ''; + const clientId = 'clientId'; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(codeVerifier); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + + const result = service.createBodyForCodeFlowCodeRequest(code, { + clientId, + redirectUrl, + }); + + expect(result).toBeNull(); + }); + + it('returns correctUrl with silentrenewRunning is false', () => { + const codeVerifier = 'codeverifier'; + const code = 'code'; + const redirectUrl = 'redirectUrl'; + const clientId = 'clientId'; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(codeVerifier); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(false); + + const result = service.createBodyForCodeFlowCodeRequest(code, { + clientId, + redirectUrl, + }); + const expected = `grant_type=authorization_code&client_id=${clientId}&code_verifier=${codeVerifier}&code=${code}&redirect_uri=${redirectUrl}`; + + expect(result).toBe(expected); + }); + + it('returns correctUrl with silentrenewRunning is true', () => { + const codeVerifier = 'codeverifier'; + const code = 'code'; + const silentRenewUrl = 'silentRenewUrl'; + const clientId = 'clientId'; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(codeVerifier); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + + const result = service.createBodyForCodeFlowCodeRequest(code, { + clientId, + silentRenewUrl, + }); + const expected = `grant_type=authorization_code&client_id=${clientId}&code_verifier=${codeVerifier}&code=${code}&redirect_uri=${silentRenewUrl}`; + + expect(result).toBe(expected); + }); + + it('returns correctUrl when customTokenParams are provided', () => { + const codeVerifier = 'codeverifier'; + const code = 'code'; + const silentRenewUrl = 'silentRenewUrl'; + const clientId = 'clientId'; + const customTokenParams = { foo: 'bar' }; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(codeVerifier); + spyOn(flowsDataService, 'isSilentRenewRunning').and.returnValue(true); + + const result = service.createBodyForCodeFlowCodeRequest( + code, + { clientId, silentRenewUrl }, + customTokenParams + ); + const expected = `grant_type=authorization_code&client_id=${clientId}&code_verifier=${codeVerifier}&code=${code}&foo=bar&redirect_uri=${silentRenewUrl}`; + + expect(result).toBe(expected); + }); + + it('returns null if pkce is disabled and no code verifier is given', () => { + const code = 'code'; + const customTokenParams = { foo: 'bar' }; + const config = { + clientId: 'clientId', + disablePkce: false, + }; + + spyOn(flowsDataService, 'getCodeVerifier').and.returnValue(null); + + const loggerspy = spyOn(loggerService, 'logError'); + const result = service.createBodyForCodeFlowCodeRequest( + code, + config, + customTokenParams + ); + + expect(result).toBe(null); + expect(loggerspy).toHaveBeenCalledOnceWith( + config, + 'CodeVerifier is not set ', + null + ); + }); + }); + + describe('createBodyForCodeFlowRefreshTokensRequest', () => { + it('returns correct URL', () => { + const clientId = 'clientId'; + const refreshToken = 'refreshToken'; + const result = service.createBodyForCodeFlowRefreshTokensRequest( + refreshToken, + { clientId } + ); + + expect(result).toBe( + `grant_type=refresh_token&client_id=${clientId}&refresh_token=${refreshToken}` + ); + }); + + it('returns correct URL with custom params if custom params are passed', () => { + const clientId = 'clientId'; + const refreshToken = 'refreshToken'; + const result = service.createBodyForCodeFlowRefreshTokensRequest( + refreshToken, + { clientId }, + { any: 'thing' } + ); + + expect(result).toBe( + `grant_type=refresh_token&client_id=${clientId}&refresh_token=${refreshToken}&any=thing` + ); + }); + + it('returns null if clientId is falsy', () => { + const clientId = ''; + const refreshToken = 'refreshToken'; + const result = service.createBodyForCodeFlowRefreshTokensRequest( + refreshToken, + { clientId } + ); + + expect(result).toBe(null); + }); + }); + + describe('createBodyForParCodeFlowRequest', () => { + it('returns null redirectUrl is falsy', waitForAsync(() => { + const resultObs$ = service.createBodyForParCodeFlowRequest({ + redirectUrl: '', + }); + + resultObs$.subscribe((result) => { + expect(result).toBe(null); + }); + })); + + it('returns basic URL with no extras if properties are given', waitForAsync(() => { + const config = { + clientId: 'testClientId', + responseType: 'testResponseType', + scope: 'testScope', + hdParam: undefined, + customParamsAuthRequest: undefined, + redirectUrl: 'testRedirectUrl', + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('testState'); + spyOn(flowsDataService, 'createNonce').and.returnValue('testNonce'); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + 'testCodeVerifier' + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of('testCodeChallenge') + ); + + const resultObs$ = service.createBodyForParCodeFlowRequest(config); + + resultObs$.subscribe((result) => { + expect(result).toBe( + `client_id=testClientId&redirect_uri=testRedirectUrl&response_type=testResponseType&scope=testScope&nonce=testNonce&state=testState&code_challenge=testCodeChallenge&code_challenge_method=S256` + ); + }); + })); + + it('returns basic URL with hdParam if properties are given', waitForAsync(() => { + const config = { + clientId: 'testClientId', + responseType: 'testResponseType', + scope: 'testScope', + hdParam: 'testHdParam', + customParamsAuthRequest: undefined, + redirectUrl: 'testRedirectUrl', + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('testState'); + spyOn(flowsDataService, 'createNonce').and.returnValue('testNonce'); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + 'testCodeVerifier' + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of('testCodeChallenge') + ); + + const resultObs$ = service.createBodyForParCodeFlowRequest(config); + + resultObs$.subscribe((result) => { + expect(result).toBe( + `client_id=testClientId&redirect_uri=testRedirectUrl&response_type=testResponseType&scope=testScope&nonce=testNonce&state=testState&code_challenge=testCodeChallenge&code_challenge_method=S256&hd=testHdParam` + ); + }); + })); + + it('returns basic URL with hdParam and custom params if properties are given', waitForAsync(() => { + const config = { + clientId: 'testClientId', + responseType: 'testResponseType', + scope: 'testScope', + hdParam: 'testHdParam', + customParamsAuthRequest: { any: 'thing' }, + redirectUrl: 'testRedirectUrl', + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('testState'); + spyOn(flowsDataService, 'createNonce').and.returnValue('testNonce'); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + 'testCodeVerifier' + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of('testCodeChallenge') + ); + + const resultObs$ = service.createBodyForParCodeFlowRequest(config); + + resultObs$.subscribe((result) => { + expect(result).toBe( + `client_id=testClientId&redirect_uri=testRedirectUrl&response_type=testResponseType&scope=testScope&nonce=testNonce&state=testState&code_challenge=testCodeChallenge&code_challenge_method=S256&hd=testHdParam&any=thing` + ); + }); + })); + + it('returns basic URL with hdParam and custom params and passed cutom params if properties are given', waitForAsync(() => { + const config = { + clientId: 'testClientId', + responseType: 'testResponseType', + scope: 'testScope', + hdParam: 'testHdParam', + customParamsAuthRequest: { any: 'thing' }, + redirectUrl: 'testRedirectUrl', + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue('testState'); + spyOn(flowsDataService, 'createNonce').and.returnValue('testNonce'); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + 'testCodeVerifier' + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of('testCodeChallenge') + ); + + const resultObs$ = service.createBodyForParCodeFlowRequest(config, { + customParams: { + any: 'otherThing', + }, + }); + + resultObs$.subscribe((result) => { + expect(result).toBe( + `client_id=testClientId&redirect_uri=testRedirectUrl&response_type=testResponseType&scope=testScope&nonce=testNonce&state=testState&code_challenge=testCodeChallenge&code_challenge_method=S256&hd=testHdParam&any=thing&any=otherThing` + ); + }); + })); + }); + + describe('createUrlImplicitFlowWithSilentRenew', () => { + it('returns null if silentrenewUrl is falsy', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = null; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + const config = { + silentRenewUrl, + }; + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowWithSilentRenew(config); + + expect(result).toBeNull(); + }); + + it('returns correct URL if wellknownendpoints are given', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = 'http://any-url.com'; + const authorizationEndpoint = 'authorizationEndpoint'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const scope = 'testScope'; + const config = { + silentRenewUrl, + clientId, + responseType, + scope, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint, + }); + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowWithSilentRenew(config); + + expect(result).toBe( + `authorizationEndpoint?client_id=${clientId}&redirect_uri=http%3A%2F%2Fany-url.com&response_type=${responseType}&scope=${scope}&nonce=${nonce}&state=${state}&prompt=none` + ); + }); + + it('returns correct url if wellknownendpoints are not given', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = 'http://any-url.com'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const config = { + silentRenewUrl, + clientId, + responseType, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowWithSilentRenew(config); + + expect(result).toBe(null); + }); + }); + + describe('createUrlCodeFlowWithSilentRenew', () => { + it('returns empty string if silentrenewUrl is falsy', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = null; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge '; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + + const config = { + silentRenewUrl, + }; + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowWithSilentRenew(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBe(''); + }); + })); + + it('returns correct URL if wellknownendpoints are given', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = 'http://any-url.com'; + const authorizationEndpoint = 'authorizationEndpoint'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge '; + const scope = 'testScope'; + const config = { + silentRenewUrl, + clientId, + responseType, + scope, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowWithSilentRenew(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBe( + `authorizationEndpoint?client_id=${clientId}&redirect_uri=http%3A%2F%2Fany-url.com&response_type=${responseType}&scope=${scope}&nonce=${nonce}&state=${state}&prompt=none` + ); + }); + })); + + it('returns empty string if no wellknownendpoints are given', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const silentRenewUrl = 'http://any-url.com'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge '; + const config = { + silentRenewUrl, + clientId, + responseType, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowWithSilentRenew(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBe(''); + }); + })); + }); + + describe('createUrlImplicitFlowAuthorize', () => { + it('returns correct URL if wellknownendpoints are given', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const redirectUrl = 'http://any-url.com'; + const authorizationEndpoint = 'authorizationEndpoint'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const scope = 'testScope'; + const config = { + redirectUrl, + clientId, + responseType, + scope, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowAuthorize(config); + + expect(result).toBe( + `authorizationEndpoint?client_id=clientId&redirect_uri=http%3A%2F%2Fany-url.com&response_type=${responseType}&scope=${scope}&nonce=${nonce}&state=${state}` + ); + }); + + it('returns empty string if no wellknownendpoints are given', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const redirectUrl = 'http://any-url.com'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const config = { redirectUrl, clientId, responseType }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowAuthorize(config); + + expect(result).toBe(null); + }); + + it('returns null if there is nor redirecturl', () => { + const state = 'testState'; + const nonce = 'testNonce'; + const redirectUrl = ''; + const clientId = 'clientId'; + const responseType = 'responseType'; + const config = { redirectUrl, clientId, responseType }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + + const serviceAsAny = service as any; + + const result = serviceAsAny.createUrlImplicitFlowAuthorize(config); + + expect(result).toBe(null); + }); + }); + + describe('createUrlCodeFlowAuthorize', () => { + it('returns null if redirectUrl is falsy', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const redirectUrl = null; + const config = { + redirectUrl, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowAuthorize(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBeNull(); + }); + })); + + it('returns correct URL if wellknownendpoints are given', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const scope = 'testScope'; + const redirectUrl = 'http://any-url.com'; + const authorizationEndpoint = 'authorizationEndpoint'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge '; + const config = { + redirectUrl, + clientId, + responseType, + scope, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowAuthorize(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBe( + `authorizationEndpoint?client_id=clientId&redirect_uri=http%3A%2F%2Fany-url.com&response_type=${responseType}&scope=${scope}&nonce=${nonce}&state=${state}` + ); + }); + })); + + it('returns correct URL if wellknownendpoints and custom params are given', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const scope = 'testScope'; + const redirectUrl = 'http://any-url.com'; + const authorizationEndpoint = 'authorizationEndpoint'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge'; + const configId = 'configId1'; + const config = { + redirectUrl, + clientId, + responseType, + scope, + configId, + }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ authorizationEndpoint }); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowAuthorize(config, { + customParams: { to: 'add', as: 'well' }, + }); + + resultObs$.subscribe((result: any) => { + expect(result).toBe( + `authorizationEndpoint?client_id=clientId&redirect_uri=http%3A%2F%2Fany-url.com` + + `&response_type=${responseType}&scope=${scope}&nonce=${nonce}&state=${state}&to=add&as=well` + ); + }); + })); + + it('returns empty string if no wellknownendpoints are given', waitForAsync(() => { + const state = 'testState'; + const nonce = 'testNonce'; + const redirectUrl = 'http://any-url.com'; + const clientId = 'clientId'; + const responseType = 'responseType'; + const codeVerifier = 'codeVerifier'; + const codeChallenge = 'codeChallenge '; + const config = { redirectUrl, clientId, responseType }; + + spyOn( + flowsDataService, + 'getExistingOrCreateAuthStateControl' + ).and.returnValue(state); + spyOn(flowsDataService, 'createNonce').and.returnValue(nonce); + spyOn(flowsDataService, 'createCodeVerifier').and.returnValue( + codeVerifier + ); + spyOn(jwtWindowCryptoService, 'generateCodeChallenge').and.returnValue( + of(codeChallenge) + ); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(null); + + const serviceAsAny = service as any; + + const resultObs$ = serviceAsAny.createUrlCodeFlowAuthorize(config); + + resultObs$.subscribe((result: any) => { + expect(result).toBe(''); + }); + })); + }); + + describe('getEndSessionUrl', () => { + it('returns null if no config given', () => { + const value = service.getEndSessionUrl(null); + + expect(value).toBeNull(); + }); + + it('create URL when all parameters given', () => { + //Arrange + const config = { + postLogoutRedirectUri: 'https://localhost:44386/Unauthorized', + } as OpenIdConfiguration; + + spyOn(storagePersistenceService, 'getIdToken').and.returnValue('mytoken'); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + endSessionEndpoint: 'http://example', + }); + + // Act + const value = service.getEndSessionUrl(config); + + // Assert + const expectValue = + 'http://example?id_token_hint=mytoken&post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44386%2FUnauthorized'; + + expect(value).toEqual(expectValue); + }); + + it('create URL when all parameters given but no idTokenHint', () => { + // Arrange + const config = { + postLogoutRedirectUri: 'https://localhost:44386/Unauthorized', + } as OpenIdConfiguration; + + spyOn(storagePersistenceService, 'getIdToken').and.returnValue(''); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + endSessionEndpoint: 'http://example', + }); + + // Act + const value = service.getEndSessionUrl(config); + + // Assert + const expectValue = + 'http://example?post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44386%2FUnauthorized'; + + expect(value).toEqual(expectValue); + }); + + it('create URL when all parameters and customParamsEndSession given', () => { + // Arrange + const config = { + postLogoutRedirectUri: 'https://localhost:44386/Unauthorized', + } as OpenIdConfiguration; + + spyOn(storagePersistenceService, 'getIdToken').and.returnValue('mytoken'); + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + endSessionEndpoint: 'http://example', + }); + + // Act + const value = service.getEndSessionUrl(config, { param: 'to-add' }); + + // Assert + const expectValue = + 'http://example?id_token_hint=mytoken&post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44386%2FUnauthorized¶m=to-add'; + + expect(value).toEqual(expectValue); + }); + + it('with azure-ad-b2c policy parameter', () => { + // Arrange + const config = { + postLogoutRedirectUri: 'https://localhost:44386/Unauthorized', + } as OpenIdConfiguration; + const endSessionEndpoint = + 'https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?p=b2c_1_sign_in'; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + endSessionEndpoint, + }); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue( + 'UzI1NiIsImtpZCI6Il' + ); + + // Act + const value = service.getEndSessionUrl(config); + + // Assert + const expectValue = + 'https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?p=b2c_1_sign_in' + + '&id_token_hint=UzI1NiIsImtpZCI6Il' + + '&post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44386%2FUnauthorized'; + + expect(value).toEqual(expectValue); + }); + + it('create URL without postLogoutRedirectUri when not given', () => { + const config = { + postLogoutRedirectUri: '', + } as OpenIdConfiguration; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + endSessionEndpoint: 'http://example', + }); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue('mytoken'); + + // Act + const value = service.getEndSessionUrl(config); + + // Assert + const expectValue = 'http://example?id_token_hint=mytoken'; + + expect(value).toEqual(expectValue); + }); + + it('returns null if no wellknownEndpoints.endSessionEndpoint given', () => { + // Arrange + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', {}) + .and.returnValue({ + endSessionEndpoint: null, + }); + spyOn(storagePersistenceService, 'getIdToken').and.returnValue('mytoken'); + + // Act + const value = service.getEndSessionUrl({}); + + // Assert + expect(value).toEqual(null); + }); + + it('returns auth0 format URL if authority ends with .auth0', () => { + // Arrange + const config = { + authority: 'something.auth0.com', + clientId: 'someClientId', + postLogoutRedirectUri: 'https://localhost:1234/unauthorized', + }; + + // Act + const value = service.getEndSessionUrl(config); + + // Assert + const expectValue = `something.auth0.com/v2/logout?client_id=someClientId&returnTo=https://localhost:1234/unauthorized`; + + expect(value).toEqual(expectValue); + }); + }); + + describe('getAuthorizeParUrl', () => { + it('returns null if authWellKnownEndPoints is undefined', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue(null); + + const result = service.getAuthorizeParUrl('', { configId: 'configId1' }); + + expect(result).toBe(null); + }); + + it('returns null if authWellKnownEndPoints-authorizationEndpoint is undefined', () => { + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', { configId: 'configId1' }) + .and.returnValue({ + notAuthorizationEndpoint: 'anything', + }); + + const result = service.getAuthorizeParUrl('', { configId: 'configId1' }); + + expect(result).toBe(null); + }); + + it('returns null if configurationProvider.openIDConfiguration has no clientId', () => { + const config = { clientId: '' } as OpenIdConfiguration; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'anything', + }); + + const result = service.getAuthorizeParUrl('', config); + + expect(result).toBe(null); + }); + + it('returns correct URL when everything is given', () => { + const config = { clientId: 'clientId' }; + + spyOn(storagePersistenceService, 'read') + .withArgs('authWellKnownEndPoints', config) + .and.returnValue({ + authorizationEndpoint: 'anything', + }); + + const result = service.getAuthorizeParUrl('passedRequestUri', config); + + expect(result).toBe( + 'anything?request_uri=passedRequestUri&client_id=clientId' + ); + }); + }); +}); diff --git a/src/utils/url/url.service.ts b/src/utils/url/url.service.ts new file mode 100644 index 0000000..a1a71bd --- /dev/null +++ b/src/utils/url/url.service.ts @@ -0,0 +1,893 @@ +import { HttpParams } from '@ngify/http'; +import { inject, Injectable } from 'injection-js'; +import { Observable, of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AuthOptions } from '../../auth-options'; +import { OpenIdConfiguration } from '../../config/openid-configuration'; +import { FlowsDataService } from '../../flows/flows-data.service'; +import { LoggerService } from '../../logging/logger.service'; +import { StoragePersistenceService } from '../../storage/storage-persistence.service'; +import { JwtWindowCryptoService } from '../../validation/jwt-window-crypto.service'; +import { FlowHelper } from '../flowHelper/flow-helper.service'; +import { UriEncoder } from './uri-encoder'; + +const CALLBACK_PARAMS_TO_CHECK = ['code', 'state', 'token', 'id_token']; +const AUTH0_ENDPOINT = 'auth0.com'; + +@Injectable() +export class UrlService { + private readonly loggerService = inject(LoggerService); + + private readonly flowsDataService = inject(FlowsDataService); + + private readonly flowHelper = inject(FlowHelper); + + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly jwtWindowCryptoService = inject(JwtWindowCryptoService); + + getUrlParameter(urlToCheck: string, name: string): string { + if (!urlToCheck) { + return ''; + } + + if (!name) { + return ''; + } + + name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); + const regex = new RegExp('[\\?&#]' + name + '=([^&#]*)'); + const results = regex.exec(urlToCheck); + + return results === null ? '' : decodeURIComponent(results[1]); + } + + getUrlWithoutQueryParameters(url: URL): URL { + const u = new URL(url.toString()); + + const keys = []; + + for (const key of u.searchParams.keys()) { + keys.push(key); + } + + keys.forEach((key) => { + u.searchParams.delete(key); + }); + + return u; + } + + queryParametersExist(expected: URLSearchParams, actual: URLSearchParams): boolean { + let r = true; + + expected.forEach((v, k) => { + if (!actual.has(k)) { + r = false; + } + }); + + return r; + } + + isCallbackFromSts(currentUrl: string, config?: OpenIdConfiguration): boolean { + if (config && config.checkRedirectUrlWhenCheckingIfIsCallback) { + const currentUrlInstance = new URL(currentUrl); + + const redirectUrl = this.getRedirectUrl(config); + + if (!redirectUrl) { + this.loggerService.logError( + config, + `UrlService.isCallbackFromSts: could not get redirectUrl from config, was: `, + redirectUrl + ); + + return false; + } + + const redirectUriUrlInstance = new URL(redirectUrl); + + const redirectUriWithoutQueryParams = this.getUrlWithoutQueryParameters( + redirectUriUrlInstance + ).toString(); + const currentUrlWithoutQueryParams = + this.getUrlWithoutQueryParameters(currentUrlInstance).toString(); + const redirectUriQueryParamsArePresentInCurrentUrl = + this.queryParametersExist( + redirectUriUrlInstance.searchParams, + currentUrlInstance.searchParams + ); + + if ( + redirectUriWithoutQueryParams !== currentUrlWithoutQueryParams || + !redirectUriQueryParamsArePresentInCurrentUrl + ) { + this.loggerService.logDebug( + config, + 'UrlService.isCallbackFromSts: configured redirectUrl does not match with the current url' + ); + + return false; + } + } + + return CALLBACK_PARAMS_TO_CHECK.some( + (x) => !!this.getUrlParameter(currentUrl, x) + ); + } + + getRefreshSessionSilentRenewUrl( + config: OpenIdConfiguration, + customParams?: { [key: string]: string | number | boolean } + ): Observable { + if (this.flowHelper.isCurrentFlowCodeFlow(config)) { + return this.createUrlCodeFlowWithSilentRenew(config, customParams); + } + + return of(this.createUrlImplicitFlowWithSilentRenew(config, customParams)); + } + + getAuthorizeParUrl( + requestUri: string, + configuration: OpenIdConfiguration + ): string | null { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (!authWellKnownEndPoints) { + this.loggerService.logError( + configuration, + 'authWellKnownEndpoints is undefined' + ); + + return null; + } + + const authorizationEndpoint = authWellKnownEndPoints.authorizationEndpoint; + + if (!authorizationEndpoint) { + this.loggerService.logError( + configuration, + `Can not create an authorize URL when authorizationEndpoint is '${authorizationEndpoint}'` + ); + + return null; + } + + const { clientId } = configuration; + + if (!clientId) { + this.loggerService.logError( + configuration, + `getAuthorizeParUrl could not add clientId because it was: `, + clientId + ); + + return null; + } + + const urlParts = authorizationEndpoint.split('?'); + const authorizationUrl = urlParts[0]; + const existingParams = urlParts[1]; + let params = this.createHttpParams(existingParams); + + params = params.set('request_uri', requestUri); + params = params.append('client_id', clientId); + + return `${authorizationUrl}?${params}`; + } + + getAuthorizeUrl( + config: OpenIdConfiguration | null, + authOptions?: AuthOptions + ): Observable { + if (!config) { + return of(null); + } + + if (this.flowHelper.isCurrentFlowCodeFlow(config)) { + return this.createUrlCodeFlowAuthorize(config, authOptions); + } + + return of(this.createUrlImplicitFlowAuthorize(config, authOptions) || ''); + } + + getEndSessionEndpoint(configuration: OpenIdConfiguration): { + url: string; + existingParams: string; + } { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + const endSessionEndpoint = authWellKnownEndPoints?.endSessionEndpoint; + + if (!endSessionEndpoint) { + return { + url: '', + existingParams: '', + }; + } + + const urlParts = endSessionEndpoint.split('?'); + const url = urlParts[0]; + const existingParams = urlParts[1] ?? ''; + + return { + url, + existingParams, + }; + } + + getEndSessionUrl( + configuration: OpenIdConfiguration | null, + customParams?: { [p: string]: string | number | boolean } + ): string | null { + if (!configuration) { + return null; + } + + const idToken = this.storagePersistenceService.getIdToken(configuration); + const { customParamsEndSessionRequest } = configuration; + const mergedParams = { ...customParamsEndSessionRequest, ...customParams }; + + return this.createEndSessionUrl(idToken, configuration, mergedParams); + } + + createRevocationEndpointBodyAccessToken( + token: string, + configuration: OpenIdConfiguration + ): string | null { + const clientId = this.getClientId(configuration); + + if (!clientId) { + return null; + } + + let params = this.createHttpParams(); + + params = params.set('client_id', clientId); + params = params.set('token', token); + params = params.set('token_type_hint', 'access_token'); + + return params.toString(); + } + + createRevocationEndpointBodyRefreshToken( + token: string, + configuration: OpenIdConfiguration + ): string | null { + const clientId = this.getClientId(configuration); + + if (!clientId) { + return null; + } + + let params = this.createHttpParams(); + + params = params.set('client_id', clientId); + params = params.set('token', token); + params = params.set('token_type_hint', 'refresh_token'); + + return params.toString(); + } + + getRevocationEndpointUrl(configuration: OpenIdConfiguration): string | null { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + const revocationEndpoint = authWellKnownEndPoints?.revocationEndpoint; + + if (!revocationEndpoint) { + return null; + } + + const urlParts = revocationEndpoint.split('?'); + + return urlParts[0]; + } + + createBodyForCodeFlowCodeRequest( + code: string, + configuration: OpenIdConfiguration, + customTokenParams?: { [p: string]: string | number | boolean } + ): string | null { + const clientId = this.getClientId(configuration); + + if (!clientId) { + return null; + } + + let params = this.createHttpParams(); + + params = params.set('grant_type', 'authorization_code'); + params = params.set('client_id', clientId); + + if (!configuration.disablePkce) { + const codeVerifier = this.flowsDataService.getCodeVerifier(configuration); + + if (!codeVerifier) { + this.loggerService.logError( + configuration, + `CodeVerifier is not set `, + codeVerifier + ); + + return null; + } + + params = params.set('code_verifier', codeVerifier); + } + + params = params.set('code', code); + + if (customTokenParams) { + params = this.appendCustomParams({ ...customTokenParams }, params); + } + + const silentRenewUrl = this.getSilentRenewUrl(configuration); + + if ( + this.flowsDataService.isSilentRenewRunning(configuration) && + silentRenewUrl + ) { + params = params.set('redirect_uri', silentRenewUrl); + + return params.toString(); + } + + const redirectUrl = this.getRedirectUrl(configuration); + + if (!redirectUrl) { + return null; + } + + params = params.set('redirect_uri', redirectUrl); + + return params.toString(); + } + + createBodyForCodeFlowRefreshTokensRequest( + refreshToken: string, + configuration: OpenIdConfiguration, + customParamsRefresh?: { [key: string]: string | number | boolean } + ): string | null { + const clientId = this.getClientId(configuration); + + if (!clientId) { + return null; + } + + let params = this.createHttpParams(); + + params = params.set('grant_type', 'refresh_token'); + params = params.set('client_id', clientId); + params = params.set('refresh_token', refreshToken); + + if (customParamsRefresh) { + params = this.appendCustomParams({ ...customParamsRefresh }, params); + } + + return params.toString(); + } + + createBodyForParCodeFlowRequest( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): Observable { + const redirectUrl = this.getRedirectUrl(configuration, authOptions); + + if (!redirectUrl) { + return of(null); + } + + const state = + this.flowsDataService.getExistingOrCreateAuthStateControl(configuration); + const nonce = this.flowsDataService.createNonce(configuration); + + this.loggerService.logDebug( + configuration, + 'Authorize created. adding myautostate: ' + state + ); + + // code_challenge with "S256" + const codeVerifier = + this.flowsDataService.createCodeVerifier(configuration); + + return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier).pipe( + map((codeChallenge: string) => { + const { + clientId, + responseType, + scope, + hdParam, + customParamsAuthRequest, + } = configuration; + let params = this.createHttpParams(''); + + params = params.set('client_id', clientId ?? ''); + params = params.append('redirect_uri', redirectUrl); + params = params.append('response_type', responseType ?? ''); + params = params.append('scope', scope ?? ''); + params = params.append('nonce', nonce); + params = params.append('state', state); + params = params.append('code_challenge', codeChallenge); + params = params.append('code_challenge_method', 'S256'); + + if (hdParam) { + params = params.append('hd', hdParam); + } + + if (customParamsAuthRequest) { + params = this.appendCustomParams( + { ...customParamsAuthRequest }, + params + ); + } + + if (authOptions?.customParams) { + params = this.appendCustomParams( + { ...authOptions.customParams }, + params + ); + } + + return params.toString(); + }) + ); + } + + getPostLogoutRedirectUrl(configuration: OpenIdConfiguration): string | null { + const { postLogoutRedirectUri } = configuration; + + if (!postLogoutRedirectUri) { + this.loggerService.logError( + configuration, + `could not get postLogoutRedirectUri, was: `, + postLogoutRedirectUri + ); + + return null; + } + + return postLogoutRedirectUri; + } + + private createEndSessionUrl( + idTokenHint: string, + configuration: OpenIdConfiguration, + customParamsEndSession?: { [p: string]: string | number | boolean } + ): string | null { + // Auth0 needs a special logout url + // See https://auth0.com/docs/api/authentication#logout + + if (this.isAuth0Endpoint(configuration)) { + return this.composeAuth0Endpoint(configuration); + } + + const { url, existingParams } = this.getEndSessionEndpoint(configuration); + + if (!url) { + return null; + } + + let params = this.createHttpParams(existingParams); + + if (!!idTokenHint) { + params = params.set('id_token_hint', idTokenHint); + } + + const postLogoutRedirectUri = this.getPostLogoutRedirectUrl(configuration); + + if (postLogoutRedirectUri) { + params = params.append('post_logout_redirect_uri', postLogoutRedirectUri); + } + + if (customParamsEndSession) { + params = this.appendCustomParams({ ...customParamsEndSession }, params); + } + + return `${url}?${params}`; + } + + private createAuthorizeUrl( + codeChallenge: string, + redirectUrl: string, + nonce: string, + state: string, + configuration: OpenIdConfiguration, + prompt?: string, + customRequestParams?: { [key: string]: string | number | boolean } + ): string { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + const authorizationEndpoint = authWellKnownEndPoints?.authorizationEndpoint; + + if (!authorizationEndpoint) { + this.loggerService.logError( + configuration, + `Can not create an authorize URL when authorizationEndpoint is '${authorizationEndpoint}'` + ); + + return ''; + } + + const { clientId, responseType, scope, hdParam, customParamsAuthRequest } = + configuration; + + if (!clientId) { + this.loggerService.logError( + configuration, + `createAuthorizeUrl could not add clientId because it was: `, + clientId + ); + + return ''; + } + + if (!responseType) { + this.loggerService.logError( + configuration, + `createAuthorizeUrl could not add responseType because it was: `, + responseType + ); + + return ''; + } + + if (!scope) { + this.loggerService.logError( + configuration, + `createAuthorizeUrl could not add scope because it was: `, + scope + ); + + return ''; + } + + const urlParts = authorizationEndpoint.split('?'); + const authorizationUrl = urlParts[0]; + const existingParams = urlParts[1]; + let params = this.createHttpParams(existingParams); + + params = params.set('client_id', clientId); + params = params.append('redirect_uri', redirectUrl); + params = params.append('response_type', responseType); + params = params.append('scope', scope); + params = params.append('nonce', nonce); + params = params.append('state', state); + + if (this.flowHelper.isCurrentFlowCodeFlow(configuration)) { + params = params.append('code_challenge', codeChallenge); + params = params.append('code_challenge_method', 'S256'); + } + + const mergedParams = { ...customParamsAuthRequest, ...customRequestParams }; + + if (Object.keys(mergedParams).length > 0) { + params = this.appendCustomParams({ ...mergedParams }, params); + } + + if (prompt) { + params = this.overWriteParam(params, 'prompt', prompt); + } + + if (hdParam) { + params = params.append('hd', hdParam); + } + + return `${authorizationUrl}?${params}`; + } + + private createUrlImplicitFlowWithSilentRenew( + configuration: OpenIdConfiguration, + customParams?: { [key: string]: string | number | boolean } + ): string | null { + const state = + this.flowsDataService.getExistingOrCreateAuthStateControl(configuration); + const nonce = this.flowsDataService.createNonce(configuration); + const silentRenewUrl = this.getSilentRenewUrl(configuration); + + if (!silentRenewUrl) { + return null; + } + + this.loggerService.logDebug( + configuration, + 'RefreshSession created. adding myautostate: ', + state + ); + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (authWellKnownEndPoints) { + return this.createAuthorizeUrl( + '', + silentRenewUrl, + nonce, + state, + configuration, + 'none', + customParams + ); + } + + this.loggerService.logError( + configuration, + 'authWellKnownEndpoints is undefined' + ); + + return null; + } + + private createUrlCodeFlowWithSilentRenew( + configuration: OpenIdConfiguration, + customParams?: { [key: string]: string | number | boolean } + ): Observable { + const state = + this.flowsDataService.getExistingOrCreateAuthStateControl(configuration); + const nonce = this.flowsDataService.createNonce(configuration); + + this.loggerService.logDebug( + configuration, + 'RefreshSession created. adding myautostate: ' + state + ); + + // code_challenge with "S256" + const codeVerifier = + this.flowsDataService.createCodeVerifier(configuration); + + return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier).pipe( + map((codeChallenge: string) => { + const silentRenewUrl = this.getSilentRenewUrl(configuration); + + if (!silentRenewUrl) { + return ''; + } + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (authWellKnownEndPoints) { + return this.createAuthorizeUrl( + codeChallenge, + silentRenewUrl, + nonce, + state, + configuration, + 'none', + customParams + ); + } + + this.loggerService.logWarning( + configuration, + 'authWellKnownEndpoints is undefined' + ); + + return ''; + }) + ); + } + + private createUrlImplicitFlowAuthorize( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): string | null { + const state = + this.flowsDataService.getExistingOrCreateAuthStateControl(configuration); + const nonce = this.flowsDataService.createNonce(configuration); + + this.loggerService.logDebug( + configuration, + 'Authorize created. adding myautostate: ' + state + ); + + const redirectUrl = this.getRedirectUrl(configuration, authOptions); + + if (!redirectUrl) { + return null; + } + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (authWellKnownEndPoints) { + const { customParams } = authOptions || {}; + + return this.createAuthorizeUrl( + '', + redirectUrl, + nonce, + state, + configuration, + '', + customParams + ); + } + + this.loggerService.logError( + configuration, + 'authWellKnownEndpoints is undefined' + ); + + return null; + } + + private createUrlCodeFlowAuthorize( + config: OpenIdConfiguration, + authOptions?: AuthOptions + ): Observable { + const state = + this.flowsDataService.getExistingOrCreateAuthStateControl(config); + const nonce = this.flowsDataService.createNonce(config); + + this.loggerService.logDebug( + config, + 'Authorize created. adding myautostate: ' + state + ); + + const redirectUrl = this.getRedirectUrl(config, authOptions); + + if (!redirectUrl) { + return of(null); + } + + return this.getCodeChallenge(config).pipe( + map((codeChallenge: string) => { + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + config + ); + + if (authWellKnownEndPoints) { + const { customParams } = authOptions || {}; + + return this.createAuthorizeUrl( + codeChallenge, + redirectUrl, + nonce, + state, + config, + '', + customParams + ); + } + + this.loggerService.logError( + config, + 'authWellKnownEndpoints is undefined' + ); + + return ''; + }) + ); + } + + private getCodeChallenge(config: OpenIdConfiguration): Observable { + if (config.disablePkce) { + return of(''); + } + + // code_challenge with "S256" + const codeVerifier = this.flowsDataService.createCodeVerifier(config); + + return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier); + } + + private getRedirectUrl( + configuration: OpenIdConfiguration, + authOptions?: AuthOptions + ): string | null { + let { redirectUrl } = configuration; + + if (authOptions?.redirectUrl) { + // override by redirectUrl from authOptions + redirectUrl = authOptions.redirectUrl; + } + + if (!redirectUrl) { + this.loggerService.logError( + configuration, + `could not get redirectUrl, was: `, + redirectUrl + ); + + return null; + } + + return redirectUrl; + } + + private getSilentRenewUrl(configuration: OpenIdConfiguration): string | null { + const { silentRenewUrl } = configuration; + + if (!silentRenewUrl) { + this.loggerService.logError( + configuration, + `could not get silentRenewUrl, was: `, + silentRenewUrl + ); + + return null; + } + + return silentRenewUrl; + } + + private getClientId(configuration: OpenIdConfiguration): string | null { + const { clientId } = configuration; + + if (!clientId) { + this.loggerService.logError( + configuration, + `could not get clientId, was: `, + clientId + ); + + return null; + } + + return clientId; + } + + private appendCustomParams( + customParams: { [key: string]: string | number | boolean }, + params: HttpParams + ): HttpParams { + for (const [key, value] of Object.entries({ ...customParams })) { + params = params.append(key, value.toString()); + } + + return params; + } + + private overWriteParam( + params: HttpParams, + key: string, + value: string | number | boolean + ): HttpParams { + return params.set(key, value); + } + + private createHttpParams(existingParams?: string): HttpParams { + existingParams = existingParams ?? ''; + + return new HttpParams(existingParams, { + encoder: new UriEncoder(), + }); + } + + private isAuth0Endpoint(configuration: OpenIdConfiguration): boolean { + const { authority, useCustomAuth0Domain } = configuration; + + if (!authority) { + return false; + } + + return authority.endsWith(AUTH0_ENDPOINT) || Boolean(useCustomAuth0Domain); + } + + private composeAuth0Endpoint(configuration: OpenIdConfiguration): string { + // format: https://YOUR_DOMAIN/v2/logout?client_id=YOUR_CLIENT_ID&returnTo=LOGOUT_URL + const { authority, clientId } = configuration; + const postLogoutRedirectUrl = this.getPostLogoutRedirectUrl(configuration); + + return `${authority}/v2/logout?client_id=${clientId}&returnTo=${postLogoutRedirectUrl}`; + } +} diff --git a/src/validation/jwk-window-crypto.service.spec.ts b/src/validation/jwk-window-crypto.service.spec.ts new file mode 100644 index 0000000..f2737b9 --- /dev/null +++ b/src/validation/jwk-window-crypto.service.spec.ts @@ -0,0 +1,92 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { base64url } from 'rfc4648'; +import { CryptoService } from '../utils/crypto/crypto.service'; +import { JwkWindowCryptoService } from './jwk-window-crypto.service'; + +describe('JwkWindowCryptoService', () => { + let service: JwkWindowCryptoService; + const alg = { + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-256', + }; + const key1 = { + kty: 'RSA', + use: 'sig', + kid: '5626CE6A8F4F5FCD79C6642345282CA76D337548RS256', + x5t: 'VibOao9PX815xmQjRSgsp20zdUg', + e: 'AQAB', + n: 'uu3-HK4pLRHJHoEBzFhM516RWx6nybG5yQjH4NbKjfGQ8dtKy1BcGjqfMaEKF8KOK44NbAx7rtBKCO9EKNYkeFvcUzBzVeuu4jWG61XYdTekgv-Dh_Fj8245GocEkbvBbFW6cw-_N59JWqUuiCvb-EOfhcuubUcr44a0AQyNccYNpcXGRcMKy7_L1YhO0AMULqLDDVLFj5glh4TcJ2N5VnJedq1-_JKOxPqD1ni26UOQoWrW16G29KZ1_4Xxf2jX8TAq-4RJEHccdzgZVIO4F5B4MucMZGq8_jMCpiTUsUGDOAMA_AmjxIRHOtO5n6Pt0wofrKoAVhGh2sCTtaQf2Q', + x5c: [ + 'MIIDPzCCAiegAwIBAgIQF+HRVxLHII9IlOoQk6BxcjANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDDBBzdHMuZGV2LmNlcnQuY29tMB4XDTE5MDIyMDEwMTA0M1oXDTM5MDIyMDEwMTkyOVowGzEZMBcGA1UEAwwQc3RzLmRldi5jZXJ0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrt/hyuKS0RyR6BAcxYTOdekVsep8mxuckIx+DWyo3xkPHbSstQXBo6nzGhChfCjiuODWwMe67QSgjvRCjWJHhb3FMwc1XrruI1hutV2HU3pIL/g4fxY/NuORqHBJG7wWxVunMPvzefSVqlLogr2/hDn4XLrm1HK+OGtAEMjXHGDaXFxkXDCsu/y9WITtADFC6iww1SxY+YJYeE3CdjeVZyXnatfvySjsT6g9Z4tulDkKFq1tehtvSmdf+F8X9o1/EwKvuESRB3HHc4GVSDuBeQeDLnDGRqvP4zAqYk1LFBgzgDAPwJo8SERzrTuZ+j7dMKH6yqAFYRodrAk7WkH9kCAwEAAaN/MH0wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAtBgNVHREEJjAkghBzdHMuZGV2LmNlcnQuY29tghBzdHMuZGV2LmNlcnQuY29tMB0GA1UdDgQWBBQuyHxWP3je6jGMOmOiY+hz47r36jANBgkqhkiG9w0BAQsFAAOCAQEAKEHG7Ga6nb2XiHXDc69KsIJwbO80+LE8HVJojvITILz3juN6/FmK0HmogjU6cYST7m1MyxsVhQQNwJASZ6haBNuBbNzBXfyyfb4kr62t1oDLNwhctHaHaM4sJSf/xIw+YO+Qf7BtfRAVsbM05+QXIi2LycGrzELiXu7KFM0E1+T8UOZ2Qyv7OlCb/pWkYuDgE4w97ox0MhDpvgluxZLpRanOLUCVGrfFaij7gRAhjYPUY3vAEcD8JcFBz1XijU8ozRO6FaG4qg8/JCe+VgoWsMDj3sKB9g0ob6KCyG9L2bdk99PGgvXDQvMYCpkpZzG3XsxOINPd5p0gc209ZOoxTg==', + ], + alg: 'RS256', + } as JsonWebKey; + const key2 = { + kty: 'RSA', + n: 'wq0vJv4Xl2xSQTN75_N4JeFHlHH80PytypJqyNrhWIp1P9Ur4-5QSiS8BI8PYSh0dQy4NMoj9YMRcyge3y81uCCwxouePiAGc0xPy6QkAOiinvV3KJEMtbppicOvZEzMXb3EqRM-9Twxbp2hhBAPSAhyL79Rwy4JuIQ6imaqL0NIEGv8_BOe_twMPOLGTJhepDO6kDs6O0qlLgPRHQVuKAz3afVby0C2myDLpo5YaI66arU9VXXGQtIp8MhBY9KbsGaYskejSWhSBOcwdtYMEo5rXWGGVnrHiSqq8mm-sVXLQBe5xPFBs4IQ_Gz4nspr05LEEbsHSwFyGq5D77XPxGUPDCq5ZVvON0yBizaHcJ-KA0Lw6uXtOH9-YyVGuaBynkrQEo3pP2iy1uWt-TiQPb8PMsCAdWZP-6R0QKHtjds9HmjIkgFTJSTIeETjNck_bB4ud79gZT-INikjPFTTeyQYk2jqxEJanVe3k0i_1vpskRpknJ7F2vTL45LAQkjWvczjWmHxGA5D4-1msuylXpY8Y4WxnUq6dRTEN29IRVCil9Mfp6JMsquFGTvJO0-Ffl0_suMZZl3uXNt23E9vGreByalWHivYmfpIor5Q5JaFKekRVV-U1KDBaeQQaHp_VqliUKImdUE9-GXNOIaBMjRvfy0nxsRe_q_dD6jc_GU', + e: 'AQAB', + } as JsonWebKey; + const key3 = { + kty: 'RSA', + n: 'u1SU1LfVLPHCozMxH2Mo4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0_IzW7yWR7QkrmBL7jTKEn5u-qKhbwKfBstIs-bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyehkd3qqGElvW_VDL5AaWTg0nLVkjRo9z-40RQzuVaE8AkAFmxZzow3x-VJYKdjykkJ0iT9wCS0DRTXu269V264Vf_3jvredZiKRkgwlL9xNAwxXFg0x_XFw005UWVRIkdgcKWTjpBP2dPwVZ4WWC-9aGVd-Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbcmw', + e: 'AQAB', + alg: 'RS256', + kid: 'boop', + use: 'sig', + } as JsonWebKey; + const keys: JsonWebKey[] = [key1, key2, key3]; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [JwkWindowCryptoService, CryptoService], + }); + }); + + beforeEach(waitForAsync(() => { + service = TestBed.inject(JwkWindowCryptoService); + })); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('importVerificationKey', () => { + it('returns instance of CryptoKey when valid input is provided', (done) => { + const promises = keys.map((key) => + service.importVerificationKey(key, alg) + ); + + Promise.all(promises).then((values) => { + values.forEach((value) => { + expect(value).toBeInstanceOf(CryptoKey); + }); + done(); + }); + }); + }); + + describe('verifyKey', () => { + it('returns true when valid input is provided', (done) => { + const headerAndPayloadString = + 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0'; + const signatureString = + 'NHVaYe26MbtOYhSKkoKYdFVomg4i8ZJd8_-RU8VNbftc4TSMb4bXP3l3YlNWACwyXPGffz5aXHc6lty1Y2t4SWRqGteragsVdZufDn5BlnJl9pdR_kdVFUsra2rWKEofkZeIC4yWytE58sMIihvo9H1ScmmVwBcQP6XETqYd0aSHp1gOa9RdUPDvoXQ5oqygTqVtxaDr6wUFKrKItgBMzWIdNZ6y7O9E0DhEPTbE9rfBo6KTFsHAZnMg4k68CDp2woYIaXbmYTWcvbzIuHO7_37GT79XdIwkm95QJ7hYC9RiwrV7mesbY4PAahERJawntho0my942XheVLmGwLMBkQ'; + const signature: Uint8Array = base64url.parse(signatureString, { + loose: true, + }); + + service + .importVerificationKey(key3, alg) + .then((c) => + service.verifyKey(alg, c, signature, headerAndPayloadString) + ) + .then((value) => { + expect(value).toEqual(true); + }) + .finally(() => { + done(); + }); + }); + }); +}); diff --git a/src/validation/jwk-window-crypto.service.ts b/src/validation/jwk-window-crypto.service.ts new file mode 100644 index 0000000..ffb76d6 --- /dev/null +++ b/src/validation/jwk-window-crypto.service.ts @@ -0,0 +1,38 @@ +import { inject, Injectable } from 'injection-js'; +import { CryptoService } from '../utils/crypto/crypto.service'; + +@Injectable() +export class JwkWindowCryptoService { + private readonly cryptoService = inject(CryptoService); + + importVerificationKey( + key: JsonWebKey, + algorithm: + | AlgorithmIdentifier + | RsaHashedImportParams + | EcKeyImportParams + | HmacImportParams + | AesKeyAlgorithm + | null + ): Promise { + return this.cryptoService + .getCrypto() + .subtle.importKey('jwk', key, algorithm, false, ['verify']); + } + + verifyKey( + verifyAlgorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | null, + cryptoKey: CryptoKey, + signature: BufferSource, + signingInput: string + ): Promise { + return this.cryptoService + .getCrypto() + .subtle.verify( + verifyAlgorithm, + cryptoKey, + signature, + new TextEncoder().encode(signingInput) + ); + } +} diff --git a/src/validation/jwt-window-crypto.service.spec.ts b/src/validation/jwt-window-crypto.service.spec.ts new file mode 100644 index 0000000..ecc3f53 --- /dev/null +++ b/src/validation/jwt-window-crypto.service.spec.ts @@ -0,0 +1,35 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { CryptoService } from '../utils/crypto/crypto.service'; +import { JwtWindowCryptoService } from './jwt-window-crypto.service'; + +describe('JwtWindowCryptoService', () => { + let service: JwtWindowCryptoService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [JwtWindowCryptoService, CryptoService], + }); + }); + + beforeEach(() => { + service = TestBed.inject(JwtWindowCryptoService); + }); + + it('should create', () => { + expect(service).toBeTruthy(); + }); + + describe('generateCodeChallenge', () => { + it('returns good result with correct codeVerifier', waitForAsync(() => { + const outcome = 'R2TWD45Vtcf_kfAqjuE3LMSRF3JDE5fsFndnn6-a0nQ'; + const observable = service.generateCodeChallenge( + '44445543344242132145455aaabbdc3b4' + ); + + observable.subscribe((value) => { + expect(value).toBe(outcome); + }); + })); + }); +}); diff --git a/src/validation/jwt-window-crypto.service.ts b/src/validation/jwt-window-crypto.service.ts new file mode 100644 index 0000000..34a6abf --- /dev/null +++ b/src/validation/jwt-window-crypto.service.ts @@ -0,0 +1,63 @@ +import { inject, Injectable } from 'injection-js'; +import { from, Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { CryptoService } from '../utils/crypto/crypto.service'; + +@Injectable() +export class JwtWindowCryptoService { + private readonly cryptoService = inject(CryptoService); + + generateCodeChallenge(codeVerifier: string): Observable { + return this.calcHash(codeVerifier).pipe( + map((challengeRaw: string) => this.base64UrlEncode(challengeRaw)) + ); + } + + generateAtHash(accessToken: string, algorithm: string): Observable { + return this.calcHash(accessToken, algorithm).pipe( + map((tokenHash) => { + const substr: string = tokenHash.substr(0, tokenHash.length / 2); + const tokenHashBase64: string = btoa(substr); + + return tokenHashBase64 + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=/g, ''); + }) + ); + } + + private calcHash( + valueToHash: string, + algorithm = 'SHA-256' + ): Observable { + const msgBuffer: Uint8Array = new TextEncoder().encode(valueToHash); + + return from( + this.cryptoService.getCrypto().subtle.digest(algorithm, msgBuffer) + ).pipe( + map((hashBuffer: unknown) => { + const buffer = hashBuffer as ArrayBuffer; + const hashArray: number[] = Array.from(new Uint8Array(buffer)); + + return this.toHashString(hashArray); + }) + ); + } + + private toHashString(byteArray: number[]): string { + let result = ''; + + for (const e of byteArray) { + result += String.fromCharCode(e); + } + + return result; + } + + private base64UrlEncode(str: string): string { + const base64: string = btoa(str); + + return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); + } +} diff --git a/src/validation/jwtkeys.ts b/src/validation/jwtkeys.ts new file mode 100644 index 0000000..08fde69 --- /dev/null +++ b/src/validation/jwtkeys.ts @@ -0,0 +1,13 @@ +export interface JwtKeys { + keys: JwtKey[]; +} + +export interface JwtKey { + kty: string; + use: string; + kid: string; + x5t: string; + e: string; + n: string; + x5c: any[]; +} diff --git a/src/validation/state-validation-result.ts b/src/validation/state-validation-result.ts new file mode 100644 index 0000000..224cb39 --- /dev/null +++ b/src/validation/state-validation-result.ts @@ -0,0 +1,13 @@ +import { ValidationResult } from './validation-result'; + +export class StateValidationResult { + constructor( + public accessToken = '', + public idToken = '', + public authResponseIsValid = false, + public decodedIdToken: any = { + at_hash: '', + }, + public state: ValidationResult = ValidationResult.NotSet + ) {} +} diff --git a/src/validation/state-validation.service.spec.ts b/src/validation/state-validation.service.spec.ts new file mode 100644 index 0000000..3314271 --- /dev/null +++ b/src/validation/state-validation.service.spec.ts @@ -0,0 +1,2155 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { AuthWellKnownEndpoints } from '../config/auth-well-known/auth-well-known-endpoints'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { LogLevel } from '../logging/log-level'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { EqualityService } from '../utils/equality/equality.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { StateValidationService } from './state-validation.service'; +import { TokenValidationService } from './token-validation.service'; +import { ValidationResult } from './validation-result'; + +describe('State Validation Service', () => { + let stateValidationService: StateValidationService; + let tokenValidationService: TokenValidationService; + let tokenHelperService: TokenHelperService; + let loggerService: LoggerService; + let config: OpenIdConfiguration; + let authWellKnownEndpoints: AuthWellKnownEndpoints; + let storagePersistenceService: StoragePersistenceService; + let flowHelper: FlowHelper; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + mockProvider(StoragePersistenceService), + mockProvider(TokenValidationService), + mockProvider(LoggerService), + TokenHelperService, + EqualityService, + FlowHelper, + ], + }); + }); + + beforeEach(() => { + stateValidationService = TestBed.inject(StateValidationService); + tokenValidationService = TestBed.inject(TokenValidationService); + tokenHelperService = TestBed.inject(TokenHelperService); + loggerService = TestBed.inject(LoggerService); + storagePersistenceService = TestBed.inject(StoragePersistenceService); + flowHelper = TestBed.inject(FlowHelper); + }); + + beforeEach(() => { + config = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'id_token token', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + }; + + authWellKnownEndpoints = { + issuer: 'https://localhost:44363', + jwksUri: 'https://localhost:44363/well-known/openid-configuration/jwks', + authorizationEndpoint: 'https://localhost:44363/connect/authorize', + tokenEndpoint: 'https://localhost:44363/connect/token', + userInfoEndpoint: 'https://localhost:44363/connect/userinfo', + endSessionEndpoint: 'https://localhost:44363/connect/endsession', + checkSessionIframe: 'https://localhost:44363/connect/checksession', + revocationEndpoint: 'https://localhost:44363/connect/revocation', + introspectionEndpoint: 'https://localhost:44363/connect/introspect', + }; + }); + + it('should create', () => { + expect(stateValidationService).toBeTruthy(); + expect(tokenValidationService).toBeTruthy(); + }); + + describe('isIdTokenAfterRefreshTokenRequestValid', () => { + it('validate refresh good ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: true, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206486, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(true); + }); + + it('validate refresh invalid iss ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: true, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.ch/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206486, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(false); + }); + + it('validate refresh invalid sub ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: true, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f7', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206486, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(false); + }); + + it('validate refresh invalid auth_time ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206488, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(false); + }); + + it('validate refresh good full', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206486, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(true); + }); + + it('validate refresh good no existing id_token', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: null, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206486, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(true); + }); + + it('validate refresh invalid aud ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206488, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(false); + }); + + it('validate refresh invalid azp ', () => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJpc3MiOiJodHRwczovL2RhbWllbmJvZC5iMmNsb2dpbi5jb20vYTA5NThmNDUtMTk1Yi00MDM2LTkyNTktZGUyZjdlNTk0ZGI2L3YyLjAvIiwiZXhwIjoxNTg5MjEwMDg2LCJuYmYiOjE1ODkyMDY0ODYsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsIm5hbWUiOiJkYW1pZW5ib2QiLCJlbWFpbHMiOlsiZGFtaWVuQGRhbWllbmJvZC5vbm1pY3Jvc29mdC5jb20iXSwidGZwIjoiQjJDXzFfYjJjcG9saWN5ZGFtaWVuIiwibm9uY2UiOiIwMDdjNDE1M2I2YTA1MTdjMGU0OTc0NzZmYjI0OTk0OGVjNWNsT3ZRUSIsInNjcCI6ImRlbW8ucmVhZCIsImF6cCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsInZlciI6IjEuMCIsImlhdCI6MTU4OTIwNjQ4Nn0.Zyg8GAsyj8_ljdheJ57oQ8ldZMon4nLs1VCkBnIon2cXGrXlTA_fYP_Ypf5x5OZcCg-wXdo9RttsLRD69v1cnd5eUc9crzkJ18BruRdhoVQdlrGuakwKujozY2-EU8KNH64qSDpPOqQ9m4jdzGAOkY0wWitOlvYoNZHDzDS4ZIWn8W5H2nwAbf8LMAdXqy41YaIBF4lo3ZaKoUKQqCwIG_0aLvRQcmiwkEoQ5-EUb_hdOejTIbIT5PryyqMnvJYgyrKTf1VY060YpETH19PMosNriwPrPesJhsruphqzaJexg0Pt09ILoMHJhebkON-oPjXLjDOGLfnRTPp6oP_Drg'; + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const refreshTokenData = + 'eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..Gn8_Hs0IAsJm7Tlw.4dvuowpuUHz2RifIINXM5mBbiOorKgAWZapLdohY9LYd4yxAr-K2E8PFCi_lmbTfY0nxXkRqL9S_JnJKP_2Sd_R0g3PC5weu9XxGIT-oWATtkVX4KDWlAsN0-xWUosulT4LEbFygC3bA6B5Ch2BgN_zZ5L-aJjwE1JkE55tQCDgT2tS6uRQjvh1U3ddWgYEsmCqbWQnwbMPPkxA-PvXXTtUKqXTzAo0T9tLBXrSaXurq0Y-visy036Sy9Y7f-duiTLMJ8WKw_XYz3uzsj7Y0SV2A3m2rJNs3HjPBRUOyyWpdhmjo3VAes1bc8nZuZHsP4S2HSe7hRoOxYkWfGhIBvI8FT3dBZKfttAT64fsR-fQtQ4ia0z12SsLoCJhF1VRf3NU1-Lc2raP0kvN7HOGQFuVPkjmWOqKKoy4at7PAvC_sWHOND7QkmYkFyfQvGcNmt_lA10VZlr_cOeuiNCTPUHZHi-pv7nsefxVoPYGJPztGvIJ_daAUigXMZGARTTIhCt84PzPEdPMlCSI3GuNxQoD95rhvSyZP8SBQ5NIs_qwxYMAfzXgJP8aFK-ZHd8ZQfm1Rg79mO0LH1GcQzIhc4pC4PsvcSm6I6Jo1ZeEw5pRQQWf59asPyORG-2qfnMvZB1hGCZU7J78lAcse6sXCtBlQDLe9Th5Goibn.XdCGzjyrmgKzJktSPSDH0g'; + + const configRefresh = { + authority: 'https://localhost:44363', + redirectUrl: 'https://localhost:44363', + clientId: 'singleapp', + responseType: 'icode', + scope: 'dataEventRecords openid', + postLogoutRedirectUri: 'https://localhost:44363/Unauthorized', + startCheckSession: false, + silentRenew: true, + silentRenewUrl: 'https://localhost:44363/silent-renew.html', + postLoginRoute: '/dataeventrecords', + forbiddenRoute: '/Forbidden', + unauthorizedRoute: '/Unauthorized', + logLevel: LogLevel.Debug, + maxIdTokenIatOffsetAllowedInSeconds: 10, + useRefreshToken: true, + ignoreNonceAfterRefresh: true, + disableRefreshIdTokenAuthTimeValidation: false, + triggerRefreshWhenIdTokenExpired: true, + }; + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: refreshTokenData, + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: idToken, + authResult: { + access_token: accessToken, + id_token: idToken, + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const decodedIdToken = { + exp: 1589210086, + nbf: 1589206486, + ver: '1.0', + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'f1934a6e-958d-4198-9f36-6127cfc4cdb3', + nonce: '007c4153b6a0517c0e497476fb249948ec5clOvQQ', + iat: 1589206486, + auth_time: 1589206488, + name: 'damienbod', + emails: ['damien@damienbod.onmicrosoft.com'], + tfp: 'B2C_1_b2cpolicydamien', + at_hash: 'Zk0fKJS_pYhOpM8IBa12fw', + azp: 'no bad', + }; + const isValid = ( + stateValidationService as any + ).isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + decodedIdToken, + configRefresh + ); + + expect(isValid).toBe(false); + }); + }); + + describe('getValidatedStateResult', () => { + it('should return authResponseIsValid false when null is passed', waitForAsync(() => { + const isValidObs$ = stateValidationService.getValidatedStateResult( + {} as CallbackContext, + config + ); + + isValidObs$.subscribe((isValid) => { + expect(isValid.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid context error', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'id_token token'; + + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue( + false + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: null, + authResult: { + error: 'access_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const isValidObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + isValidObs$.subscribe((isValid) => { + expect(isValid.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenExpNotExpired is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'id_token token'; + + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + + spyOn(tokenValidationService, 'hasIdTokenExpired').and.returnValue(false); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + + config.clientId = ''; + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(false); + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback id token expired' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateStateFromHashCallback is false', waitForAsync(() => { + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(false); + + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + expect( + tokenValidationService.validateStateFromHashCallback + ).toHaveBeenCalled(); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect state' + ); + expect(state.accessToken).toBe(''); + expect(state.authResponseIsValid).toBe(false); + expect(state.decodedIdToken).toBeDefined(); + expect(state.idToken).toBe(''); + }); + })); + + it('access_token should equal result.access_token and is valid if response_type is "id_token token"', waitForAsync(() => { + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'hasIdTokenExpired').and.returnValue(false); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(true) + ); + + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + config.clientId = ''; + config.autoCleanStateAfterAuthentication = false; + config.responseType = 'id_token token'; + + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(true); + }); + })); + + it('should return invalid result if validateSignatureIdToken is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(false) + ); + + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + const logDebugSpy = spyOn(loggerService, 'logDebug').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logDebugSpy.calls.allArgs()).toEqual([ + [config, 'authCallback Signature validation failed id_token'], + [config, 'authCallback token(s) invalid'], + ]); + + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenNonce is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + false + ); + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect nonce, did you call the checkAuth() method multiple times?' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateRequiredIdToken is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'id_token token'; + + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + false + ); + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logDebugSpy = spyOn(loggerService, 'logDebug').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logDebugSpy).toHaveBeenCalledWith( + config, + 'authCallback Validation, one of the REQUIRED properties missing from id_token' + ); + expect(logDebugSpy).toHaveBeenCalledWith( + config, + 'authCallback token(s) invalid' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenIatMaxOffset is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'id_token token'; + + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(false); + + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback Validation, iat rejected id_token was issued too far away from the current time' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenIss is false and has authWellKnownEndPoints', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'id_token token'; + + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue( + false + ); + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect iss does not match authWellKnownEndpoints issuer' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenIss is false and has no authWellKnownEndPoints', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy.withArgs('authWellKnownEndPoints', config).and.returnValue(null); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authWellKnownEndpoints is undefined' + ); + + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + expect(state.state).toBe(ValidationResult.NoAuthWellKnownEndPoints); + }); + })); + + it('should return invalid result if validateIdTokenAud is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue( + false + ); + + config.clientId = ''; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect aud' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return invalid result if validateIdTokenAzpExistsIfMoreThanOneAud is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(false); + + config.clientId = ''; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback missing azp' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + expect(state.state).toBe(ValidationResult.IncorrectAzp); + }); + })); + + it('should return invalid result if validateIdTokenAzpValid is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + false + ); + + config.clientId = ''; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect azp' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + expect(state.state).toBe(ValidationResult.IncorrectAzp); + }); + })); + + it('should return invalid result if isIdTokenAfterRefreshTokenRequestValid is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + config.responseType = 'id_token token'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + spyOn( + stateValidationService as any, + 'isIdTokenAfterRefreshTokenRequestValid' + ).and.returnValue(false); + + config.clientId = ''; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback pre, post id_token claims do not match in refresh' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + expect(state.state).toBe( + ValidationResult.IncorrectIdTokenClaimsAfterRefresh + ); + }); + })); + + it('Reponse is valid if authConfiguration.response_type does not equal "id_token token"', waitForAsync(() => { + spyOn(tokenValidationService, 'hasIdTokenExpired').and.returnValue(false); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(true) + ); + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + config.clientId = ''; + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(true); + config.responseType = 'NOT id_token token'; + config.autoCleanStateAfterAuthentication = false; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const logDebugSpy = spyOn(loggerService, 'logDebug').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logDebugSpy).toHaveBeenCalledWith( + config, + 'authCallback token(s) validated, continue' + ); + expect(logDebugSpy).toHaveBeenCalledWith( + config, + 'authCallback token(s) invalid' + ); + expect(state.accessToken).toBe(''); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(true); + }); + })); + + it('Response is invalid if validateIdTokenAtHash is false', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + config.clientId = ''; + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(true); + config.responseType = 'id_token token'; + config.autoCleanStateAfterAuthentication = false; + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(false) + ); + + spyOn(tokenValidationService, 'hasIdTokenExpired').and.returnValue(false); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const logWarningSpy = spyOn(loggerService, 'logWarning').and.callFake( + () => undefined + ); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logWarningSpy).toHaveBeenCalledOnceWith( + config, + 'authCallback incorrect at_hash' + ); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe('id_tokenTEST'); + expect(state.decodedIdToken).toBe('decoded_id_token'); + expect(state.authResponseIsValid).toBe(false); + }); + })); + + it('should return valid result if validateIdTokenIss is false and iss_validation_off is true', waitForAsync(() => { + config.issValidationOff = true; + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue( + false + ); + + spyOn(tokenValidationService, 'hasIdTokenExpired').and.returnValue(false); + spyOn( + tokenValidationService, + 'validateAccessTokenNotExpired' + ).and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenAzpExistsIfMoreThanOneAud' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAzpValid').and.returnValue( + true + ); + + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(true) + ); + config.responseType = 'id_token token'; + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const logDebugSpy = spyOn(loggerService, 'logDebug'); // .and.callFake(() => undefined); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: 'id_tokenTEST', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(logDebugSpy.calls.allArgs()).toEqual([ + [config, 'iss validation is turned off, this is not recommended!'], + [config, 'authCallback token(s) validated, continue'], + ]); + expect(state.state).toBe(ValidationResult.Ok); + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.authResponseIsValid).toBe(true); + expect(state.decodedIdToken).toBeDefined(); + expect(state.idToken).toBe('id_tokenTEST'); + }); + })); + + it('should return valid if there is no id_token', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + + config.responseType = 'code'; + spyOn(tokenHelperService, 'getPayloadFromToken').and.returnValue( + 'decoded_id_token' + ); + spyOn(tokenValidationService, 'validateSignatureIdToken').and.returnValue( + of(true) + ); + spyOn(tokenValidationService, 'validateIdTokenNonce').and.returnValue( + true + ); + spyOn(tokenValidationService, 'validateRequiredIdToken').and.returnValue( + true + ); + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + config.clientId = ''; + spyOn( + tokenValidationService, + 'validateIdTokenIatMaxOffset' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAud').and.returnValue(true); + spyOn( + tokenValidationService, + 'validateIdTokenExpNotExpired' + ).and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenIss').and.returnValue(true); + spyOn(tokenValidationService, 'validateIdTokenAtHash').and.returnValue( + of(true) + ); + + config.autoCleanStateAfterAuthentication = false; + + const readSpy = spyOn(storagePersistenceService, 'read'); + + readSpy + .withArgs('authWellKnownEndPoints', config) + .and.returnValue(authWellKnownEndpoints); + readSpy + .withArgs('authStateControl', config) + .and.returnValue('authStateControl'); + readSpy.withArgs('authNonce', config).and.returnValue('authNonce'); + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsdfhhhhsdf', + sessionState: 'fdffsggggggdfsdf', + authResult: { + access_token: 'access_tokenTEST', + id_token: '', + }, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + existingIdToken: null, + }; + + const stateObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + stateObs$.subscribe((state) => { + expect(state.accessToken).toBe('access_tokenTEST'); + expect(state.idToken).toBe(''); + expect(state.decodedIdToken).toBeDefined(); + expect(state.authResponseIsValid).toBe(true); + }); + })); + + it('should return OK if disableIdTokenValidation is true', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + + config.responseType = 'id_token token'; + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + config.disableIdTokenValidation = true; + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: null, + authResult: {}, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const isValidObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + isValidObs$.subscribe((isValid) => { + expect(isValid.state).toBe(ValidationResult.Ok); + expect(isValid.authResponseIsValid).toBe(true); + }); + })); + + it('should return OK if disableIdTokenValidation is true', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + + config.responseType = 'id_token token'; + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + config.disableIdTokenValidation = true; + + const callbackContext: CallbackContext = { + code: 'fdffsdfsdf', + refreshToken: '', + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: '', + authResult: {}, + isRenewProcess: false, + jwtKeys: null, + validationResult: null, + }; + + const isValidObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + isValidObs$.subscribe((isValid) => { + expect(isValid.state).toBe(ValidationResult.Ok); + expect(isValid.authResponseIsValid).toBe(true); + }); + })); + + it('should return OK if disableIdTokenValidation is false but inrefreshtokenflow and no id token is returned', waitForAsync(() => { + spyOn( + tokenValidationService, + 'validateStateFromHashCallback' + ).and.returnValue(true); + spyOn( + flowHelper, + 'isCurrentFlowImplicitFlowWithAccessToken' + ).and.returnValue(false); + spyOn(flowHelper, 'isCurrentFlowCodeFlow').and.returnValue(false); + + config.responseType = 'id_token token'; + config.maxIdTokenIatOffsetAllowedInSeconds = 0; + config.disableIdTokenValidation = false; + + const callbackContext = { + code: 'fdffsdfsdf', + refreshToken: 'something', + state: 'fdffsggggggdfsdf', + sessionState: 'fdffsggggggdfsdf', + existingIdToken: null, + authResult: {}, + isRenewProcess: true, + jwtKeys: null, + validationResult: null, + }; + + const isValidObs$ = stateValidationService.getValidatedStateResult( + callbackContext, + config + ); + + isValidObs$.subscribe((isValid) => { + expect(isValid.state).toBe(ValidationResult.Ok); + expect(isValid.authResponseIsValid).toBe(true); + }); + })); + }); +}); diff --git a/src/validation/state-validation.service.ts b/src/validation/state-validation.service.ts new file mode 100644 index 0000000..318c519 --- /dev/null +++ b/src/validation/state-validation.service.ts @@ -0,0 +1,539 @@ +import { inject, Injectable } from 'injection-js'; +import { Observable, of } from 'rxjs'; +import { map, mergeMap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { CallbackContext } from '../flows/callback-context'; +import { LoggerService } from '../logging/logger.service'; +import { StoragePersistenceService } from '../storage/storage-persistence.service'; +import { EqualityService } from '../utils/equality/equality.service'; +import { FlowHelper } from '../utils/flowHelper/flow-helper.service'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { StateValidationResult } from './state-validation-result'; +import { TokenValidationService } from './token-validation.service'; +import { ValidationResult } from './validation-result'; + +@Injectable() +export class StateValidationService { + private readonly storagePersistenceService = inject( + StoragePersistenceService + ); + + private readonly tokenValidationService = inject(TokenValidationService); + + private readonly tokenHelperService = inject(TokenHelperService); + + private readonly loggerService = inject(LoggerService); + + private readonly equalityService = inject(EqualityService); + + private readonly flowHelper = inject(FlowHelper); + + getValidatedStateResult( + callbackContext: CallbackContext, + configuration: OpenIdConfiguration + ): Observable { + const hasError = Boolean(callbackContext.authResult?.error); + const hasCallbackContext = Boolean(callbackContext); + + if (!hasCallbackContext || hasError) { + return of(new StateValidationResult('', '', false, {})); + } + + return this.validateState(callbackContext, configuration); + } + + private validateState( + callbackContext: CallbackContext, + configuration: OpenIdConfiguration + ): Observable { + const toReturn = new StateValidationResult(); + const authStateControl = this.storagePersistenceService.read( + 'authStateControl', + configuration + ); + + if ( + !this.tokenValidationService.validateStateFromHashCallback( + callbackContext.authResult?.state, + authStateControl, + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect state' + ); + toReturn.state = ValidationResult.StatesDoNotMatch; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + const isCurrentFlowImplicitFlowWithAccessToken = + this.flowHelper.isCurrentFlowImplicitFlowWithAccessToken(configuration); + const isCurrentFlowCodeFlow = + this.flowHelper.isCurrentFlowCodeFlow(configuration); + + if (isCurrentFlowImplicitFlowWithAccessToken || isCurrentFlowCodeFlow) { + toReturn.accessToken = callbackContext.authResult?.access_token ?? ''; + } + + const disableIdTokenValidation = configuration.disableIdTokenValidation; + + if (disableIdTokenValidation) { + toReturn.state = ValidationResult.Ok; + toReturn.authResponseIsValid = true; + + return of(toReturn); + } + + const isInRefreshTokenFlow = + callbackContext.isRenewProcess && !!callbackContext.refreshToken; + const hasIdToken = Boolean(callbackContext.authResult?.id_token); + + if (isInRefreshTokenFlow && !hasIdToken) { + toReturn.state = ValidationResult.Ok; + toReturn.authResponseIsValid = true; + + return of(toReturn); + } + + if (hasIdToken) { + const { + clientId, + issValidationOff, + maxIdTokenIatOffsetAllowedInSeconds, + disableIatOffsetValidation, + ignoreNonceAfterRefresh, + renewTimeBeforeTokenExpiresInSeconds, + } = configuration; + + toReturn.idToken = callbackContext.authResult?.id_token ?? ''; + toReturn.decodedIdToken = this.tokenHelperService.getPayloadFromToken( + toReturn.idToken, + false, + configuration + ); + + return this.tokenValidationService + .validateSignatureIdToken( + toReturn.idToken, + callbackContext.jwtKeys, + configuration + ) + .pipe( + mergeMap((isSignatureIdTokenValid: boolean) => { + if (!isSignatureIdTokenValid) { + this.loggerService.logDebug( + configuration, + 'authCallback Signature validation failed id_token' + ); + toReturn.state = ValidationResult.SignatureFailed; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + const authNonce = this.storagePersistenceService.read( + 'authNonce', + configuration + ); + + if ( + !this.tokenValidationService.validateIdTokenNonce( + toReturn.decodedIdToken, + authNonce, + Boolean(ignoreNonceAfterRefresh), + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect nonce, did you call the checkAuth() method multiple times?' + ); + toReturn.state = ValidationResult.IncorrectNonce; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !this.tokenValidationService.validateRequiredIdToken( + toReturn.decodedIdToken, + configuration + ) + ) { + this.loggerService.logDebug( + configuration, + 'authCallback Validation, one of the REQUIRED properties missing from id_token' + ); + toReturn.state = ValidationResult.RequiredPropertyMissing; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !isInRefreshTokenFlow && + !this.tokenValidationService.validateIdTokenIatMaxOffset( + toReturn.decodedIdToken, + maxIdTokenIatOffsetAllowedInSeconds ?? 120, + Boolean(disableIatOffsetValidation), + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback Validation, iat rejected id_token was issued too far away from the current time' + ); + toReturn.state = ValidationResult.MaxOffsetExpired; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + const authWellKnownEndPoints = this.storagePersistenceService.read( + 'authWellKnownEndPoints', + configuration + ); + + if (authWellKnownEndPoints) { + if (issValidationOff) { + this.loggerService.logDebug( + configuration, + 'iss validation is turned off, this is not recommended!' + ); + } else if ( + !issValidationOff && + !this.tokenValidationService.validateIdTokenIss( + toReturn.decodedIdToken, + authWellKnownEndPoints.issuer, + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect iss does not match authWellKnownEndpoints issuer' + ); + toReturn.state = ValidationResult.IssDoesNotMatchIssuer; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + } else { + this.loggerService.logWarning( + configuration, + 'authWellKnownEndpoints is undefined' + ); + toReturn.state = ValidationResult.NoAuthWellKnownEndPoints; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !this.tokenValidationService.validateIdTokenAud( + toReturn.decodedIdToken, + clientId, + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect aud' + ); + toReturn.state = ValidationResult.IncorrectAud; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !this.tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud( + toReturn.decodedIdToken + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback missing azp' + ); + toReturn.state = ValidationResult.IncorrectAzp; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !this.tokenValidationService.validateIdTokenAzpValid( + toReturn.decodedIdToken, + clientId + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect azp' + ); + toReturn.state = ValidationResult.IncorrectAzp; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !this.isIdTokenAfterRefreshTokenRequestValid( + callbackContext, + toReturn.decodedIdToken, + configuration + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback pre, post id_token claims do not match in refresh' + ); + toReturn.state = + ValidationResult.IncorrectIdTokenClaimsAfterRefresh; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + if ( + !isInRefreshTokenFlow && + !this.tokenValidationService.validateIdTokenExpNotExpired( + toReturn.decodedIdToken, + configuration, + renewTimeBeforeTokenExpiresInSeconds + ) + ) { + this.loggerService.logWarning( + configuration, + 'authCallback id token expired' + ); + toReturn.state = ValidationResult.TokenExpired; + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + return this.validateDefault( + isCurrentFlowImplicitFlowWithAccessToken, + isCurrentFlowCodeFlow, + toReturn, + configuration, + callbackContext + ); + }) + ); + } else { + this.loggerService.logDebug( + configuration, + 'No id_token found, skipping id_token validation' + ); + } + + return this.validateDefault( + isCurrentFlowImplicitFlowWithAccessToken, + isCurrentFlowCodeFlow, + toReturn, + configuration, + callbackContext + ); + } + + private validateDefault( + isCurrentFlowImplicitFlowWithAccessToken: boolean, + isCurrentFlowCodeFlow: boolean, + toReturn: StateValidationResult, + configuration: OpenIdConfiguration, + callbackContext: CallbackContext + ): Observable { + // flow id_token + if (!isCurrentFlowImplicitFlowWithAccessToken && !isCurrentFlowCodeFlow) { + toReturn.authResponseIsValid = true; + toReturn.state = ValidationResult.Ok; + this.handleSuccessfulValidation(configuration); + this.handleUnsuccessfulValidation(configuration); + + return of(toReturn); + } + + // only do check if id_token returned, no always the case when using refresh tokens + if (callbackContext.authResult?.id_token) { + const idTokenHeader = this.tokenHelperService.getHeaderFromToken( + toReturn.idToken, + false, + configuration + ); + + if ( + isCurrentFlowCodeFlow && + !(toReturn.decodedIdToken.at_hash as string) + ) { + this.loggerService.logDebug( + configuration, + 'Code Flow active, and no at_hash in the id_token, skipping check!' + ); + } else { + return this.tokenValidationService + .validateIdTokenAtHash( + toReturn.accessToken, + toReturn.decodedIdToken.at_hash, + idTokenHeader.alg, // 'RS256' + configuration + ) + .pipe( + map((valid: boolean) => { + if (!valid || !toReturn.accessToken) { + this.loggerService.logWarning( + configuration, + 'authCallback incorrect at_hash' + ); + toReturn.state = ValidationResult.IncorrectAtHash; + this.handleUnsuccessfulValidation(configuration); + + return toReturn; + } else { + toReturn.authResponseIsValid = true; + toReturn.state = ValidationResult.Ok; + this.handleSuccessfulValidation(configuration); + + return toReturn; + } + }) + ); + } + } + + toReturn.authResponseIsValid = true; + toReturn.state = ValidationResult.Ok; + this.handleSuccessfulValidation(configuration); + + return of(toReturn); + } + + private isIdTokenAfterRefreshTokenRequestValid( + callbackContext: CallbackContext, + newIdToken: any, + configuration: OpenIdConfiguration + ): boolean { + const { useRefreshToken, disableRefreshIdTokenAuthTimeValidation } = + configuration; + + if (!useRefreshToken) { + return true; + } + + if (!callbackContext.existingIdToken) { + return true; + } + + const decodedIdToken = this.tokenHelperService.getPayloadFromToken( + callbackContext.existingIdToken, + false, + configuration + ); + + // Upon successful validation of the Refresh Token, the response body is the Token Response of Section 3.1.3.3 + // except that it might not contain an id_token. + + // If an ID Token is returned as a result of a token refresh request, the following requirements apply: + + // its iss Claim Value MUST be the same as in the ID Token issued when the original authentication occurred, + if (decodedIdToken.iss !== newIdToken.iss) { + this.loggerService.logDebug( + configuration, + `iss do not match: ${decodedIdToken.iss} ${newIdToken.iss}` + ); + + return false; + } + // its azp Claim Value MUST be the same as in the ID Token issued when the original authentication occurred; + // if no azp Claim was present in the original ID Token, one MUST NOT be present in the new ID Token, and + // otherwise, the same rules apply as apply when issuing an ID Token at the time of the original authentication. + if (decodedIdToken.azp !== newIdToken.azp) { + this.loggerService.logDebug( + configuration, + `azp do not match: ${decodedIdToken.azp} ${newIdToken.azp}` + ); + + return false; + } + // its sub Claim Value MUST be the same as in the ID Token issued when the original authentication occurred, + if (decodedIdToken.sub !== newIdToken.sub) { + this.loggerService.logDebug( + configuration, + `sub do not match: ${decodedIdToken.sub} ${newIdToken.sub}` + ); + + return false; + } + + // its aud Claim Value MUST be the same as in the ID Token issued when the original authentication occurred, + if ( + !this.equalityService.isStringEqualOrNonOrderedArrayEqual( + decodedIdToken?.aud, + newIdToken?.aud + ) + ) { + this.loggerService.logDebug( + configuration, + `aud in new id_token is not valid: '${decodedIdToken?.aud}' '${newIdToken.aud}'` + ); + + return false; + } + + if (disableRefreshIdTokenAuthTimeValidation) { + return true; + } + + // its iat Claim MUST represent the time that the new ID Token is issued, + // if the ID Token contains an auth_time Claim, its value MUST represent the time of the original authentication + // - not the time that the new ID token is issued, + if (decodedIdToken.auth_time !== newIdToken.auth_time) { + this.loggerService.logDebug( + configuration, + `auth_time do not match: ${decodedIdToken.auth_time} ${newIdToken.auth_time}` + ); + + return false; + } + + return true; + } + + private handleSuccessfulValidation(configuration: OpenIdConfiguration): void { + const { autoCleanStateAfterAuthentication } = configuration; + + this.storagePersistenceService.write('authNonce', null, configuration); + + if (autoCleanStateAfterAuthentication) { + this.storagePersistenceService.write( + 'authStateControl', + '', + configuration + ); + } + this.loggerService.logDebug( + configuration, + 'authCallback token(s) validated, continue' + ); + } + + private handleUnsuccessfulValidation( + configuration: OpenIdConfiguration + ): void { + const { autoCleanStateAfterAuthentication } = configuration; + + this.storagePersistenceService.write('authNonce', null, configuration); + + if (autoCleanStateAfterAuthentication) { + this.storagePersistenceService.write( + 'authStateControl', + '', + configuration + ); + } + this.loggerService.logDebug(configuration, 'authCallback token(s) invalid'); + } +} diff --git a/src/validation/token-validation.helper.spec.ts b/src/validation/token-validation.helper.spec.ts new file mode 100644 index 0000000..194d777 --- /dev/null +++ b/src/validation/token-validation.helper.spec.ts @@ -0,0 +1,159 @@ +import { alg2kty, getImportAlg, getVerifyAlg } from './token-validation.helper'; + +describe('getVerifyAlg', () => { + it('returns null if char has no E or R', () => { + const algorithm = 'ASDFGT'; + + const result = getVerifyAlg(algorithm); + + expect(result).toBe(null); + }); + + it('returns correct result when algorithm is R', () => { + const algorithm = 'R'; + + const result = getVerifyAlg(algorithm); + + expect(result).toEqual({ + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-256', + }); + }); + + it('returns null if algorithm is only E', () => { + const algorithm = 'E'; + + const result = getVerifyAlg(algorithm); + + expect(result).toBe(null); + }); + + it('returns correct result if algorithm is E256', () => { + const algorithm = 'E256'; + + const result = getVerifyAlg(algorithm); + + expect(result).toEqual({ + name: 'ECDSA', + hash: 'SHA-256', + }); + }); + + it('returns correct result if algorithm is E384', () => { + const algorithm = 'E384'; + + const result = getVerifyAlg(algorithm); + + expect(result).toEqual({ + name: 'ECDSA', + hash: 'SHA-384', + }); + }); +}); + +describe('alg2kty', () => { + it('returns correct result if algorithm is R', () => { + const algorithm = 'R'; + + const result = alg2kty(algorithm); + + expect(result).toEqual('RSA'); + }); + + it('returns correct result if algorithm is E', () => { + const algorithm = 'E'; + + const result = alg2kty(algorithm); + + expect(result).toEqual('EC'); + }); + + it('returns correct result if algorithm is E', () => { + const algorithm = 'SOMETHING_ELSE'; + + expect(() => alg2kty(algorithm)).toThrow( + new Error('Cannot infer kty from alg: SOMETHING_ELSE') + ); + }); +}); + +describe('getImportAlg', () => { + it('returns null if algorithm is not R or E', () => { + const algorithm = 'Q'; + + const result = getImportAlg(algorithm); + + expect(result).toBe(null); + }); + + it('returns null if algorithm is only R', () => { + const algorithm = 'R'; + + const result = getImportAlg(algorithm); + + expect(result).toBe(null); + }); + + it('returns correct result if algorithm is R256', () => { + const algorithm = 'R256'; + + const result = getImportAlg(algorithm); + + expect(result).toEqual({ + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-256', + }); + }); + + it('returns correct result if algorithm is R384', () => { + const algorithm = 'R384'; + + const result = getImportAlg(algorithm); + + expect(result).toEqual({ + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-384', + }); + }); + + it('returns correct result if algorithm is R512', () => { + const algorithm = 'R512'; + + const result = getImportAlg(algorithm); + + expect(result).toEqual({ + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-512', + }); + }); + + it('returns null if algorithm is only E', () => { + const algorithm = 'E'; + + const result = getImportAlg(algorithm); + + expect(result).toBe(null); + }); + + it('returns correct result if algorithm is E256', () => { + const algorithm = 'E256'; + + const result = getImportAlg(algorithm); + + expect(result).toEqual({ + name: 'ECDSA', + namedCurve: 'P-256', + }); + }); + + it('returns correct result if algorithm is E384', () => { + const algorithm = 'E384'; + + const result = getImportAlg(algorithm); + + expect(result).toEqual({ + name: 'ECDSA', + namedCurve: 'P-384', + }); + }); +}); diff --git a/src/validation/token-validation.helper.ts b/src/validation/token-validation.helper.ts new file mode 100644 index 0000000..4bc993c --- /dev/null +++ b/src/validation/token-validation.helper.ts @@ -0,0 +1,82 @@ +export function getVerifyAlg( + alg: string +): RsaHashedImportParams | EcdsaParams | null { + switch (alg.charAt(0)) { + case 'R': + return { + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-256', + }; + case 'E': + if (alg.includes('256')) { + return { + name: 'ECDSA', + hash: 'SHA-256', + }; + } else if (alg.includes('384')) { + return { + name: 'ECDSA', + hash: 'SHA-384', + }; + } else { + return null; + } + default: + return null; + } +} + +export function alg2kty(alg: string): string { + switch (alg.charAt(0)) { + case 'R': + return 'RSA'; + + case 'E': + return 'EC'; + + default: + throw new Error('Cannot infer kty from alg: ' + alg); + } +} + +export function getImportAlg( + alg: string +): RsaHashedImportParams | EcKeyImportParams | null { + switch (alg.charAt(0)) { + case 'R': + if (alg.includes('256')) { + return { + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-256', + }; + } else if (alg.includes('384')) { + return { + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-384', + }; + } else if (alg.includes('512')) { + return { + name: 'RSASSA-PKCS1-v1_5', + hash: 'SHA-512', + }; + } else { + return null; + } + case 'E': + if (alg.includes('256')) { + return { + name: 'ECDSA', + namedCurve: 'P-256', + }; + } else if (alg.includes('384')) { + return { + name: 'ECDSA', + namedCurve: 'P-384', + }; + } else { + return null; + } + default: + return null; + } +} diff --git a/src/validation/token-validation.service.spec.ts b/src/validation/token-validation.service.spec.ts new file mode 100644 index 0000000..f2abacb --- /dev/null +++ b/src/validation/token-validation.service.spec.ts @@ -0,0 +1,862 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { mockProvider } from '../../test/auto-mock'; +import { JwkExtractor } from '../extractors/jwk.extractor'; +import { LoggerService } from '../logging/logger.service'; +import { CryptoService } from '../utils/crypto/crypto.service'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { JwkWindowCryptoService } from './jwk-window-crypto.service'; +import { JwtWindowCryptoService } from './jwt-window-crypto.service'; +import { TokenValidationService } from './token-validation.service'; + +describe('TokenValidationService', () => { + let tokenValidationService: TokenValidationService; + let tokenHelperService: TokenHelperService; + let jwtWindowCryptoService: JwtWindowCryptoService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [], + providers: [ + TokenValidationService, + mockProvider(LoggerService), + mockProvider(TokenHelperService), + JwkExtractor, + JwkWindowCryptoService, + JwtWindowCryptoService, + CryptoService, + ], + }); + }); + + beforeEach(() => { + tokenValidationService = TestBed.inject(TokenValidationService); + tokenHelperService = TestBed.inject(TokenHelperService); + jwtWindowCryptoService = TestBed.inject(JwtWindowCryptoService); + }); + + it('should create', () => { + expect(tokenValidationService).toBeTruthy(); + }); + + describe('validateIdTokenAud', () => { + it('returns true if aud is string and passed aud matches idToken.aud', () => { + const dataIdToken = { aud: 'banana' }; + const valueTrue = tokenValidationService.validateIdTokenAud( + dataIdToken, + 'banana', + { configId: 'configId1' } + ); + + expect(valueTrue).toEqual(true); + }); + + it('returns false if aud is string and passed aud does not match idToken.aud', () => { + const dataIdToken = { aud: 'banana' }; + + const valueFalse = tokenValidationService.validateIdTokenAud( + dataIdToken, + 'bananammmm', + { configId: 'configId1' } + ); + + expect(valueFalse).toEqual(false); + }); + + it('returns true if aud is string array and passed aud is included in the array', () => { + const dataIdToken = { + aud: ['banana', 'apple', 'https://nice.dom'], + }; + + const audValidTrue = tokenValidationService.validateIdTokenAud( + dataIdToken, + 'apple', + { configId: 'configId1' } + ); + + expect(audValidTrue).toEqual(true); + }); + + it('returns false if aud is string array and passed aud is NOT included in the array', () => { + const dataIdToken = { + aud: ['banana', 'apple', 'https://nice.dom'], + }; + + const audValidFalse = tokenValidationService.validateIdTokenAud( + dataIdToken, + 'https://nice.domunnnnnnkoem', + { + configId: 'configId1', + } + ); + + expect(audValidFalse).toEqual(false); + }); + }); + + describe('validateIdTokenNonce', () => { + it('should validate id token nonce after code grant when match', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: 'test1' }, + 'test1', + false, + { configId: 'configId1' } + ) + ).toBe(true); + }); + + it('should not validate id token nonce after code grant when no match', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: 'test1' }, + 'test2', + false, + { configId: 'configId1' } + ) + ).toBe(false); + }); + + it('should validate id token nonce after refresh token grant when undefined and no ignore', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: undefined }, + TokenValidationService.refreshTokenNoncePlaceholder, + false, + { + configId: 'configId1', + } + ) + ).toBe(true); + }); + + it('should validate id token nonce after refresh token grant when undefined and ignore', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: undefined }, + TokenValidationService.refreshTokenNoncePlaceholder, + true, + { + configId: 'configId1', + } + ) + ).toBe(true); + }); + + it('should validate id token nonce after refresh token grant when defined and ignore', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: 'test1' }, + TokenValidationService.refreshTokenNoncePlaceholder, + true, + { + configId: 'configId1', + } + ) + ).toBe(true); + }); + + it('should not validate id token nonce after refresh token grant when defined and no ignore', () => { + expect( + tokenValidationService.validateIdTokenNonce( + { nonce: 'test1' }, + TokenValidationService.refreshTokenNoncePlaceholder, + false, + { + configId: 'configId1', + } + ) + ).toBe(false); + }); + }); + + describe('validateIdTokenAzpExistsIfMoreThanOneAud', () => { + it('returns false if aud is array, öength is bigger than 1 and has no azp property', () => { + const dataIdToken = { + aud: ['one', 'two'], + }; + const result = + tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud( + dataIdToken + ); + + expect(result).toBe(false); + }); + + it('returns false if aud is array, ength is bigger than 1 and has no azp property', () => { + const result = + tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud(null); + + expect(result).toBe(false); + }); + }); + + describe('validateIdTokenAzpValid', () => { + it('returns true dataIdToken param is null', () => { + const result = tokenValidationService.validateIdTokenAzpValid(null, ''); + + expect(result).toBe(true); + }); + + it('returns false when aud is an array and client id is NOT in the aud array', () => { + const dataIdToken = { + aud: [ + 'banana', + 'apple', + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + ], + azp: '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + }; + + const azpInvalid = tokenValidationService.validateIdTokenAzpValid( + dataIdToken, + 'bananammmm' + ); + + expect(azpInvalid).toEqual(false); + }); + + it('returns true when aud is an array and client id is in the aud array', () => { + const dataIdToken = { + aud: [ + 'banana', + 'apple', + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + ], + azp: '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + }; + + const azpValid = tokenValidationService.validateIdTokenAzpValid( + dataIdToken, + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com' + ); + + expect(azpValid).toEqual(true); + }); + + it('returns true if ID token has no azp property', () => { + const dataIdToken = { + noAzpProperty: 'something', + }; + + const azpValid = tokenValidationService.validateIdTokenAzpValid( + dataIdToken, + 'bananammmm' + ); + + expect(azpValid).toEqual(true); + }); + }); + + describe('validateIdTokenAzpExistsIfMoreThanOneAud', () => { + it('returns true if aud is array and aud contains azp', () => { + const dataIdToken = { + aud: [ + 'banana', + 'apple', + '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + ], + azp: '188968487735-b1hh7k87nkkh6vv84548sinju2kpr7gn.apps.googleusercontent.com', + }; + + const valueTrue = + tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud( + dataIdToken + ); + + expect(valueTrue).toEqual(true); + }); + + it('returns true if aud is array but only has one item', () => { + const dataIdToken = { + aud: ['banana'], + }; + + const valueTrue = + tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud( + dataIdToken + ); + + expect(valueTrue).toEqual(true); + }); + + it('returns true if aud is NOT an array', () => { + const dataIdToken = { + aud: 'banana', + }; + const valueTrue = + tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud( + dataIdToken + ); + + expect(valueTrue).toEqual(true); + }); + }); + + describe('validateRequiredIdToken', () => { + it('returns false if property iat is missing', () => { + const decodedIdToken = { + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + exp: 1589210086, + // iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + + it('returns false if property exp is missing', () => { + const decodedIdToken = { + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + // exp: 1589210086, + iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + + it('returns false if property aud is missing', () => { + const decodedIdToken = { + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + // aud: 'bad', + exp: 1589210086, + iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + + it('returns false if property sub is missing', () => { + const decodedIdToken = { + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + // sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + exp: 1589210086, + iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + + it('returns false if property iss is missing', () => { + const decodedIdToken = { + // iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + exp: 1589210086, + iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + + it('returns true if all is valid', () => { + const decodedIdToken = { + iss: 'https://damienbod.b2clogin.com/a0958f45-195b-4036-9259-de2f7e594db6/v2.0/', + sub: 'f836f380-3c64-4802-8dbc-011981c068f5', + aud: 'bad', + exp: 1589210086, + iat: 1589206486, + }; + + const result = tokenValidationService.validateRequiredIdToken( + decodedIdToken, + { configId: 'configId1' } + ); + + expect(result).toEqual(true); + }); + }); + + describe('validateIdTokenIss', () => { + it('returns true if issuer matches iss in idToken', () => { + const decodedIdToken = { + iss: 'xc', + }; + + const valueTrue = tokenValidationService.validateIdTokenIss( + decodedIdToken, + 'xc', + { configId: 'configId1' } + ); + + expect(valueTrue).toEqual(true); + }); + + it('returns false if issuer does not match iss in idToken', () => { + const decodedIdToken = { + iss: 'xc', + }; + + const valueFalse = tokenValidationService.validateIdTokenIss( + decodedIdToken, + 'xcjjjj', + { configId: 'configId1' } + ); + + expect(valueFalse).toEqual(false); + }); + }); + + describe('validateIdTokenIatMaxOffset', () => { + it('returns true if validationIsDisabled', () => { + const result = tokenValidationService.validateIdTokenIatMaxOffset( + null, + 0, + true, + { configId: 'configId1' } + ); + + expect(result).toBe(true); + }); + + it('returns false if dataIdToken has no property "iat"', () => { + const dataIdToken = { + notIat: 'test', + }; + const result = tokenValidationService.validateIdTokenIatMaxOffset( + dataIdToken, + 0, + false, + { configId: 'configId1' } + ); + + expect(result).toBe(false); + }); + + it('returns true if time is Mon Jan 19 1970 10:26:46 GMT+0100, and the offset is big like 500000000000 seconds', () => { + const decodedIdToken = { + iat: 1589206486, // Mon Jan 19 1970 10:26:46 GMT+0100 (Central European Standard Time) + }; + + const valueTrue = tokenValidationService.validateIdTokenIatMaxOffset( + decodedIdToken, + 500000000000, + false, + { configId: 'configId1' } + ); + + expect(valueTrue).toEqual(true); + }); + + it('returns false if time is Sat Nov 09 1985 02:47:57 GMT+0100, and the offset is 0 seconds', () => { + const decodedIdTokenNegIat = { + iat: 500348877430, // Sat Nov 09 1985 02:47:57 GMT+0100 (Central European Standard Time) + }; + const valueFalseNeg = tokenValidationService.validateIdTokenIatMaxOffset( + decodedIdTokenNegIat, + 0, + false, + { configId: 'configId1' } + ); + + expect(valueFalseNeg).toEqual(false); + }); + + it('returns true if time is Mon Jan 19 1970 10:26:46 GMT+0100, and the offset is small like 5 seconds', () => { + const decodedIdToken = { + iat: 1589206486, // Mon Jan 19 1970 10:26:46 GMT+0100 (Central European Standard Time) + }; + const valueFalse = tokenValidationService.validateIdTokenIatMaxOffset( + decodedIdToken, + 5, + false, + { configId: 'configId1' } + ); + + expect(valueFalse).toEqual(false); + }); + }); + + describe('validateSignatureIdToken', () => { + it('returns false if no kwtKeys are passed', waitForAsync(() => { + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + 'some-id-token', + null, + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(false); + }); + })); + + it('returns true if no idToken is passed', waitForAsync(() => { + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + null as any, + 'some-jwt-keys', + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(true); + }); + })); + + it('returns false if jwtkeys has no keys-property', waitForAsync(() => { + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + 'some-id-token', + { notKeys: '' }, + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(false); + }); + })); + + it('returns false if header data has no header data', waitForAsync(() => { + spyOn(tokenHelperService, 'getHeaderFromToken').and.returnValue({}); + + const jwtKeys = { + keys: 'someThing', + }; + + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + 'some-id-token', + jwtKeys, + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(false); + }); + })); + + it('returns false if header data alg property does not exist in keyalgorithms', waitForAsync(() => { + spyOn(tokenHelperService, 'getHeaderFromToken').and.returnValue({ + alg: 'NOT SUPPORTED ALG', + }); + + const jwtKeys = { + keys: 'someThing', + }; + + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + 'some-id-token', + jwtKeys, + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(false); + }); + })); + + it('returns false if header data has kid property and jwtKeys has same kid property but they are not valid with the token', (done) => { + const kid = '5626CE6A8F4F5FCD79C6642345282CA76D337548'; + + spyOn(tokenHelperService, 'getHeaderFromToken').and.returnValue({ + alg: 'RS256', + kid, + }); + spyOn(tokenHelperService, 'getSignatureFromToken').and.returnValue(''); + + const jwtKeys = { + keys: [ + { + kty: 'RSA', + use: 'sig', + kid, + x5t: 'VibOao9PX815xmQjRSgsp20zdUg', + e: 'AQAB', + n: 'uu3-HK4pLRHJHoEBzFhM516RWx6nybG5yQjH4NbKjfGQ8dtKy1BcGjqfMaEKF8KOK44NbAx7rtBKCO9EKNYkeFvcUzBzVeuu4jWG61XYdTekgv-Dh_Fj8245GocEkbvBbFW6cw-_N59JWqUuiCvb-EOfhcuubUcr44a0AQyNccYNpcXGRcMKy7_L1YhO0AMULqLDDVLFj5glh4TcJ2N5VnJedq1-_JKOxPqD1ni26UOQoWrW16G29KZ1_4Xxf2jX8TAq-4RJEHccdzgZVIO4F5B4MucMZGq8_jMCpiTUsUGDOAMA_AmjxIRHOtO5n6Pt0wofrKoAVhGh2sCTtaQf2Q', + x5c: [ + 'MIIDPzCCAiegAwIBAgIQF+HRVxLHII9IlOoQk6BxcjANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDDBBzdHMuZGV2LmNlcnQuY29tMB4XDTE5MDIyMDEwMTA0M1oXDTM5MDIyMDEwMTkyOVowGzEZMBcGA1UEAwwQc3RzLmRldi5jZXJ0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALrt/hyuKS0RyR6BAcxYTOdekVsep8mxuckIx+DWyo3xkPHbSstQXBo6nzGhChfCjiuODWwMe67QSgjvRCjWJHhb3FMwc1XrruI1hutV2HU3pIL/g4fxY/NuORqHBJG7wWxVunMPvzefSVqlLogr2/hDn4XLrm1HK+OGtAEMjXHGDaXFxkXDCsu/y9WITtADFC6iww1SxY+YJYeE3CdjeVZyXnatfvySjsT6g9Z4tulDkKFq1tehtvSmdf+F8X9o1/EwKvuESRB3HHc4GVSDuBeQeDLnDGRqvP4zAqYk1LFBgzgDAPwJo8SERzrTuZ+j7dMKH6yqAFYRodrAk7WkH9kCAwEAAaN/MH0wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAtBgNVHREEJjAkghBzdHMuZGV2LmNlcnQuY29tghBzdHMuZGV2LmNlcnQuY29tMB0GA1UdDgQWBBQuyHxWP3je6jGMOmOiY+hz47r36jANBgkqhkiG9w0BAQsFAAOCAQEAKEHG7Ga6nb2XiHXDc69KsIJwbO80+LE8HVJojvITILz3juN6/FmK0HmogjU6cYST7m1MyxsVhQQNwJASZ6haBNuBbNzBXfyyfb4kr62t1oDLNwhctHaHaM4sJSf/xIw+YO+Qf7BtfRAVsbM05+QXIi2LycGrzELiXu7KFM0E1+T8UOZ2Qyv7OlCb/pWkYuDgE4w97ox0MhDpvgluxZLpRanOLUCVGrfFaij7gRAhjYPUY3vAEcD8JcFBz1XijU8ozRO6FaG4qg8/JCe+VgoWsMDj3sKB9g0ob6KCyG9L2bdk99PGgvXDQvMYCpkpZzG3XsxOINPd5p0gc209ZOoxTg==', + ], + alg: 'RS256', + }, + ], + }; + + const valueFalse$ = tokenValidationService.validateSignatureIdToken( + 'someNOTMATCHINGIdToken', + jwtKeys, + { configId: 'configId1' } + ); + + valueFalse$.subscribe((valueFalse) => { + expect(valueFalse).toEqual(false); + done(); + }); + }); + + it('should return true if valid input is provided', (done) => { + const idToken = + 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwic3ViIjoiMTIzNDU2IiwiYXVkIjoibXlfY2xpZW50X2lkIiwiZXhwIjoxMzExMjgxOTcwLCJpYXQiOjEzMTEyODA5NzAsIm5hbWUiOiJKYW5lIERvZSIsImdpdmVuX25hbWUiOiJKYW5lIiwiZmFtaWx5X25hbWUiOiJEb2UiLCJiaXJ0aGRhdGUiOiIxOTkwLTEwLTMxIiwiZW1haWwiOiJqYW5lZG9lQGV4YW1wbGUuY29tIiwicGljdHVyZSI6Imh0dHBzOi8vZXhhbXBsZS5jb20vamFuZWRvZS9tZS5qcGcifQ.SY0ilps7yKYmYCc41zNOatfmAFhOtDYwuIT80qrHMl_4FEO2WFWSv-aDl4QfTSKY9A6MMP6xy0Z_8Kk7NeRwIV7FVScMLnPvVzs9pxza0e_rl6hmZLb5P5n4AEINwn46X9XmRB5W3EZO_x2LG65_g3NZFiPrzOC1Fs_6taJl7TfI8lOveYDoJyXCWYQMS3Oh5MM9S8W-Hc29_qJLH-kixm1S01qoICRPDGMRwhtAu1DHjwWQp9Ycfz6g3uyb7N1imBvI49t1CwWy02_mQ3g-7e7bOP1Ax2kgrwnJgsVBDULnyCZG9PE8T0CHZl_fErZtvbJJ0jdoZ1fyr48906am2w'; + const idTokenParts = idToken.split('.'); + const key = { + kty: 'RSA', + n: 'u1SU1LfVLPHCozMxH2Mo4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0_IzW7yWR7QkrmBL7jTKEn5u-qKhbwKfBstIs-bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyehkd3qqGElvW_VDL5AaWTg0nLVkjRo9z-40RQzuVaE8AkAFmxZzow3x-VJYKdjykkJ0iT9wCS0DRTXu269V264Vf_3jvredZiKRkgwlL9xNAwxXFg0x_XFw005UWVRIkdgcKWTjpBP2dPwVZ4WWC-9aGVd-Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbcmw', + e: 'AQAB', + alg: 'RS256', + kid: 'boop', + use: 'sig', + }; + const jwtKeys = { + keys: [key], + }; + + spyOn(tokenHelperService, 'getHeaderFromToken').and.returnValue({ + alg: 'RS256', + typ: 'JWT', + }); + spyOn(tokenHelperService, 'getSigningInputFromToken').and.returnValue( + [idTokenParts[0], idTokenParts[1]].join('.') + ); + spyOn(tokenHelperService, 'getSignatureFromToken').and.returnValue( + idTokenParts[2] + ); + + const valueTrue$ = tokenValidationService.validateSignatureIdToken( + idToken, + jwtKeys, + { configId: 'configId1' } + ); + + valueTrue$.subscribe((valueTrue) => { + expect(valueTrue).toEqual(true); + done(); + }); + }); + }); + + describe('validateIdTokenAtHash', () => { + it('returns true if sha is sha256 and generated hash equals atHash param', (done) => { + const accessToken = 'iGU3DhbPoDljiYtr0oepxi7zpT8BsjdU7aaXcdq-DPk'; + const atHash = '-ODC_7Go_UIUTC8nP4k2cA'; + + const result$ = tokenValidationService.validateIdTokenAtHash( + accessToken, + atHash, + '256', + { configId: 'configId1' } + ); + + result$.subscribe((result) => { + expect(result).toEqual(true); + done(); + }); + }); + + it('returns false if sha is sha256 and generated hash does not equal atHash param', (done) => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const atHash = 'bad'; + + const result$ = tokenValidationService.validateIdTokenAtHash( + accessToken, + atHash, + '256', + { configId: 'configId1' } + ); + + result$.subscribe((result) => { + expect(result).toEqual(false); + done(); + }); + }); + + it('returns true if sha is sha256 and generated hash does equal atHash param', (done) => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const atHash = 'good'; + + spyOn(jwtWindowCryptoService, 'generateAtHash').and.returnValues( + of('notEqualsGood'), + of('good') + ); + + const result$ = tokenValidationService.validateIdTokenAtHash( + accessToken, + atHash, + '256', + { configId: 'configId1' } + ); + + result$.subscribe((result) => { + expect(result).toEqual(true); + done(); + }); + }); + + it('returns false if sha is sha384 and generated hash does not equal atHash param', (done) => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const atHash = 'bad'; + + const result$ = tokenValidationService.validateIdTokenAtHash( + accessToken, + atHash, + '384', + { configId: 'configId1' } + ); + + result$.subscribe((result) => { + expect(result).toEqual(false); + done(); + }); + }); + + it('returns false if sha is sha512 and generated hash does not equal atHash param', (done) => { + const accessToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + const atHash = 'bad'; + + const result$ = tokenValidationService.validateIdTokenAtHash( + accessToken, + atHash, + '512', + { configId: 'configId1' } + ); + + result$.subscribe((result) => { + expect(result).toEqual(false); + done(); + }); + }); + }); + + describe('validateStateFromHashCallback', () => { + it('returns true when state and localstate match', () => { + const result = tokenValidationService.validateStateFromHashCallback( + 'sssd', + 'sssd', + { configId: 'configId1' } + ); + + expect(result).toEqual(true); + }); + + it('returns false when state and local state do not match', () => { + const result = tokenValidationService.validateStateFromHashCallback( + 'sssd', + 'bad', + { configId: 'configId1' } + ); + + expect(result).toEqual(false); + }); + }); + + describe('validateIdTokenExpNotExpired', () => { + it('returns false when getTokenExpirationDate returns null', () => { + spyOn(tokenHelperService, 'getTokenExpirationDate').and.returnValue( + null as unknown as Date + ); + const notExpired = tokenValidationService.validateIdTokenExpNotExpired( + 'idToken', + { configId: 'configId1' }, + 0 + ); + + expect(notExpired).toEqual(false); + }); + + it('returns false if token is not expired', () => { + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + + const notExpired = tokenValidationService.validateIdTokenExpNotExpired( + idToken, + { configId: 'configId1' }, + 0 + ); + + expect(notExpired).toEqual(false); + }); + }); + + describe('validateAccessTokenNotExpired', () => { + const testCases = [ + { + // Mon Jan 19 1970 10:26:50 GMT+0100, + date: new Date(1589210086), + offsetSeconds: 0, + expectedResult: false, + }, + { + // Sun Nov 01 2550 00:00:00 GMT+0100 + date: new Date(2550, 10), + offsetSeconds: 0, + expectedResult: true, + }, + { + date: null, + offsetSeconds: 300, + expectedResult: true, + }, + ]; + + testCases.forEach(({ date, offsetSeconds, expectedResult }) => { + it(`returns ${expectedResult} if ${date} is given with an offset of ${offsetSeconds}`, () => { + const notExpired = tokenValidationService.validateAccessTokenNotExpired( + date as Date, + { configId: 'configId1' }, + offsetSeconds + ); + + expect(notExpired).toEqual(expectedResult); + }); + }); + }); + + describe('hasIdTokenExpired', () => { + it('returns true if token has expired', () => { + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE1ODkyMTAwODYsIm5iZiI6MTU4OTIwNjQ4NiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9kYW1pZW5ib2QuYjJjbG9naW4uY29tL2EwOTU4ZjQ1LTE5NWItNDAzNi05MjU5LWRlMmY3ZTU5NGRiNi92Mi4wLyIsInN1YiI6ImY4MzZmMzgwLTNjNjQtNDgwMi04ZGJjLTAxMTk4MWMwNjhmNSIsImF1ZCI6ImYxOTM0YTZlLTk1OGQtNDE5OC05ZjM2LTYxMjdjZmM0Y2RiMyIsIm5vbmNlIjoiMDA3YzQxNTNiNmEwNTE3YzBlNDk3NDc2ZmIyNDk5NDhlYzVjbE92UVEiLCJpYXQiOjE1ODkyMDY0ODYsImF1dGhfdGltZSI6MTU4OTIwNjQ4NiwibmFtZSI6ImRhbWllbmJvZCIsImVtYWlscyI6WyJkYW1pZW5AZGFtaWVuYm9kLm9ubWljcm9zb2Z0LmNvbSJdLCJ0ZnAiOiJCMkNfMV9iMmNwb2xpY3lkYW1pZW4iLCJhdF9oYXNoIjoiWmswZktKU19wWWhPcE04SUJhMTJmdyJ9.E5Z-0kOzNU7LBkeVHHMyNoER8TUapGzUUfXmW6gVu4v6QMM5fQ4sJ7KC8PHh8lBFYiCnaDiTtpn3QytUwjXEFnLDAX5qcZT1aPoEgL_OmZMC-8y-4GyHp35l7VFD4iNYM9fJmLE8SYHTVl7eWPlXSyz37Ip0ciiV0Fd6eoksD_aVc-hkIqngDfE4fR8ZKfv4yLTNN_SfknFfuJbZ56yN-zIBL4GkuHsbQCBYpjtWQ62v98p1jO7NhHKV5JP2ec_Ge6oYc_bKTrE6OIX38RJ2rIm7zU16mtdjnl_350Nw3ytHcTPnA1VpP_VLElCfe83jr5aDHc_UQRYaAcWlOgvmVg'; + + const result = tokenValidationService.hasIdTokenExpired(idToken, { + configId: 'configId1', + }); + + expect(result).toBe(true); + }); + + it('returns false if token has not expired using offset', () => { + // expires 2050-02-12T08:02:30.823Z + const tokenExpires = new Date('2050-02-12T08:02:30.823Z'); + const idToken = + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2MTMxMTY5NTAsImV4cCI6MjUyODI2NTc1MCwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.GHxRo23NghUTTeZx6VIzTSf05JEeEn7z9YYyFLxWv6M'; + + spyOn(tokenHelperService, 'getTokenExpirationDate').and.returnValue( + tokenExpires + ); + + const result = tokenValidationService.hasIdTokenExpired(idToken, { + configId: 'configId1', + }); + + expect(result).toBe(false); + }); + }); +}); diff --git a/src/validation/token-validation.service.ts b/src/validation/token-validation.service.ts new file mode 100644 index 0000000..b07135f --- /dev/null +++ b/src/validation/token-validation.service.ts @@ -0,0 +1,608 @@ +import { inject, Injectable } from 'injection-js'; +import { base64url } from 'rfc4648'; +import { from, Observable, of } from 'rxjs'; +import { map, mergeMap, tap } from 'rxjs/operators'; +import { OpenIdConfiguration } from '../config/openid-configuration'; +import { JwkExtractor } from '../extractors/jwk.extractor'; +import { LoggerService } from '../logging/logger.service'; +import { TokenHelperService } from '../utils/tokenHelper/token-helper.service'; +import { JwkWindowCryptoService } from './jwk-window-crypto.service'; +import { JwtWindowCryptoService } from './jwt-window-crypto.service'; +import { alg2kty, getImportAlg, getVerifyAlg } from './token-validation.helper'; + +// http://openid.net/specs/openid-connect-implicit-1_0.html + +// id_token +// id_token C1: The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery) +// MUST exactly match the value of the iss (issuer) Claim. +// +// id_token C2: The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified +// by the iss (issuer) Claim as an audience.The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, +// or if it contains additional audiences not trusted by the Client. +// +// id_token C3: If the ID Token contains multiple audiences, the Client SHOULD verify that an azp Claim is present. +// +// id_token C4: If an azp (authorized party) Claim is present, the Client SHOULD verify that its client_id is the Claim Value. +// +// id_token C5: The Client MUST validate the signature of the ID Token according to JWS [JWS] using the algorithm specified in the +// alg Header Parameter of the JOSE Header.The Client MUST use the keys provided by the Issuer. +// +// id_token C6: The alg value SHOULD be RS256. Validation of tokens using other signing algorithms is described in the OpenID Connect +// Core 1.0 +// [OpenID.Core] specification. +// +// id_token C7: The current time MUST be before the time represented by the exp Claim (possibly allowing for some small leeway to account +// for clock skew). +// +// id_token C8: The iat Claim can be used to reject tokens that were issued too far away from the current time, +// limiting the amount of time that nonces need to be stored to prevent attacks.The acceptable range is Client specific. +// +// id_token C9: The value of the nonce Claim MUST be checked to verify that it is the same value as the one that was sent +// in the Authentication Request.The Client SHOULD check the nonce value for replay attacks.The precise method for detecting replay attacks +// is Client specific. +// +// id_token C10: If the acr Claim was requested, the Client SHOULD check that the asserted Claim Value is appropriate. +// The meaning and processing of acr Claim Values is out of scope for this document. +// +// id_token C11: When a max_age request is made, the Client SHOULD check the auth_time Claim value and request re- authentication +// if it determines too much time has elapsed since the last End- User authentication. + +// Access Token Validation +// access_token C1: Hash the octets of the ASCII representation of the access_token with the hash algorithm specified in JWA[JWA] +// for the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is RS256, the hash algorithm used is SHA-256. +// access_token C2: Take the left- most half of the hash and base64url- encode it. +// access_token C3: The value of at_hash in the ID Token MUST match the value produced in the previous step if at_hash is present +// in the ID Token. + +@Injectable() +export class TokenValidationService { + static refreshTokenNoncePlaceholder = '--RefreshToken--'; + + keyAlgorithms: string[] = [ + 'HS256', + 'HS384', + 'HS512', + 'RS256', + 'RS384', + 'RS512', + 'ES256', + 'ES384', + 'PS256', + 'PS384', + 'PS512', + ]; + + private readonly tokenHelperService = inject(TokenHelperService); + + private readonly loggerService = inject(LoggerService); + + private readonly jwkExtractor = inject(JwkExtractor); + + private readonly jwkWindowCryptoService = inject(JwkWindowCryptoService); + + private readonly jwtWindowCryptoService = inject(JwtWindowCryptoService); + + // id_token C7: The current time MUST be before the time represented by the exp Claim + // (possibly allowing for some small leeway to account for clock skew). + hasIdTokenExpired( + token: string, + configuration: OpenIdConfiguration, + offsetSeconds?: number + ): boolean { + const decoded = this.tokenHelperService.getPayloadFromToken( + token, + false, + configuration + ); + + return !this.validateIdTokenExpNotExpired( + decoded, + configuration, + offsetSeconds + ); + } + + // id_token C7: The current time MUST be before the time represented by the exp Claim + // (possibly allowing for some small leeway to account for clock skew). + validateIdTokenExpNotExpired( + decodedIdToken: string, + configuration: OpenIdConfiguration, + offsetSeconds?: number + ): boolean { + const tokenExpirationDate = + this.tokenHelperService.getTokenExpirationDate(decodedIdToken); + + offsetSeconds = offsetSeconds || 0; + + if (!tokenExpirationDate) { + return false; + } + + const tokenExpirationValue = tokenExpirationDate.valueOf(); + const nowWithOffset = this.calculateNowWithOffset(offsetSeconds); + const tokenNotExpired = tokenExpirationValue > nowWithOffset; + + this.loggerService.logDebug( + configuration, + `Has idToken expired: ${!tokenNotExpired} --> expires in ${this.millisToMinutesAndSeconds( + tokenExpirationValue - nowWithOffset + )} , ${new Date(tokenExpirationValue).toLocaleTimeString()} > ${new Date( + nowWithOffset + ).toLocaleTimeString()}` + ); + + return tokenNotExpired; + } + + validateAccessTokenNotExpired( + accessTokenExpiresAt: Date, + configuration: OpenIdConfiguration, + offsetSeconds?: number + ): boolean { + // value is optional, so if it does not exist, then it has not expired + if (!accessTokenExpiresAt) { + return true; + } + + offsetSeconds = offsetSeconds || 0; + const accessTokenExpirationValue = accessTokenExpiresAt.valueOf(); + const nowWithOffset = this.calculateNowWithOffset(offsetSeconds); + const tokenNotExpired = accessTokenExpirationValue > nowWithOffset; + + this.loggerService.logDebug( + configuration, + `Has accessToken expired: ${!tokenNotExpired} --> expires in ${this.millisToMinutesAndSeconds( + accessTokenExpirationValue - nowWithOffset + )} , ${new Date( + accessTokenExpirationValue + ).toLocaleTimeString()} > ${new Date(nowWithOffset).toLocaleTimeString()}` + ); + + return tokenNotExpired; + } + + // iss + // REQUIRED. Issuer Identifier for the Issuer of the response.The iss value is a case-sensitive URL using the + // https scheme that contains scheme, host, + // and optionally, port number and path components and no query or fragment components. + // + // sub + // REQUIRED. Subject Identifier.Locally unique and never reassigned identifier within the Issuer for the End- User, + // which is intended to be consumed by the Client, e.g., 24400320 or AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4. + // It MUST NOT exceed 255 ASCII characters in length.The sub value is a case-sensitive string. + // + // aud + // REQUIRED. Audience(s) that this ID Token is intended for. It MUST contain the OAuth 2.0 client_id of the Relying Party as an + // audience value. + // It MAY also contain identifiers for other audiences.In the general case, the aud value is an array of case-sensitive strings. + // In the common special case when there is one audience, the aud value MAY be a single case-sensitive string. + // + // exp + // REQUIRED. Expiration time on or after which the ID Token MUST NOT be accepted for processing. + // The processing of this parameter requires that the current date/ time MUST be before the expiration date/ time listed in the value. + // Implementers MAY provide for some small leeway, usually no more than a few minutes, to account for clock skew. + // Its value is a JSON [RFC7159] number representing the number of seconds from 1970- 01 - 01T00: 00:00Z as measured in UTC until + // the date/ time. + // See RFC 3339 [RFC3339] for details regarding date/ times in general and UTC in particular. + // + // iat + // REQUIRED. Time at which the JWT was issued. Its value is a JSON number representing the number of seconds from + // 1970- 01 - 01T00: 00: 00Z as measured + // in UTC until the date/ time. + validateRequiredIdToken( + dataIdToken: any, + configuration: OpenIdConfiguration + ): boolean { + let validated = true; + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iss')) { + validated = false; + this.loggerService.logWarning( + configuration, + 'iss is missing, this is required in the id_token' + ); + } + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'sub')) { + validated = false; + this.loggerService.logWarning( + configuration, + 'sub is missing, this is required in the id_token' + ); + } + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'aud')) { + validated = false; + this.loggerService.logWarning( + configuration, + 'aud is missing, this is required in the id_token' + ); + } + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'exp')) { + validated = false; + this.loggerService.logWarning( + configuration, + 'exp is missing, this is required in the id_token' + ); + } + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iat')) { + validated = false; + this.loggerService.logWarning( + configuration, + 'iat is missing, this is required in the id_token' + ); + } + + return validated; + } + + // id_token C8: The iat Claim can be used to reject tokens that were issued too far away from the current time, + // limiting the amount of time that nonces need to be stored to prevent attacks.The acceptable range is Client specific. + validateIdTokenIatMaxOffset( + dataIdToken: any, + maxOffsetAllowedInSeconds: number, + disableIatOffsetValidation: boolean, + configuration: OpenIdConfiguration + ): boolean { + if (disableIatOffsetValidation) { + return true; + } + + if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iat')) { + return false; + } + + const dateTimeIatIdToken = new Date(0); // The 0 here is the key, which sets the date to the epoch + + dateTimeIatIdToken.setUTCSeconds(dataIdToken.iat); + maxOffsetAllowedInSeconds = maxOffsetAllowedInSeconds || 0; + + const nowInUtc = new Date(new Date().toUTCString()); + const diff = nowInUtc.valueOf() - dateTimeIatIdToken.valueOf(); + const maxOffsetAllowedInMilliseconds = maxOffsetAllowedInSeconds * 1000; + + this.loggerService.logDebug( + configuration, + `validate id token iat max offset ${diff} < ${maxOffsetAllowedInMilliseconds}` + ); + + if (diff > 0) { + return diff < maxOffsetAllowedInMilliseconds; + } + + return -diff < maxOffsetAllowedInMilliseconds; + } + + // id_token C9: The value of the nonce Claim MUST be checked to verify that it is the same value as the one + // that was sent in the Authentication Request.The Client SHOULD check the nonce value for replay attacks. + // The precise method for detecting replay attacks is Client specific. + + // However the nonce claim SHOULD not be present for the refresh_token grant type + // https://bitbucket.org/openid/connect/issues/1025/ambiguity-with-how-nonce-is-handled-on + // The current spec is ambiguous and KeyCloak does send it. + validateIdTokenNonce( + dataIdToken: any, + localNonce: any, + ignoreNonceAfterRefresh: boolean, + configuration: OpenIdConfiguration + ): boolean { + const isFromRefreshToken = + (dataIdToken.nonce === undefined || ignoreNonceAfterRefresh) && + localNonce === TokenValidationService.refreshTokenNoncePlaceholder; + + if (!isFromRefreshToken && dataIdToken.nonce !== localNonce) { + this.loggerService.logDebug( + configuration, + 'Validate_id_token_nonce failed, dataIdToken.nonce: ' + + dataIdToken.nonce + + ' local_nonce:' + + localNonce + ); + + return false; + } + + return true; + } + + // id_token C1: The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery) + // MUST exactly match the value of the iss (issuer) Claim. + validateIdTokenIss( + dataIdToken: any, + authWellKnownEndpointsIssuer: any, + configuration: OpenIdConfiguration + ): boolean { + if ( + (dataIdToken.iss as string) !== (authWellKnownEndpointsIssuer as string) + ) { + this.loggerService.logDebug( + configuration, + 'Validate_id_token_iss failed, dataIdToken.iss: ' + + dataIdToken.iss + + ' authWellKnownEndpoints issuer:' + + authWellKnownEndpointsIssuer + ); + + return false; + } + + return true; + } + + // id_token C2: The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified + // by the iss (issuer) Claim as an audience. + // The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, or if it contains additional audiences + // not trusted by the Client. + validateIdTokenAud( + dataIdToken: any, + aud: string | undefined, + configuration: OpenIdConfiguration + ): boolean { + if (Array.isArray(dataIdToken.aud)) { + const result = dataIdToken.aud.includes(aud); + + if (!result) { + this.loggerService.logDebug( + configuration, + 'Validate_id_token_aud array failed, dataIdToken.aud: ' + + dataIdToken.aud + + ' client_id:' + + aud + ); + + return false; + } + + return true; + } else if (dataIdToken.aud !== aud) { + this.loggerService.logDebug( + configuration, + 'Validate_id_token_aud failed, dataIdToken.aud: ' + + dataIdToken.aud + + ' client_id:' + + aud + ); + + return false; + } + + return true; + } + + validateIdTokenAzpExistsIfMoreThanOneAud(dataIdToken: any): boolean { + if (!dataIdToken) { + return false; + } + + return !( + Array.isArray(dataIdToken.aud) && + dataIdToken.aud.length > 1 && + !dataIdToken.azp + ); + } + + // If an azp (authorized party) Claim is present, the Client SHOULD verify that its client_id is the Claim Value. + validateIdTokenAzpValid( + dataIdToken: any, + clientId: string | undefined + ): boolean { + if (!dataIdToken?.azp) { + return true; + } + + return dataIdToken.azp === clientId; + } + + validateStateFromHashCallback( + state: any, + localState: any, + configuration: OpenIdConfiguration + ): boolean { + if ((state as string) !== (localState as string)) { + this.loggerService.logDebug( + configuration, + 'ValidateStateFromHashCallback failed, state: ' + + state + + ' local_state:' + + localState + ); + + return false; + } + + return true; + } + + // id_token C5: The Client MUST validate the signature of the ID Token according to JWS [JWS] using the algorithm specified in the alg + // Header Parameter of the JOSE Header.The Client MUST use the keys provided by the Issuer. + // id_token C6: The alg value SHOULD be RS256. Validation of tokens using other signing algorithms is described in the + // OpenID Connect Core 1.0 [OpenID.Core] specification. + validateSignatureIdToken( + idToken: string, + jwtkeys: any, + configuration: OpenIdConfiguration + ): Observable { + if (!idToken) { + return of(true); + } + + if (!jwtkeys || !jwtkeys.keys) { + return of(false); + } + + const headerData = this.tokenHelperService.getHeaderFromToken( + idToken, + false, + configuration + ); + + if ( + Object.keys(headerData).length === 0 && + headerData.constructor === Object + ) { + this.loggerService.logWarning( + configuration, + 'id token has no header data' + ); + + return of(false); + } + + const kid: string = headerData.kid; + const alg: string = headerData.alg; + + const keys: JsonWebKey[] = jwtkeys.keys; + let foundKeys: JsonWebKey[]; + let key: JsonWebKey; + + if (!this.keyAlgorithms.includes(alg)) { + this.loggerService.logWarning(configuration, 'alg not supported', alg); + + return of(false); + } + + const kty = alg2kty(alg); + const use = 'sig'; + + try { + foundKeys = kid + ? this.jwkExtractor.extractJwk(keys, { kid, kty, use }, false) + : this.jwkExtractor.extractJwk(keys, { kty, use }, false); + + if (foundKeys.length === 0) { + foundKeys = kid + ? this.jwkExtractor.extractJwk(keys, { kid, kty }) + : this.jwkExtractor.extractJwk(keys, { kty }); + } + + key = foundKeys[0]; + } catch (e: any) { + this.loggerService.logError(configuration, e); + + return of(false); + } + + const algorithm = getImportAlg(alg); + + const signingInput = this.tokenHelperService.getSigningInputFromToken( + idToken, + true, + configuration + ); + const rawSignature = this.tokenHelperService.getSignatureFromToken( + idToken, + true, + configuration + ); + + return from( + this.jwkWindowCryptoService.importVerificationKey(key, algorithm) + ).pipe( + mergeMap((cryptoKey: CryptoKey) => { + const signature: Uint8Array = base64url.parse(rawSignature, { + loose: true, + }); + + const verifyAlgorithm = getVerifyAlg(alg); + + return from( + this.jwkWindowCryptoService.verifyKey( + verifyAlgorithm, + cryptoKey, + signature, + signingInput + ) + ); + }), + tap((isValid: boolean) => { + if (!isValid) { + this.loggerService.logWarning( + configuration, + 'incorrect Signature, validation failed for id_token' + ); + } + }) + ); + } + + // Accepts ID Token without 'kid' claim in JOSE header if only one JWK supplied in 'jwks_url' + //// private validate_no_kid_in_header_only_one_allowed_in_jwtkeys(header_data: any, jwtkeys: any): boolean { + //// this.oidcSecurityCommon.logDebug('amount of jwtkeys.keys: ' + jwtkeys.keys.length); + //// if (!header_data.hasOwnProperty('kid')) { + //// // no kid defined in Jose header + //// if (jwtkeys.keys.length != 1) { + //// this.oidcSecurityCommon.logDebug('jwtkeys.keys.length != 1 and no kid in header'); + //// return false; + //// } + //// } + + //// return true; + //// } + + // Access Token Validation + // access_token C1: Hash the octets of the ASCII representation of the access_token with the hash algorithm specified in JWA[JWA] + // for the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is RS256, the hash algorithm used is SHA-256. + // access_token C2: Take the left- most half of the hash and base64url- encode it. + // access_token C3: The value of at_hash in the ID Token MUST match the value produced in the previous step if at_hash + // is present in the ID Token. + validateIdTokenAtHash( + accessToken: string, + atHash: string, + idTokenAlg: string, + configuration: OpenIdConfiguration + ): Observable { + this.loggerService.logDebug( + configuration, + 'at_hash from the server:' + atHash + ); + + // 'sha256' 'sha384' 'sha512' + let sha = 'SHA-256'; + + if (idTokenAlg.includes('384')) { + sha = 'SHA-384'; + } else if (idTokenAlg.includes('512')) { + sha = 'SHA-512'; + } + + return this.jwtWindowCryptoService + .generateAtHash('' + accessToken, sha) + .pipe( + mergeMap((hash: string) => { + this.loggerService.logDebug( + configuration, + 'at_hash client validation not decoded:' + hash + ); + if (hash === atHash) { + return of(true); // isValid; + } else { + return this.jwtWindowCryptoService + .generateAtHash('' + decodeURIComponent(accessToken), sha) + .pipe( + map((newHash: string) => { + this.loggerService.logDebug( + configuration, + '-gen access--' + hash + ); + + return newHash === atHash; + }) + ); + } + }) + ); + } + + private millisToMinutesAndSeconds(millis: number): string { + const minutes = Math.floor(millis / 60000); + const seconds = ((millis % 60000) / 1000).toFixed(0); + + return minutes + ':' + (+seconds < 10 ? '0' : '') + seconds; + } + + private calculateNowWithOffset(offsetSeconds: number): number { + return new Date(new Date().toUTCString()).valueOf() + offsetSeconds * 1000; + } +} diff --git a/src/validation/validation-result.ts b/src/validation/validation-result.ts new file mode 100644 index 0000000..745ed6c --- /dev/null +++ b/src/validation/validation-result.ts @@ -0,0 +1,18 @@ +export enum ValidationResult { + NotSet = 'NotSet', + StatesDoNotMatch = 'StatesDoNotMatch', + SignatureFailed = 'SignatureFailed', + IncorrectNonce = 'IncorrectNonce', + RequiredPropertyMissing = 'RequiredPropertyMissing', + MaxOffsetExpired = 'MaxOffsetExpired', + IssDoesNotMatchIssuer = 'IssDoesNotMatchIssuer', + NoAuthWellKnownEndPoints = 'NoAuthWellKnownEndPoints', + IncorrectAud = 'IncorrectAud', + IncorrectIdTokenClaimsAfterRefresh = 'IncorrectIdTokenClaimsAfterRefresh', + IncorrectAzp = 'IncorrectAzp', + TokenExpired = 'TokenExpired', + IncorrectAtHash = 'IncorrectAtHash', + Ok = 'Ok', + LoginRequired = 'LoginRequired', + SecureTokenServerError = 'SecureTokenServerError', +} diff --git a/test/auto-mock.ts b/test/auto-mock.ts new file mode 100644 index 0000000..231ba4a --- /dev/null +++ b/test/auto-mock.ts @@ -0,0 +1,49 @@ +import { Provider } from 'injection-js'; + +export function mockClass(obj: new (...args: any[]) => T): any { + const keys = Object.getOwnPropertyNames(obj.prototype); + const allMethods = keys.filter((key) => { + try { + return typeof obj.prototype[key] === 'function'; + } catch (error) { + return false; + } + }); + const allProperties = keys.filter((x) => !allMethods.includes(x)); + + const mockedClass = class T {}; + + allMethods.forEach( + (method: string) => + ((mockedClass.prototype as any)[method] = (): void => { + return; + }) + ); + + allProperties.forEach((method) => { + Object.defineProperty(mockedClass.prototype, method, { + get() { + return ''; + }, + configurable: true, + }); + }); + + return mockedClass; +} + +export function mockProvider(obj: new (...args: any[]) => T): Provider { + return { + provide: obj, + useClass: mockClass(obj), + }; +} + +export function mockAbstractProvider( + type: abstract new (...args: any[]) => T, + mockType: new (...args: any[]) => M +): Provider { + const mock = mockClass(mockType); + + return { provide: type, useClass: mock }; +} diff --git a/test/create-retriable-stream.helper.ts b/test/create-retriable-stream.helper.ts new file mode 100644 index 0000000..ec6fa36 --- /dev/null +++ b/test/create-retriable-stream.helper.ts @@ -0,0 +1,12 @@ +import { Observable, of } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; + +// Create retriable observable stream to test retry / retryWhen. Credits to: +// https://stackoverflow.com/questions/51399819/how-to-create-a-mock-observable-to-test-http-rxjs-retry-retrywhen-in-angular +export const createRetriableStream = (...resp$: any): Observable => { + const fetchData: jasmine.Spy = jasmine.createSpy('fetchData'); + + fetchData.and.returnValues(...resp$); + + return of(null).pipe(switchMap((_) => fetchData())); +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..79ead0d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "strict": true, + "noEmit": true, + "sourceMap": true, + "declaration": false, + "noFallthroughCasesInSwitch": true, + "experimentalDecorators": true, + "skipLibCheck": true, + "moduleResolution": "bundler", + "target": "ES2015", + "module": "ESNext", + "lib": ["ES2021", "DOM", "DOM.Iterable"], + "useDefineForClassFields": true, + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "paths": { + "injection-js": [ + "./node_modules/injection-js/lib" + ] + } + }, + "include": ["src"] +} diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..6c61a1f --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./dist/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": ["node"], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test.ts", "**/*.spec.ts"] +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..5473296 --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine", "node"] + }, + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +}

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