@softheon/armature 15.23.0 → 17.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -18
- package/assets/styles/_utility.scss +35 -0
- package/assets/styles/material-overrides.scss +0 -1
- package/assets/styles/sof-styles.scss +8 -7
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/alert-banner/components/alert-banner/alert-banner.component.mjs +83 -83
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-context.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/constants.mjs +15 -15
- package/{esm2020 → esm2022}/lib/alert-banner/services/alert-banner.service.mjs +44 -44
- package/esm2022/lib/armature.module.mjs +176 -0
- package/{esm2020 → esm2022}/lib/base-components/base-component-api.mjs +14 -14
- package/esm2022/lib/base-components/base-component.module.mjs +123 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-alert/sof-alert.component.mjs +79 -79
- package/esm2022/lib/base-components/sof-badge/sof-badge.component.mjs +49 -0
- package/esm2022/lib/base-components/sof-banner/sof-banner.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.mjs +188 -188
- package/{esm2020 → esm2022}/lib/base-components/sof-confirm-address/sof-confirm-address.component.mjs +59 -59
- package/esm2022/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +58 -0
- package/esm2022/lib/base-components/sof-modal/sof-modal.component.mjs +57 -0
- package/esm2022/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-radio-card/sof-radio-card.component.mjs +35 -35
- package/{esm2020 → esm2022}/lib/base-components/sof-simple-alert/sof-simple-alert.component.mjs +49 -49
- package/esm2022/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/component-save-print/components/component-save-print/component-save-print.component.mjs +91 -91
- package/{esm2020 → esm2022}/lib/component-save-print/services/component-save-print.service.mjs +30 -30
- package/esm2022/lib/component-save-print/sof-ar-component-save-print.module.mjs +29 -0
- package/{esm2020 → esm2022}/lib/core/client-generated/api/session.service.mjs +242 -242
- package/{esm2020 → esm2022}/lib/core/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/core/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/client-generated/model/applicationUserModel.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/assertedUserModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/brandingModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/errorModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/folderLink.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/identityProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/models.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/oAuthModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/preferencesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/rolesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionGetResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/settingsProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteColorsModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/trackingModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/validationRecordsRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/variables.mjs +8 -8
- package/esm2022/lib/core/components/app-template/app-template.component.mjs +250 -0
- package/{esm2020 → esm2022}/lib/core/functions/guid.mjs +10 -10
- package/{esm2020 → esm2022}/lib/core/functions/naming-convention.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/functions/route-to-pre-login-route.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/initializer/abstract-startup-service.mjs +3 -3
- package/esm2022/lib/core/initializer/initializer.service.mjs +286 -0
- package/{esm2020 → esm2022}/lib/core/interceptors/armature-auth-token-append.interceptor.mjs +73 -73
- package/esm2022/lib/core/models/base-config.mjs +2 -0
- package/esm2022/lib/core/models/constants.mjs +13 -0
- package/{esm2020 → esm2022}/lib/core/models/data-store-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/header-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/http-verbs.mjs +8 -8
- package/{esm2020 → esm2022}/lib/core/models/navigation-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/oidc-auth-settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/route-path.mjs +6 -6
- package/{esm2020 → esm2022}/lib/core/models/session-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/styles.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/subdomain-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/typed-session.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/user-entity-service-config.mjs +11 -11
- package/{esm2020 → esm2022}/lib/core/services/authorization.service.mjs +175 -175
- package/{esm2020 → esm2022}/lib/core/services/banner.service.mjs +43 -43
- package/{esm2020 → esm2022}/lib/core/services/base-config.service.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/services/custom-auth-config.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/services/default-config.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/services/session.service.mjs +385 -385
- package/{esm2020 → esm2022}/lib/core/services/user-entity.service.mjs +140 -140
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/api.mjs +3 -3
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/cache.service.mjs +213 -213
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/cacheExpirationType.mjs +15 -15
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/models.mjs +4 -4
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/distributed-cache-api.mjs +7 -7
- package/esm2022/lib/distributed-cache/distributed-cache.module.mjs +38 -0
- package/{esm2020 → esm2022}/lib/distributed-cache/models/constants.mjs +2 -2
- package/{esm2020 → esm2022}/lib/distributed-cache/models/policy-person.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/services/server-cache.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/error/components/error-common/error-common.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/error/error-api.mjs +6 -6
- package/{esm2020 → esm2022}/lib/error/error.module.mjs +31 -31
- package/{esm2020 → esm2022}/lib/error/models/error-common-config.mjs +7 -7
- package/esm2022/lib/faq/components/faq/faq.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/faq/faq-api.mjs +7 -7
- package/{esm2020 → esm2022}/lib/faq/faq.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/faq/models/faq-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/faq/models/faq.mjs +7 -7
- package/esm2022/lib/feedback-tool/components/feedback-tool/feedback-tool.component.mjs +81 -0
- package/esm2022/lib/feedback-tool/feedback-tool-api.mjs +5 -0
- package/esm2022/lib/feedback-tool/feedback-tool.module.mjs +44 -0
- package/esm2022/lib/footer/components/footer/footer.component.mjs +25 -0
- package/{esm2020 → esm2022}/lib/footer/components/site-map/site-map.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/footer/footer-api.mjs +9 -9
- package/esm2022/lib/footer/footer.module.mjs +45 -0
- package/{esm2020 → esm2022}/lib/footer/models/enum/site-map-direction.mjs +14 -14
- package/{esm2020 → esm2022}/lib/footer/models/footer-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/footer/models/site-map-models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/components/sof-address/sof-address.component.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/alphanumeric/alphanumeric.directive.mjs +78 -78
- package/{esm2020 → esm2022}/lib/forms/directives/input-trim/input-trim.directive.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/letters-characters/letters-characters.directive.mjs +87 -87
- package/{esm2020 → esm2022}/lib/forms/directives/letters-only/letters-only.directive.mjs +85 -85
- package/{esm2020 → esm2022}/lib/forms/directives/numbers-only/numbers-only.directive.mjs +55 -55
- package/{esm2020 → esm2022}/lib/forms/forms-api.mjs +19 -19
- package/esm2022/lib/forms/forms.module.mjs +87 -0
- package/{esm2020 → esm2022}/lib/forms/models/address.mjs +1 -1
- package/esm2022/lib/forms/models/constants.mjs +10 -0
- package/{esm2020 → esm2022}/lib/forms/models/county.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/models/enums/states.mjs +65 -65
- package/{esm2020 → esm2022}/lib/forms/pipes/phone-format.pipe.mjs +33 -33
- package/{esm2020 → esm2022}/lib/forms/services/alert.service.mjs +167 -167
- package/esm2022/lib/header/components/header/header.component.mjs +161 -0
- package/{esm2020 → esm2022}/lib/header/components/mobile-header-menu/mobile-header-menu.component.mjs +39 -39
- package/{esm2020 → esm2022}/lib/header/header-api.mjs +11 -11
- package/esm2022/lib/header/header.module.mjs +85 -0
- package/{esm2020 → esm2022}/lib/header/models/header-auth.settings.mjs +31 -31
- package/{esm2020 → esm2022}/lib/header/models/header-language.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/mobile-header-nav.settings.mjs +1 -1
- package/esm2022/lib/navigation/components/navigation/navigation.component.mjs +556 -0
- package/{esm2020 → esm2022}/lib/navigation/models/nav-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/nav.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/navigation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/navigation-api.mjs +8 -8
- package/esm2022/lib/navigation/navigation.module.mjs +126 -0
- package/{esm2020 → esm2022}/lib/oauth/models/constants.mjs +5 -5
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementRefreshRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/coverageDetail.mjs +18 -18
- package/{esm2020 → esm2022}/lib/oauth/models/generated/finance.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/person.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/policy.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/refreshResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/hybrid-saml-oauth-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/oauth/oauth-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/oauth/oauth.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/oauth/services/hybrid-saml-oauth.service.mjs +201 -201
- package/{esm2020 → esm2022}/lib/rbac/directives/rbac-action.directive.mjs +50 -50
- package/{esm2020 → esm2022}/lib/rbac/models/access-token-claims.mjs +22 -22
- package/{esm2020 → esm2022}/lib/rbac/models/constants.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/decoded-access-token.mjs +68 -68
- package/{esm2020 → esm2022}/lib/rbac/models/rbac-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/role-access.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rbac/rbac-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/rbac/rbac.module.mjs +51 -51
- package/{esm2020 → esm2022}/lib/rbac/services/ar-role-nav.service.mjs +104 -104
- package/{esm2020 → esm2022}/lib/rbac/services/oauth2-role.service.mjs +114 -114
- package/{esm2020 → esm2022}/lib/rbac/services/role-nav.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/services/tokens.mjs +3 -3
- package/{esm2020 → esm2022}/lib/resize-panels/components/resize-panels/resize-panels.component.mjs +156 -156
- package/{esm2020 → esm2022}/lib/resize-panels/models/resize-event.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels-api.mjs +4 -4
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels.module.mjs +23 -23
- package/{esm2020 → esm2022}/lib/rum/models/arm-error.mjs +28 -28
- package/{esm2020 → esm2022}/lib/rum/models/rum-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rum/rum-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rum/rum.module.mjs +48 -48
- package/{esm2020 → esm2022}/lib/rum/services/rum.service.mjs +115 -115
- package/{esm2020 → esm2022}/lib/rum/services/shared-error.service.mjs +45 -45
- package/{esm2020 → esm2022}/lib/rum/services/softheon-error-handler.service.mjs +76 -76
- package/{esm2020 → esm2022}/lib/saml/components/redirect-saml/redirect-saml.component.mjs +79 -79
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-request.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/redirect-saml-request.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/models/sso-gateway-model.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/saml-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/saml/saml.module.mjs +43 -43
- package/{esm2020 → esm2022}/lib/saml/services/entry/abstract-saml-entry.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/entry/sso-gateway-entry.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/saml/services/send-off/abstract-saml.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/send-off/saml.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/constants/constants.mjs +16 -16
- package/{esm2020 → esm2022}/lib/sof-pipe/models/sof-date-pipe-format.mjs +1 -1
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-date/sof-date.pipe.mjs +59 -59
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.mjs +28 -28
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.api.mjs +8 -8
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.module.mjs +39 -39
- package/{esm2020 → esm2022}/lib/theming/directives/css-override.directive.mjs +69 -69
- package/{esm2020 → esm2022}/lib/theming/models/css-override.mjs +10 -10
- package/{esm2020 → esm2022}/lib/theming/services/theme.service.mjs +169 -169
- package/{esm2020 → esm2022}/lib/theming/theme-api.mjs +5 -5
- package/{esm2020 → esm2022}/lib/theming/theme.module.mjs +31 -31
- package/esm2022/public-api.mjs +52 -0
- package/{esm2020 → esm2022}/softheon-armature.mjs +4 -4
- package/fesm2022/softheon-armature.mjs +7439 -0
- package/fesm2022/softheon-armature.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/alert-banner/alert-banner-api.d.ts +7 -7
- package/lib/alert-banner/alert-banner.module.d.ts +11 -11
- package/lib/alert-banner/components/alert-banner/alert-banner.component.d.ts +40 -40
- package/lib/alert-banner/models/alert-banner-config.d.ts +20 -20
- package/lib/alert-banner/models/alert-banner-context.d.ts +18 -18
- package/lib/alert-banner/models/constants.d.ts +15 -15
- package/lib/alert-banner/services/alert-banner.service.d.ts +28 -28
- package/lib/armature.module.d.ts +46 -46
- package/lib/base-components/base-component-api.d.ts +13 -13
- package/lib/base-components/base-component.module.d.ts +35 -35
- package/lib/base-components/sof-alert/sof-alert.component.d.ts +40 -40
- package/lib/base-components/sof-badge/sof-badge.component.d.ts +26 -30
- package/lib/base-components/sof-banner/sof-banner.component.d.ts +34 -34
- package/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.d.ts +100 -100
- package/lib/base-components/sof-confirm-address/sof-confirm-address.component.d.ts +61 -61
- package/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.d.ts +28 -28
- package/lib/base-components/sof-modal/sof-modal.component.d.ts +51 -51
- package/lib/base-components/sof-progress-bar/sof-progress-bar.component.d.ts +40 -40
- package/lib/base-components/sof-radio-card/sof-radio-card.component.d.ts +20 -20
- package/lib/base-components/sof-simple-alert/sof-simple-alert.component.d.ts +29 -29
- package/lib/base-components/sof-star-rating/sof-star-rating.component.d.ts +25 -25
- package/lib/component-save-print/components/component-save-print/component-save-print.component.d.ts +46 -46
- package/lib/component-save-print/services/component-save-print.service.d.ts +18 -18
- package/lib/component-save-print/sof-ar-component-save-print.module.d.ts +9 -9
- package/lib/core/client-generated/api/session.service.d.ts +94 -94
- package/lib/core/client-generated/configuration.d.ts +48 -48
- package/lib/core/client-generated/encoder.d.ts +10 -10
- package/lib/core/client-generated/model/applicationUserModel.d.ts +54 -54
- package/lib/core/client-generated/model/assertedUserModel.d.ts +25 -25
- package/lib/core/client-generated/model/brandingModel.d.ts +33 -33
- package/lib/core/client-generated/model/errorModel.d.ts +24 -24
- package/lib/core/client-generated/model/folderLink.d.ts +34 -34
- package/lib/core/client-generated/model/identityProfile.d.ts +82 -82
- package/lib/core/client-generated/model/models.d.ts +19 -19
- package/lib/core/client-generated/model/oAuthModel.d.ts +28 -28
- package/lib/core/client-generated/model/preferencesRow.d.ts +15 -15
- package/lib/core/client-generated/model/rolesRow.d.ts +17 -17
- package/lib/core/client-generated/model/sessionGetResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPostRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPostResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPutRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPutResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionResponseModel.d.ts +43 -43
- package/lib/core/client-generated/model/settingsProfile.d.ts +21 -21
- package/lib/core/client-generated/model/themePaletteColorsModel.d.ts +72 -72
- package/lib/core/client-generated/model/themePaletteModel.d.ts +65 -65
- package/lib/core/client-generated/model/trackingModel.d.ts +24 -24
- package/lib/core/client-generated/model/validationRecordsRow.d.ts +17 -17
- package/lib/core/client-generated/variables.d.ts +8 -8
- package/lib/core/components/app-template/app-template.component.d.ts +61 -67
- package/lib/core/functions/guid.d.ts +4 -4
- package/lib/core/functions/naming-convention.d.ts +6 -6
- package/lib/core/functions/route-to-pre-login-route.d.ts +6 -6
- package/lib/core/initializer/abstract-startup-service.d.ts +5 -5
- package/lib/core/initializer/initializer.service.d.ts +79 -87
- package/lib/core/interceptors/armature-auth-token-append.interceptor.d.ts +31 -31
- package/lib/core/models/base-config.d.ts +18 -23
- package/lib/core/models/constants.d.ts +13 -17
- package/lib/core/models/data-store-config.d.ts +27 -27
- package/lib/core/models/header-config.d.ts +9 -9
- package/lib/core/models/http-verbs.d.ts +10 -10
- package/lib/core/models/navigation-config.d.ts +14 -14
- package/lib/core/models/oidc-auth-settings.d.ts +11 -11
- package/lib/core/models/route-path.d.ts +5 -5
- package/lib/core/models/session-config.d.ts +18 -18
- package/lib/core/models/styles.d.ts +11 -11
- package/lib/core/models/subdomain-config.d.ts +7 -7
- package/lib/core/models/typed-session.d.ts +17 -17
- package/lib/core/models/user-entity-service-config.d.ts +14 -14
- package/lib/core/services/authorization.service.d.ts +54 -54
- package/lib/core/services/banner.service.d.ts +31 -31
- package/lib/core/services/base-config.service.d.ts +21 -21
- package/lib/core/services/custom-auth-config.service.d.ts +6 -6
- package/lib/core/services/default-config.service.d.ts +8 -8
- package/lib/core/services/session.service.d.ts +127 -127
- package/lib/core/services/user-entity.service.d.ts +47 -47
- package/lib/distributed-cache/client-generated/api/api.d.ts +3 -3
- package/lib/distributed-cache/client-generated/api/cache.service.d.ts +72 -72
- package/lib/distributed-cache/client-generated/configuration.d.ts +48 -48
- package/lib/distributed-cache/client-generated/encoder.d.ts +10 -10
- package/lib/distributed-cache/client-generated/model/cacheExpirationType.d.ts +19 -19
- package/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.d.ts +33 -33
- package/lib/distributed-cache/client-generated/model/models.d.ts +4 -4
- package/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/variables.d.ts +8 -8
- package/lib/distributed-cache/distributed-cache-api.d.ts +7 -7
- package/lib/distributed-cache/distributed-cache.module.d.ts +8 -8
- package/lib/distributed-cache/models/constants.d.ts +2 -2
- package/lib/distributed-cache/models/policy-person.d.ts +19 -19
- package/lib/distributed-cache/services/server-cache.service.d.ts +72 -72
- package/lib/error/components/error-common/error-common.component.d.ts +14 -14
- package/lib/error/error-api.d.ts +4 -4
- package/lib/error/error.module.d.ts +11 -11
- package/lib/error/models/error-common-config.d.ts +21 -21
- package/lib/faq/components/faq/faq.component.d.ts +19 -19
- package/lib/faq/faq-api.d.ts +5 -5
- package/lib/faq/faq.module.d.ts +15 -15
- package/lib/faq/models/faq-config.d.ts +13 -13
- package/lib/faq/models/faq.d.ts +9 -9
- package/lib/feedback-tool/components/feedback-tool/feedback-tool.component.d.ts +62 -0
- package/lib/feedback-tool/feedback-tool-api.d.ts +3 -0
- package/lib/feedback-tool/feedback-tool.module.d.ts +14 -0
- package/lib/footer/components/footer/footer.component.d.ts +14 -14
- package/lib/footer/components/site-map/site-map.component.d.ts +13 -13
- package/lib/footer/footer-api.d.ts +7 -7
- package/lib/footer/footer.module.d.ts +14 -14
- package/lib/footer/models/enum/site-map-direction.d.ts +13 -13
- package/lib/footer/models/footer-config.d.ts +7 -7
- package/lib/footer/models/site-map-models.d.ts +41 -41
- package/lib/forms/components/sof-address/sof-address.component.d.ts +53 -53
- package/lib/forms/directives/alphanumeric/alphanumeric.directive.d.ts +31 -31
- package/lib/forms/directives/input-trim/input-trim.directive.d.ts +58 -58
- package/lib/forms/directives/letters-characters/letters-characters.directive.d.ts +27 -27
- package/lib/forms/directives/letters-only/letters-only.directive.d.ts +27 -27
- package/lib/forms/directives/numbers-only/numbers-only.directive.d.ts +22 -22
- package/lib/forms/forms-api.d.ts +14 -14
- package/lib/forms/forms.module.d.ts +21 -21
- package/lib/forms/models/address.d.ts +14 -14
- package/lib/forms/models/constants.d.ts +9 -9
- package/lib/forms/models/county.d.ts +13 -13
- package/lib/forms/models/enums/states.d.ts +64 -64
- package/lib/forms/pipes/phone-format.pipe.d.ts +10 -10
- package/lib/forms/services/alert.service.d.ts +60 -60
- package/lib/header/components/header/header.component.d.ts +120 -120
- package/lib/header/components/mobile-header-menu/mobile-header-menu.component.d.ts +26 -26
- package/lib/header/header-api.d.ts +9 -9
- package/lib/header/header.module.d.ts +20 -20
- package/lib/header/models/header-auth.settings.d.ts +30 -30
- package/lib/header/models/header-language.settings.d.ts +10 -10
- package/lib/header/models/header-theme.settings.d.ts +19 -19
- package/lib/header/models/header.settings.d.ts +53 -53
- package/lib/header/models/mobile-header-nav.settings.d.ts +11 -11
- package/lib/navigation/components/navigation/navigation.component.d.ts +200 -200
- package/lib/navigation/models/nav-theme.settings.d.ts +25 -25
- package/lib/navigation/models/nav.settings.d.ts +64 -64
- package/lib/navigation/models/navigation.d.ts +40 -40
- package/lib/navigation/navigation-api.d.ts +6 -6
- package/lib/navigation/navigation.module.d.ts +25 -25
- package/lib/oauth/models/constants.d.ts +6 -6
- package/lib/oauth/models/generated/accountManagementAssertionModel.d.ts +49 -49
- package/lib/oauth/models/generated/accountManagementRefreshRequestModel.d.ts +21 -21
- package/lib/oauth/models/generated/accountManagementResponseModel.d.ts +45 -45
- package/lib/oauth/models/generated/coverageDetail.d.ts +67 -67
- package/lib/oauth/models/generated/finance.d.ts +36 -36
- package/lib/oauth/models/generated/iSsoResponseModel.d.ts +44 -44
- package/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.d.ts +45 -45
- package/lib/oauth/models/generated/person.d.ts +53 -53
- package/lib/oauth/models/generated/policy.d.ts +51 -51
- package/lib/oauth/models/generated/refreshResponseModel.d.ts +20 -20
- package/lib/oauth/models/hybrid-saml-oauth-config.d.ts +14 -14
- package/lib/oauth/oauth-api.d.ts +12 -12
- package/lib/oauth/oauth.module.d.ts +9 -9
- package/lib/oauth/services/hybrid-saml-oauth.service.d.ts +59 -59
- package/lib/rbac/directives/rbac-action.directive.d.ts +27 -27
- package/lib/rbac/models/access-token-claims.d.ts +18 -18
- package/lib/rbac/models/constants.d.ts +4 -4
- package/lib/rbac/models/decoded-access-token.d.ts +43 -43
- package/lib/rbac/models/rbac-config.d.ts +15 -15
- package/lib/rbac/models/role-access.d.ts +7 -7
- package/lib/rbac/rbac-api.d.ts +11 -11
- package/lib/rbac/rbac.module.d.ts +19 -19
- package/lib/rbac/services/ar-role-nav.service.d.ts +25 -25
- package/lib/rbac/services/oauth2-role.service.d.ts +51 -51
- package/lib/rbac/services/role-nav.service.d.ts +12 -12
- package/lib/rbac/services/tokens.d.ts +3 -3
- package/lib/resize-panels/components/resize-panels/resize-panels.component.d.ts +64 -64
- package/lib/resize-panels/models/resize-event.d.ts +6 -6
- package/lib/resize-panels/resize-panels-api.d.ts +4 -4
- package/lib/resize-panels/resize-panels.module.d.ts +9 -9
- package/lib/rum/models/arm-error.d.ts +27 -27
- package/lib/rum/models/rum-config.d.ts +9 -9
- package/lib/rum/rum-api.d.ts +7 -7
- package/lib/rum/rum.module.d.ts +14 -14
- package/lib/rum/services/rum.service.d.ts +47 -47
- package/lib/rum/services/shared-error.service.d.ts +27 -27
- package/lib/rum/services/softheon-error-handler.service.d.ts +32 -32
- package/lib/saml/components/redirect-saml/redirect-saml.component.d.ts +41 -41
- package/lib/saml/models/i-saml-request.d.ts +4 -4
- package/lib/saml/models/i-saml-response.d.ts +4 -4
- package/lib/saml/models/redirect-saml-request.d.ts +24 -24
- package/lib/saml/models/sso-gateway-model.d.ts +17 -17
- package/lib/saml/saml-api.d.ts +11 -11
- package/lib/saml/saml.module.d.ts +9 -9
- package/lib/saml/services/entry/abstract-saml-entry.service.d.ts +16 -16
- package/lib/saml/services/entry/sso-gateway-entry.service.d.ts +22 -22
- package/lib/saml/services/send-off/abstract-saml.service.d.ts +20 -20
- package/lib/saml/services/send-off/saml.service.d.ts +32 -32
- package/lib/sof-pipe/constants/constants.d.ts +8 -8
- package/lib/sof-pipe/models/sof-date-pipe-format.d.ts +7 -7
- package/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.d.ts +19 -19
- package/lib/sof-pipe/pipes/sof-date/sof-date.pipe.d.ts +21 -21
- package/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.d.ts +12 -12
- package/lib/sof-pipe/sof-pipe.api.d.ts +7 -7
- package/lib/sof-pipe/sof-pipe.module.d.ts +10 -10
- package/lib/theming/directives/css-override.directive.d.ts +20 -20
- package/lib/theming/models/css-override.d.ts +15 -15
- package/lib/theming/services/theme.service.d.ts +48 -48
- package/lib/theming/theme-api.d.ts +5 -5
- package/lib/theming/theme.module.d.ts +9 -9
- package/package.json +18 -24
- package/public-api.d.ts +49 -48
- package/esm2020/lib/armature.module.mjs +0 -179
- package/esm2020/lib/base-components/base-component.module.mjs +0 -123
- package/esm2020/lib/base-components/sof-badge/sof-badge.component.mjs +0 -60
- package/esm2020/lib/base-components/sof-banner/sof-banner.component.mjs +0 -49
- package/esm2020/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-modal/sof-modal.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +0 -79
- package/esm2020/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +0 -40
- package/esm2020/lib/component-save-print/sof-ar-component-save-print.module.mjs +0 -32
- package/esm2020/lib/core/components/app-template/app-template.component.mjs +0 -258
- package/esm2020/lib/core/initializer/initializer.service.mjs +0 -302
- package/esm2020/lib/core/models/base-config.mjs +0 -2
- package/esm2020/lib/core/models/constants.mjs +0 -17
- package/esm2020/lib/core/models/federated-module-config.mjs +0 -2
- package/esm2020/lib/core/services/federated-module.service.mjs +0 -60
- package/esm2020/lib/distributed-cache/distributed-cache.module.mjs +0 -38
- package/esm2020/lib/faq/components/faq/faq.component.mjs +0 -40
- package/esm2020/lib/footer/components/footer/footer.component.mjs +0 -25
- package/esm2020/lib/footer/footer.module.mjs +0 -45
- package/esm2020/lib/forms/forms.module.mjs +0 -87
- package/esm2020/lib/forms/models/constants.mjs +0 -10
- package/esm2020/lib/header/components/header/header.component.mjs +0 -161
- package/esm2020/lib/header/header.module.mjs +0 -85
- package/esm2020/lib/navigation/components/navigation/navigation.component.mjs +0 -556
- package/esm2020/lib/navigation/navigation.module.mjs +0 -126
- package/esm2020/public-api.mjs +0 -51
- package/fesm2015/softheon-armature.mjs +0 -7372
- package/fesm2015/softheon-armature.mjs.map +0 -1
- package/fesm2020/softheon-armature.mjs +0 -7427
- package/fesm2020/softheon-armature.mjs.map +0 -1
- package/lib/core/models/federated-module-config.d.ts +0 -3
- package/lib/core/services/federated-module.service.d.ts +0 -23
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
import { Injectable, Inject, Optional } from '@angular/core';
|
|
2
|
-
import { DISABLE_ACCESS_FOR_NO_PAGES_ROLE } from './tokens';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/** The armature role navigation service */
|
|
5
|
-
export class ArRoleNavService {
|
|
6
|
-
/** Constructs the service */
|
|
7
|
-
constructor(disableAccessForNoPagesRole) {
|
|
8
|
-
this.disableAccessForNoPagesRole = disableAccessForNoPagesRole;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates a new navigation configuration using the provided RBAC configuration
|
|
12
|
-
* @param defaultNav The default navigation configuration
|
|
13
|
-
* @param rbacConfig The rbac configuration
|
|
14
|
-
* @param roles The roles
|
|
15
|
-
*/
|
|
16
|
-
createRoleControlledNavigation(defaultNav, rbacConfig, roles) {
|
|
17
|
-
const controlledNav = [];
|
|
18
|
-
// flatten role config into one set of pages for all the roles for the user
|
|
19
|
-
const flattenedPages = new Set();
|
|
20
|
-
let roleFound = false;
|
|
21
|
-
roles.forEach(role => {
|
|
22
|
-
const roleConfig = rbacConfig.roleConfig[role];
|
|
23
|
-
if (roleConfig) {
|
|
24
|
-
roleFound = true;
|
|
25
|
-
// if they have at least one role where they have access to everything give access to everything
|
|
26
|
-
if (!roleConfig.pages || roleConfig.pages.length === 0) {
|
|
27
|
-
flattenedPages.clear();
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
roleConfig.pages.forEach(page => {
|
|
31
|
-
flattenedPages.add(page);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
if (flattenedPages.size === 0 && !roleFound) {
|
|
36
|
-
console.warn(`no role matching: ${roles.join(', ')} found, no access is provided`);
|
|
37
|
-
return controlledNav;
|
|
38
|
-
}
|
|
39
|
-
// if the role has no pages assigned for access and the token was passed, deny access to everything
|
|
40
|
-
if (flattenedPages.size === 0 && this.disableAccessForNoPagesRole) {
|
|
41
|
-
console.warn(`The role: ${roles.join(', ')} has no page access defined`);
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
|
-
// if the user has no pages, give them access to all of the stuff
|
|
45
|
-
if (flattenedPages.size === 0 && roleFound) {
|
|
46
|
-
return defaultNav;
|
|
47
|
-
}
|
|
48
|
-
// loop over each level 1 node
|
|
49
|
-
const deepCopyDefaultNav = JSON.parse(JSON.stringify(defaultNav));
|
|
50
|
-
deepCopyDefaultNav.forEach(n1 => {
|
|
51
|
-
// first check which n2 are listed
|
|
52
|
-
const foundSubNodes = [];
|
|
53
|
-
n1.subNodes.forEach(sn => {
|
|
54
|
-
if (this.isRouteMatch(Array.from(flattenedPages.values()), sn.route)) {
|
|
55
|
-
foundSubNodes.push(sn);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
n1.subNodes = foundSubNodes;
|
|
59
|
-
// if level 2 nodes found or level 1 is a route match, add the level 1 node
|
|
60
|
-
if (foundSubNodes.length > 0 || (n1.route && this.isRouteMatch(Array.from(flattenedPages.values()), n1.route))) {
|
|
61
|
-
controlledNav.push(n1);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
return controlledNav;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Determines if the route is found in the pages array
|
|
68
|
-
* @param pages The pages
|
|
69
|
-
* @param route The route
|
|
70
|
-
*/
|
|
71
|
-
isRouteMatch(pages, route) {
|
|
72
|
-
// check wild card
|
|
73
|
-
return pages.some(p => {
|
|
74
|
-
if (p.indexOf('**') > -1) {
|
|
75
|
-
const baseRoute = p.replace('/**/', '')
|
|
76
|
-
.replace('**/', '')
|
|
77
|
-
.replace('/**', '')
|
|
78
|
-
.replace('**', '')
|
|
79
|
-
.toLowerCase();
|
|
80
|
-
if (route.toLowerCase()
|
|
81
|
-
.indexOf(baseRoute) > -1) {
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else if (route.toLowerCase() === p.toLowerCase()) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
94
|
-
type: Injectable,
|
|
95
|
-
args: [{
|
|
96
|
-
providedIn: 'root'
|
|
97
|
-
}]
|
|
98
|
-
}], ctorParameters:
|
|
99
|
-
type: Optional
|
|
100
|
-
}, {
|
|
101
|
-
type: Inject,
|
|
102
|
-
args: [DISABLE_ACCESS_FOR_NO_PAGES_ROLE]
|
|
103
|
-
}] }]
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable, Inject, Optional } from '@angular/core';
|
|
2
|
+
import { DISABLE_ACCESS_FOR_NO_PAGES_ROLE } from './tokens';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** The armature role navigation service */
|
|
5
|
+
export class ArRoleNavService {
|
|
6
|
+
/** Constructs the service */
|
|
7
|
+
constructor(disableAccessForNoPagesRole) {
|
|
8
|
+
this.disableAccessForNoPagesRole = disableAccessForNoPagesRole;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new navigation configuration using the provided RBAC configuration
|
|
12
|
+
* @param defaultNav The default navigation configuration
|
|
13
|
+
* @param rbacConfig The rbac configuration
|
|
14
|
+
* @param roles The roles
|
|
15
|
+
*/
|
|
16
|
+
createRoleControlledNavigation(defaultNav, rbacConfig, roles) {
|
|
17
|
+
const controlledNav = [];
|
|
18
|
+
// flatten role config into one set of pages for all the roles for the user
|
|
19
|
+
const flattenedPages = new Set();
|
|
20
|
+
let roleFound = false;
|
|
21
|
+
roles.forEach(role => {
|
|
22
|
+
const roleConfig = rbacConfig.roleConfig[role];
|
|
23
|
+
if (roleConfig) {
|
|
24
|
+
roleFound = true;
|
|
25
|
+
// if they have at least one role where they have access to everything give access to everything
|
|
26
|
+
if (!roleConfig.pages || roleConfig.pages.length === 0) {
|
|
27
|
+
flattenedPages.clear();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
roleConfig.pages.forEach(page => {
|
|
31
|
+
flattenedPages.add(page);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (flattenedPages.size === 0 && !roleFound) {
|
|
36
|
+
console.warn(`no role matching: ${roles.join(', ')} found, no access is provided`);
|
|
37
|
+
return controlledNav;
|
|
38
|
+
}
|
|
39
|
+
// if the role has no pages assigned for access and the token was passed, deny access to everything
|
|
40
|
+
if (flattenedPages.size === 0 && this.disableAccessForNoPagesRole) {
|
|
41
|
+
console.warn(`The role: ${roles.join(', ')} has no page access defined`);
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
// if the user has no pages, give them access to all of the stuff
|
|
45
|
+
if (flattenedPages.size === 0 && roleFound) {
|
|
46
|
+
return defaultNav;
|
|
47
|
+
}
|
|
48
|
+
// loop over each level 1 node
|
|
49
|
+
const deepCopyDefaultNav = JSON.parse(JSON.stringify(defaultNav));
|
|
50
|
+
deepCopyDefaultNav.forEach(n1 => {
|
|
51
|
+
// first check which n2 are listed
|
|
52
|
+
const foundSubNodes = [];
|
|
53
|
+
n1.subNodes.forEach(sn => {
|
|
54
|
+
if (this.isRouteMatch(Array.from(flattenedPages.values()), sn.route)) {
|
|
55
|
+
foundSubNodes.push(sn);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
n1.subNodes = foundSubNodes;
|
|
59
|
+
// if level 2 nodes found or level 1 is a route match, add the level 1 node
|
|
60
|
+
if (foundSubNodes.length > 0 || (n1.route && this.isRouteMatch(Array.from(flattenedPages.values()), n1.route))) {
|
|
61
|
+
controlledNav.push(n1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return controlledNav;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Determines if the route is found in the pages array
|
|
68
|
+
* @param pages The pages
|
|
69
|
+
* @param route The route
|
|
70
|
+
*/
|
|
71
|
+
isRouteMatch(pages, route) {
|
|
72
|
+
// check wild card
|
|
73
|
+
return pages.some(p => {
|
|
74
|
+
if (p.indexOf('**') > -1) {
|
|
75
|
+
const baseRoute = p.replace('/**/', '')
|
|
76
|
+
.replace('**/', '')
|
|
77
|
+
.replace('/**', '')
|
|
78
|
+
.replace('**', '')
|
|
79
|
+
.toLowerCase();
|
|
80
|
+
if (route.toLowerCase()
|
|
81
|
+
.indexOf(baseRoute) > -1) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (route.toLowerCase() === p.toLowerCase()) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ArRoleNavService, deps: [{ token: DISABLE_ACCESS_FOR_NO_PAGES_ROLE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
91
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ArRoleNavService, providedIn: 'root' }); }
|
|
92
|
+
}
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ArRoleNavService, decorators: [{
|
|
94
|
+
type: Injectable,
|
|
95
|
+
args: [{
|
|
96
|
+
providedIn: 'root'
|
|
97
|
+
}]
|
|
98
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
99
|
+
type: Optional
|
|
100
|
+
}, {
|
|
101
|
+
type: Inject,
|
|
102
|
+
args: [DISABLE_ACCESS_FOR_NO_PAGES_ROLE]
|
|
103
|
+
}] }] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXItcm9sZS1uYXYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvcmJhYy9zZXJ2aWNlcy9hci1yb2xlLW5hdi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRTVELDJDQUEyQztBQUkzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLDZCQUE2QjtJQUM3QixZQUNnRSwyQkFBcUM7UUFBckMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFVO0lBQ2pHLENBQUM7SUFFTDs7Ozs7T0FLRztJQUNJLDhCQUE4QixDQUFDLFVBQTBCLEVBQUUsVUFBc0IsRUFBRSxLQUFvQjtRQUM1RyxNQUFNLGFBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ3pDLDJFQUEyRTtRQUMzRSxNQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0RCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksVUFBVSxFQUFFO2dCQUNkLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLGdHQUFnRztnQkFDaEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN0RCxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBRXZCLE9BQU87aUJBQ1I7Z0JBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxD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LENBQUM7YUFDYjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FoR1UsZ0JBQWdCLGtCQUlMLGdDQUFnQztrSEFKM0MsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBS0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdk5vZGUgfSBmcm9tICcuLi8uLi9uYXZpZ2F0aW9uL21vZGVscy9uYXZpZ2F0aW9uJztcclxuaW1wb3J0IHsgUmJhY0NvbmZpZyB9IGZyb20gJy4uL21vZGVscy9yYmFjLWNvbmZpZyc7XHJcbmltcG9ydCB7IFJvbGVOYXZTZXJ2aWNlIH0gZnJvbSAnLi9yb2xlLW5hdi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRElTQUJMRV9BQ0NFU1NfRk9SX05PX1BBR0VTX1JPTEUgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG4vKiogVGhlIGFybWF0dXJlIHJvbGUgbmF2aWdhdGlvbiBzZXJ2aWNlICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyUm9sZU5hdlNlcnZpY2UgaW1wbGVtZW50cyBSb2xlTmF2U2VydmljZSB7XHJcblxyXG4gIC8qKiBDb25zdHJ1Y3RzIHRoZSBzZXJ2aWNlICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERJU0FCTEVfQUNDRVNTX0ZPUl9OT19QQUdFU19ST0xFKSBwcml2YXRlIGRpc2FibGVBY2Nlc3NGb3JOb1BhZ2VzUm9sZSA6IGJvb2xlYW4gKSBcclxuICAgIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgUkJBQyBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIGRlZmF1bHROYXYgVGhlIGRlZmF1bHQgbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIHJiYWNDb25maWcgVGhlIHJiYWMgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSByb2xlcyBUaGUgcm9sZXNcclxuICAgKi9cclxuICBwdWJsaWMgY3JlYXRlUm9sZUNvbnRyb2xsZWROYXZpZ2F0aW9uKGRlZmF1bHROYXY6IEFycmF5PE5hdk5vZGU+LCByYmFjQ29uZmlnOiBSYmFjQ29uZmlnLCByb2xlczogQXJyYXk8c3RyaW5nPik6IEFycmF5PE5hdk5vZGU+IHtcclxuICAgIGNvbnN0IGNvbnRyb2xsZWROYXY6IEFycmF5PE5hdk5vZGU+ID0gW107XHJcbiAgICAvLyBmbGF0dGVuIHJvbGUgY29uZmlnIGludG8gb25lIHNldCBvZiBwYWdlcyBmb3IgYWxsIHRoZSByb2xlcyBmb3IgdGhlIHVzZXJcclxuICAgIGNvbnN0IGZsYXR0ZW5lZFBhZ2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgbGV0IHJvbGVGb3VuZCA9IGZhbHNlO1xyXG4gICAgcm9sZXMuZm9yRWFjaChyb2xlID0+IHtcclxuICAgICAgY29uc3Qgcm9sZUNvbmZpZyA9IHJiYWNDb25maWcucm9sZUNvbmZpZ1tyb2xlXTtcclxuICAgICAgaWYgKHJvbGVDb25maWcpIHtcclxuICAgICAgICByb2xlRm91bmQgPSB0cnVlO1xyXG4gICAgICAgIC8vIGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcm9sZSB3aGVyZSB0aGV5IGhhdmUgYWNjZXNzIHRvIGV2ZXJ5dGhpbmcgZ2l2ZSBhY2Nlc3MgdG8gZXZlcnl0aGluZ1xyXG4gICAgICAgIGlmICghcm9sZUNvbmZpZy5wYWdlcyB8fCByb2xlQ29uZmlnLnBhZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgZmxhdHRlbmVkUGFnZXMuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvbGVDb25maWcucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcclxuICAgICAgICAgIGZsYXR0ZW5lZFBhZ2VzLmFkZChwYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmxhdHRlbmVkUGFnZXMuc2l6ZSA9PT0gMCAmJiAhcm9sZUZvdW5kKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybihgbm8gcm9sZSBtYXRjaGluZzogJHtyb2xlcy5qb2luKCcsICcpfSBmb3VuZCwgbm8gYWNjZXNzIGlzIHByb3ZpZGVkYCk7XHJcblxyXG4gICAgICByZXR1cm4gY29udHJvbGxlZE5hdjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgcm9sZSBoYXMgbm8gcGFnZXMgYXNzaWduZWQgZm9yIGFjY2VzcyBhbmQgdGhlIHRva2VuIHdhcyBwYXNzZWQsIGRlbnkgYWNjZXNzIHRvIGV2ZXJ5dGhpbmdcclxuICAgIGlmIChmbGF0dGVuZWRQYWdlcy5zaXplID09PSAwICYmIHRoaXMuZGlzYWJsZUFjY2Vzc0Zvck5vUGFnZXNSb2xlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgVGhlIHJvbGU6ICR7cm9sZXMuam9pbignLCAnKX0gaGFzIG5vIHBhZ2UgYWNjZXNzIGRlZmluZWRgKTtcclxuXHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gaWYgdGhlIHVzZXIgaGFzIG5vIHBhZ2VzLCBnaXZlIHRoZW0gYWNjZXNzIHRvIGFsbCBvZiB0aGUgc3R1ZmZcclxuICAgIGlmIChmbGF0dGVuZWRQYWdlcy5zaXplID09PSAwICYmIHJvbGVGb3VuZCkge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdE5hdjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsb29wIG92ZXIgZWFjaCBsZXZlbCAxIG5vZGVcclxuICAgIGNvbnN0IGRlZXBDb3B5RGVmYXVsdE5hdjogQXJyYXk8TmF2Tm9kZT4gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHROYXYpKTtcclxuICAgIGRlZXBDb3B5RGVmYXVsdE5hdi5mb3JFYWNoKG4xID0+IHtcclxuICAgICAgLy8gZmlyc3QgY2hlY2sgd2hpY2ggbjIgYXJlIGxpc3RlZFxyXG4gICAgICBjb25zdCBmb3VuZFN1Yk5vZGVzID0gW107XHJcbiAgICAgIG4xLnN1Yk5vZGVzLmZvckVhY2goc24gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUm91dGVNYXRjaChBcnJheS5mcm9tKGZsYXR0ZW5lZFBhZ2VzLnZhbHVlcygpKSwgc24ucm91dGUpKSB7XHJcbiAgICAgICAgICBmb3VuZFN1Yk5vZGVzLnB1c2goc24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuMS5zdWJOb2RlcyA9IGZvdW5kU3ViTm9kZXM7XHJcbiAgICAgIC8vIGlmIGxldmVsIDIgbm9kZXMgZm91bmQgb3IgbGV2ZWwgMSBpcyBhIHJvdXRlIG1hdGNoLCBhZGQgdGhlIGxldmVsIDEgbm9kZVxyXG4gICAgICBpZiAoZm91bmRTdWJOb2Rlcy5sZW5ndGggPiAwIHx8IChuMS5yb3V0ZSAmJiB0aGlzLmlzUm91dGVNYXRjaChBcnJheS5mcm9tKGZsYXR0ZW5lZFBhZ2VzLnZhbHVlcygpKSwgbjEucm91dGUpKSkge1xyXG4gICAgICAgIGNvbnRyb2xsZWROYXYucHVzaChuMSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjb250cm9sbGVkTmF2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcm91dGUgaXMgZm91bmQgaW4gdGhlIHBhZ2VzIGFycmF5XHJcbiAgICogQHBhcmFtIHBhZ2VzIFRoZSBwYWdlc1xyXG4gICAqIEBwYXJhbSByb3V0ZSBUaGUgcm91dGVcclxuICAgKi9cclxuICBwcml2YXRlIGlzUm91dGVNYXRjaChwYWdlczogQXJyYXk8c3RyaW5nPiwgcm91dGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gY2hlY2sgd2lsZCBjYXJkXHJcbiAgICByZXR1cm4gcGFnZXMuc29tZShwID0+IHtcclxuICAgICAgaWYgKHAuaW5kZXhPZignKionKSA+IC0xKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZVJvdXRlID0gcC5yZXBsYWNlKCcvKiovJywgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgnKiovJywgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgnLyoqJywgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgnKionLCAnJylcclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiAocm91dGUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgLmluZGV4T2YoYmFzZVJvdXRlKSA+IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocm91dGUudG9Mb3dlckNhc2UoKSA9PT0gcC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
-
import { Injectable, Optional } from '@angular/core';
|
|
3
|
-
import { of, ReplaySubject } from 'rxjs';
|
|
4
|
-
import { catchError, map } from 'rxjs/operators';
|
|
5
|
-
import { DecodedAccessToken } from '../models/decoded-access-token';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../models/rbac-config";
|
|
8
|
-
import * as i2 from "@angular/common/http";
|
|
9
|
-
import * as i3 from "./role-nav.service";
|
|
10
|
-
/**
|
|
11
|
-
* The oauth 2 role service
|
|
12
|
-
* Supplies the role using an OAuth 2.0 access token
|
|
13
|
-
*/
|
|
14
|
-
export class Oauth2RoleService {
|
|
15
|
-
/**
|
|
16
|
-
* Constructs the service
|
|
17
|
-
* @param rbacConfig The rbac configurations
|
|
18
|
-
* @param httpClient The http client
|
|
19
|
-
* @param roleNavService The role nav service
|
|
20
|
-
*/
|
|
21
|
-
constructor(rbacConfig, httpClient, roleNavService) {
|
|
22
|
-
this.rbacConfig = rbacConfig;
|
|
23
|
-
this.httpClient = httpClient;
|
|
24
|
-
this.roleNavService = roleNavService;
|
|
25
|
-
/** True if configs were provided at construction */
|
|
26
|
-
this.configsProvidedAtConstruction = false;
|
|
27
|
-
/** The decoded access token behavior subject */
|
|
28
|
-
this.decodeToken = new ReplaySubject(undefined);
|
|
29
|
-
// get the token initially then update it based on injected refresh time
|
|
30
|
-
this.decodedToken$ = this.decodeToken.asObservable();
|
|
31
|
-
if (this.rbacConfig) {
|
|
32
|
-
this.configsProvidedAtConstruction = true;
|
|
33
|
-
this.init();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Gets the role controlled navigation configuration
|
|
38
|
-
* @param defaultNav The default navigation
|
|
39
|
-
* @param roles The roles of the user
|
|
40
|
-
*/
|
|
41
|
-
getControlledNavObject(defaultNav, roles) {
|
|
42
|
-
return this.roleNavService.createRoleControlledNavigation(defaultNav, this.rbacConfig, roles);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Configures the service
|
|
46
|
-
* @param rbacConfig The rbac config
|
|
47
|
-
*/
|
|
48
|
-
configure(rbacConfig) {
|
|
49
|
-
this.rbacConfig = rbacConfig;
|
|
50
|
-
this.init();
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Determines if the current token has access to the action
|
|
54
|
-
* @param action The action to check access for
|
|
55
|
-
*/
|
|
56
|
-
hasActionAccess(action) {
|
|
57
|
-
if (this.rbacConfig.disableRoleActions) {
|
|
58
|
-
return of(true);
|
|
59
|
-
}
|
|
60
|
-
return this.decodedToken$.pipe(map(token => {
|
|
61
|
-
const roles = token.claims.getRole;
|
|
62
|
-
// if no roles, no action access
|
|
63
|
-
if (!roles || roles.length === 0) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
// flatten role config into one set of actions for all the actions for the user
|
|
67
|
-
const flattenedActions = new Set();
|
|
68
|
-
roles.forEach(role => {
|
|
69
|
-
const roleConfig = this.rbacConfig.roleConfig[role];
|
|
70
|
-
if (!roleConfig || !roleConfig.actions || !roleConfig.actions.length) {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
roleConfig.actions.forEach(a => flattenedActions.add(a.toLowerCase()));
|
|
74
|
-
});
|
|
75
|
-
return flattenedActions.has(action.toLowerCase());
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
|
-
/** Initializer logic for the service */
|
|
79
|
-
async init() {
|
|
80
|
-
this.rbacConfig.accessToken$.subscribe(token => {
|
|
81
|
-
this.token = token;
|
|
82
|
-
if (!this.token) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
const decoded = new DecodedAccessToken(this.token);
|
|
86
|
-
// create the headers for the user info call with the existing access token
|
|
87
|
-
const headers = new HttpHeaders({ Authorization: `Bearer ${this.token}`, 'Access-Control-Allow-Origin': '*' });
|
|
88
|
-
this.httpClient.get(this.rbacConfig.userInfoEndpoint, { headers })
|
|
89
|
-
.pipe(
|
|
90
|
-
// map the results to the props
|
|
91
|
-
map(res => {
|
|
92
|
-
decoded.claims = res;
|
|
93
|
-
this.decodeToken.next(decoded);
|
|
94
|
-
}),
|
|
95
|
-
// continue on error and log to console
|
|
96
|
-
catchError(error => {
|
|
97
|
-
console.error(`Unable to retrieve user info for: ${this.token}`, error);
|
|
98
|
-
return of(error);
|
|
99
|
-
}))
|
|
100
|
-
.subscribe();
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
107
|
-
type: Injectable,
|
|
108
|
-
args: [{
|
|
109
|
-
providedIn: 'root'
|
|
110
|
-
}]
|
|
111
|
-
}], ctorParameters:
|
|
112
|
-
type: Optional
|
|
113
|
-
}] }, { type: i2.HttpClient }, { type: i3.RoleNavService }]
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLXJvbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvcmJhYy9zZXJ2aWNlcy9vYXV0aDItcm9sZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQVUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUlwRTs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBYzVCOzs7OztPQUtHO0lBQ0gsWUFDc0IsVUFBc0IsRUFDekIsVUFBc0IsRUFDdEIsY0FBOEI7UUFGM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXJCakQsb0RBQW9EO1FBQzVDLGtDQUE2QixHQUFZLEtBQUssQ0FBQztRQUV2RCxnREFBZ0Q7UUFDL0IsZ0JBQVcsR0FBc0MsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFtQjdGLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHNCQUFzQixDQUFDLFVBQTBCLEVBQUUsS0FBb0I7UUFDMUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsVUFBc0I7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxNQUFjO1FBQ25DLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtZQUN0QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ25DLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsK0VBQStFO1lBQy9FLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7WUFDeEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7b0JBQ3BFLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELHdDQUF3QztJQUNoQyxLQUFLLENBQUMsSUFBSTtRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2YsT0FBTzthQUNSO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbkQsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDL0csSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQW9CLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztpQkFDbEYsSUFBSTtZQUNILCtCQUErQjtZQUMvQixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztZQUNGLHVDQUF1QztZQUN2QyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFeEUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7aUJBQ0osU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0ExR1UsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzQkksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2Tm9kZSB9IGZyb20gJy4uLy4uL25hdmlnYXRpb24vbmF2aWdhdGlvbi1hcGknO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkNsYWltcyB9IGZyb20gJy4uL21vZGVscy9hY2Nlc3MtdG9rZW4tY2xhaW1zJztcclxuaW1wb3J0IHsgUkJBQ19DT05GSUcgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGVjb2RlZEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi4vbW9kZWxzL2RlY29kZWQtYWNjZXNzLXRva2VuJztcclxuaW1wb3J0IHsgUmJhY0NvbmZpZyB9IGZyb20gJy4uL21vZGVscy9yYmFjLWNvbmZpZyc7XHJcbmltcG9ydCB7IFJvbGVOYXZTZXJ2aWNlIH0gZnJvbSAnLi9yb2xlLW5hdi5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgb2F1dGggMiByb2xlIHNlcnZpY2VcclxuICogU3VwcGxpZXMgdGhlIHJvbGUgdXNpbmcgYW4gT0F1dGggMi4wIGFjY2VzcyB0b2tlblxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT2F1dGgyUm9sZVNlcnZpY2Uge1xyXG5cclxuICAvKiogVHJ1ZSBpZiBjb25maWdzIHdlcmUgcHJvdmlkZWQgYXQgY29uc3RydWN0aW9uICovXHJcbiAgcHJpdmF0ZSBjb25maWdzUHJvdmlkZWRBdENvbnN0cnVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVGhlIGRlY29kZWQgYWNjZXNzIHRva2VuIGJlaGF2aW9yIHN1YmplY3QgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlY29kZVRva2VuOiBSZXBsYXlTdWJqZWN0PERlY29kZWRBY2Nlc3NUb2tlbj4gPSBuZXcgUmVwbGF5U3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICAvKiogVGhlIGN1cnJlbnQgYWNjZXNzIHRva2VuICovXHJcbiAgcHVibGljIHRva2VuOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUaGUgZGVjb2RlZCBhY2Nlc3MgdG9rZW4gKi9cclxuICBwdWJsaWMgZGVjb2RlZFRva2VuJDogT2JzZXJ2YWJsZTxEZWNvZGVkQWNjZXNzVG9rZW4+O1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHJiYWNDb25maWcgVGhlIHJiYWMgY29uZmlndXJhdGlvbnNcclxuICAgKiBAcGFyYW0gaHR0cENsaWVudCBUaGUgaHR0cCBjbGllbnRcclxuICAgKiBAcGFyYW0gcm9sZU5hdlNlcnZpY2UgVGhlIHJvbGUgbmF2IHNlcnZpY2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmJhY0NvbmZpZzogUmJhY0NvbmZpZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9sZU5hdlNlcnZpY2U6IFJvbGVOYXZTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICAvLyBnZXQgdGhlIHRva2VuIGluaXRpYWxseSB0aGVuIHVwZGF0ZSBpdCBiYXNlZCBvbiBpbmplY3RlZCByZWZyZXNoIHRpbWVcclxuICAgIHRoaXMuZGVjb2RlZFRva2VuJCA9IHRoaXMuZGVjb2RlVG9rZW4uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5yYmFjQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnc1Byb3ZpZGVkQXRDb25zdHJ1Y3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJvbGUgY29udHJvbGxlZCBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0gZGVmYXVsdE5hdiBUaGUgZGVmYXVsdCBuYXZpZ2F0aW9uXHJcbiAgICogQHBhcmFtIHJvbGVzIFRoZSByb2xlcyBvZiB0aGUgdXNlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb250cm9sbGVkTmF2T2JqZWN0KGRlZmF1bHROYXY6IEFycmF5PE5hdk5vZGU+LCByb2xlczogQXJyYXk8c3RyaW5nPik6IEFycmF5PE5hdk5vZGU+IHtcclxuICAgICAgcmV0dXJuIHRoaXMucm9sZU5hdlNlcnZpY2UuY3JlYXRlUm9sZUNvbnRyb2xsZWROYXZpZ2F0aW9uKGRlZmF1bHROYXYsIHRoaXMucmJhY0NvbmZpZywgcm9sZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlcyB0aGUgc2VydmljZVxyXG4gICAqIEBwYXJhbSByYmFjQ29uZmlnIFRoZSByYmFjIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25maWd1cmUocmJhY0NvbmZpZzogUmJhY0NvbmZpZyk6IHZvaWQge1xyXG4gICAgdGhpcy5yYmFjQ29uZmlnID0gcmJhY0NvbmZpZztcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCB0b2tlbiBoYXMgYWNjZXNzIHRvIHRoZSBhY3Rpb25cclxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gY2hlY2sgYWNjZXNzIGZvclxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNBY3Rpb25BY2Nlc3MoYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnJiYWNDb25maWcuZGlzYWJsZVJvbGVBY3Rpb25zKSB7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVkVG9rZW4kLnBpcGUobWFwKHRva2VuID0+IHtcclxuICAgICAgY29uc3Qgcm9sZXMgPSB0b2tlbi5jbGFpbXMuZ2V0Um9sZTtcclxuICAgICAgLy8gaWYgbm8gcm9sZXMsIG5vIGFjdGlvbiBhY2Nlc3NcclxuICAgICAgaWYgKCFyb2xlcyB8fCByb2xlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZmxhdHRlbiByb2xlIGNvbmZpZyBpbnRvIG9uZSBzZXQgb2YgYWN0aW9ucyBmb3IgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlclxyXG4gICAgICBjb25zdCBmbGF0dGVuZWRBY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgICByb2xlcy5mb3JFYWNoKHJvbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvbGVDb25maWcgPSB0aGlzLnJiYWNDb25maWcucm9sZUNvbmZpZ1tyb2xlXTtcclxuICAgICAgICBpZiAoIXJvbGVDb25maWcgfHwgIXJvbGVDb25maWcuYWN0aW9ucyB8fCAhcm9sZUNvbmZpZy5hY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb2xlQ29uZmlnLmFjdGlvbnMuZm9yRWFjaChhID0+IGZsYXR0ZW5lZEFjdGlvbnMuYWRkKGEudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBmbGF0dGVuZWRBY3Rpb25zLmhhcyhhY3Rpb24udG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlICovXHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLnJiYWNDb25maWcuYWNjZXNzVG9rZW4kLnN1YnNjcmliZSh0b2tlbiA9PiB7XHJcbiAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcclxuICAgICAgaWYgKCF0aGlzLnRva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBuZXcgRGVjb2RlZEFjY2Vzc1Rva2VuKHRoaXMudG9rZW4pO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIHRoZSBoZWFkZXJzIGZvciB0aGUgdXNlciBpbmZvIGNhbGwgd2l0aCB0aGUgZXhpc3RpbmcgYWNjZXNzIHRva2VuXHJcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLCAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonIH0pO1xyXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0PEFjY2Vzc1Rva2VuQ2xhaW1zPih0aGlzLnJiYWNDb25maWcudXNlckluZm9FbmRwb2ludCwgeyBoZWFkZXJzIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAvLyBtYXAgdGhlIHJlc3VsdHMgdG8gdGhlIHByb3BzXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgZGVjb2RlZC5jbGFpbXMgPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlVG9rZW4ubmV4dChkZWNvZGVkKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgLy8gY29udGludWUgb24gZXJyb3IgYW5kIGxvZyB0byBjb25zb2xlXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIHJldHJpZXZlIHVzZXIgaW5mbyBmb3I6ICR7dGhpcy50b2tlbn1gLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
1
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Injectable, Optional } from '@angular/core';
|
|
3
|
+
import { of, ReplaySubject } from 'rxjs';
|
|
4
|
+
import { catchError, map } from 'rxjs/operators';
|
|
5
|
+
import { DecodedAccessToken } from '../models/decoded-access-token';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../models/rbac-config";
|
|
8
|
+
import * as i2 from "@angular/common/http";
|
|
9
|
+
import * as i3 from "./role-nav.service";
|
|
10
|
+
/**
|
|
11
|
+
* The oauth 2 role service
|
|
12
|
+
* Supplies the role using an OAuth 2.0 access token
|
|
13
|
+
*/
|
|
14
|
+
export class Oauth2RoleService {
|
|
15
|
+
/**
|
|
16
|
+
* Constructs the service
|
|
17
|
+
* @param rbacConfig The rbac configurations
|
|
18
|
+
* @param httpClient The http client
|
|
19
|
+
* @param roleNavService The role nav service
|
|
20
|
+
*/
|
|
21
|
+
constructor(rbacConfig, httpClient, roleNavService) {
|
|
22
|
+
this.rbacConfig = rbacConfig;
|
|
23
|
+
this.httpClient = httpClient;
|
|
24
|
+
this.roleNavService = roleNavService;
|
|
25
|
+
/** True if configs were provided at construction */
|
|
26
|
+
this.configsProvidedAtConstruction = false;
|
|
27
|
+
/** The decoded access token behavior subject */
|
|
28
|
+
this.decodeToken = new ReplaySubject(undefined);
|
|
29
|
+
// get the token initially then update it based on injected refresh time
|
|
30
|
+
this.decodedToken$ = this.decodeToken.asObservable();
|
|
31
|
+
if (this.rbacConfig) {
|
|
32
|
+
this.configsProvidedAtConstruction = true;
|
|
33
|
+
this.init();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets the role controlled navigation configuration
|
|
38
|
+
* @param defaultNav The default navigation
|
|
39
|
+
* @param roles The roles of the user
|
|
40
|
+
*/
|
|
41
|
+
getControlledNavObject(defaultNav, roles) {
|
|
42
|
+
return this.roleNavService.createRoleControlledNavigation(defaultNav, this.rbacConfig, roles);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configures the service
|
|
46
|
+
* @param rbacConfig The rbac config
|
|
47
|
+
*/
|
|
48
|
+
configure(rbacConfig) {
|
|
49
|
+
this.rbacConfig = rbacConfig;
|
|
50
|
+
this.init();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Determines if the current token has access to the action
|
|
54
|
+
* @param action The action to check access for
|
|
55
|
+
*/
|
|
56
|
+
hasActionAccess(action) {
|
|
57
|
+
if (this.rbacConfig.disableRoleActions) {
|
|
58
|
+
return of(true);
|
|
59
|
+
}
|
|
60
|
+
return this.decodedToken$.pipe(map(token => {
|
|
61
|
+
const roles = token.claims.getRole;
|
|
62
|
+
// if no roles, no action access
|
|
63
|
+
if (!roles || roles.length === 0) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// flatten role config into one set of actions for all the actions for the user
|
|
67
|
+
const flattenedActions = new Set();
|
|
68
|
+
roles.forEach(role => {
|
|
69
|
+
const roleConfig = this.rbacConfig.roleConfig[role];
|
|
70
|
+
if (!roleConfig || !roleConfig.actions || !roleConfig.actions.length) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
roleConfig.actions.forEach(a => flattenedActions.add(a.toLowerCase()));
|
|
74
|
+
});
|
|
75
|
+
return flattenedActions.has(action.toLowerCase());
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
/** Initializer logic for the service */
|
|
79
|
+
async init() {
|
|
80
|
+
this.rbacConfig.accessToken$.subscribe(token => {
|
|
81
|
+
this.token = token;
|
|
82
|
+
if (!this.token) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const decoded = new DecodedAccessToken(this.token);
|
|
86
|
+
// create the headers for the user info call with the existing access token
|
|
87
|
+
const headers = new HttpHeaders({ Authorization: `Bearer ${this.token}`, 'Access-Control-Allow-Origin': '*' });
|
|
88
|
+
this.httpClient.get(this.rbacConfig.userInfoEndpoint, { headers })
|
|
89
|
+
.pipe(
|
|
90
|
+
// map the results to the props
|
|
91
|
+
map(res => {
|
|
92
|
+
decoded.claims = res;
|
|
93
|
+
this.decodeToken.next(decoded);
|
|
94
|
+
}),
|
|
95
|
+
// continue on error and log to console
|
|
96
|
+
catchError(error => {
|
|
97
|
+
console.error(`Unable to retrieve user info for: ${this.token}`, error);
|
|
98
|
+
return of(error);
|
|
99
|
+
}))
|
|
100
|
+
.subscribe();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Oauth2RoleService, deps: [{ token: i1.RbacConfig, optional: true }, { token: i2.HttpClient }, { token: i3.RoleNavService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
104
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Oauth2RoleService, providedIn: 'root' }); }
|
|
105
|
+
}
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Oauth2RoleService, decorators: [{
|
|
107
|
+
type: Injectable,
|
|
108
|
+
args: [{
|
|
109
|
+
providedIn: 'root'
|
|
110
|
+
}]
|
|
111
|
+
}], ctorParameters: () => [{ type: i1.RbacConfig, decorators: [{
|
|
112
|
+
type: Optional
|
|
113
|
+
}] }, { type: i2.HttpClient }, { type: i3.RoleNavService }] });
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLXJvbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvcmJhYy9zZXJ2aWNlcy9vYXV0aDItcm9sZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQVUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUlwRTs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBYzVCOzs7OztPQUtHO0lBQ0gsWUFDc0IsVUFBc0IsRUFDekIsVUFBc0IsRUFDdEIsY0FBOEI7UUFGM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXJCakQsb0RBQW9EO1FBQzVDLGtDQUE2QixHQUFZLEtBQUssQ0FBQztRQUV2RCxnREFBZ0Q7UUFDL0IsZ0JBQVcsR0FBc0MsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFtQjdGLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7Ozs7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QUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFeEUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7aUJBQ0osU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTFHVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzQkksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2Tm9kZSB9IGZyb20gJy4uLy4uL25hdmlnYXRpb24vbmF2aWdhdGlvbi1hcGknO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkNsYWltcyB9IGZyb20gJy4uL21vZGVscy9hY2Nlc3MtdG9rZW4tY2xhaW1zJztcclxuaW1wb3J0IHsgUkJBQ19DT05GSUcgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGVjb2RlZEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi4vbW9kZWxzL2RlY29kZWQtYWNjZXNzLXRva2VuJztcclxuaW1wb3J0IHsgUmJhY0NvbmZpZyB9IGZyb20gJy4uL21vZGVscy9yYmFjLWNvbmZpZyc7XHJcbmltcG9ydCB7IFJvbGVOYXZTZXJ2aWNlIH0gZnJvbSAnLi9yb2xlLW5hdi5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgb2F1dGggMiByb2xlIHNlcnZpY2VcclxuICogU3VwcGxpZXMgdGhlIHJvbGUgdXNpbmcgYW4gT0F1dGggMi4wIGFjY2VzcyB0b2tlblxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT2F1dGgyUm9sZVNlcnZpY2Uge1xyXG5cclxuICAvKiogVHJ1ZSBpZiBjb25maWdzIHdlcmUgcHJvdmlkZWQgYXQgY29uc3RydWN0aW9uICovXHJcbiAgcHJpdmF0ZSBjb25maWdzUHJvdmlkZWRBdENvbnN0cnVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVGhlIGRlY29kZWQgYWNjZXNzIHRva2VuIGJlaGF2aW9yIHN1YmplY3QgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlY29kZVRva2VuOiBSZXBsYXlTdWJqZWN0PERlY29kZWRBY2Nlc3NUb2tlbj4gPSBuZXcgUmVwbGF5U3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICAvKiogVGhlIGN1cnJlbnQgYWNjZXNzIHRva2VuICovXHJcbiAgcHVibGljIHRva2VuOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUaGUgZGVjb2RlZCBhY2Nlc3MgdG9rZW4gKi9cclxuICBwdWJsaWMgZGVjb2RlZFRva2VuJDogT2JzZXJ2YWJsZTxEZWNvZGVkQWNjZXNzVG9rZW4+O1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHJiYWNDb25maWcgVGhlIHJiYWMgY29uZmlndXJhdGlvbnNcclxuICAgKiBAcGFyYW0gaHR0cENsaWVudCBUaGUgaHR0cCBjbGllbnRcclxuICAgKiBAcGFyYW0gcm9sZU5hdlNlcnZpY2UgVGhlIHJvbGUgbmF2IHNlcnZpY2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmJhY0NvbmZpZzogUmJhY0NvbmZpZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9sZU5hdlNlcnZpY2U6IFJvbGVOYXZTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICAvLyBnZXQgdGhlIHRva2VuIGluaXRpYWxseSB0aGVuIHVwZGF0ZSBpdCBiYXNlZCBvbiBpbmplY3RlZCByZWZyZXNoIHRpbWVcclxuICAgIHRoaXMuZGVjb2RlZFRva2VuJCA9IHRoaXMuZGVjb2RlVG9rZW4uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5yYmFjQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnc1Byb3ZpZGVkQXRDb25zdHJ1Y3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHJvbGUgY29udHJvbGxlZCBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0gZGVmYXVsdE5hdiBUaGUgZGVmYXVsdCBuYXZpZ2F0aW9uXHJcbiAgICogQHBhcmFtIHJvbGVzIFRoZSByb2xlcyBvZiB0aGUgdXNlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb250cm9sbGVkTmF2T2JqZWN0KGRlZmF1bHROYXY6IEFycmF5PE5hdk5vZGU+LCByb2xlczogQXJyYXk8c3RyaW5nPik6IEFycmF5PE5hdk5vZGU+IHtcclxuICAgICAgcmV0dXJuIHRoaXMucm9sZU5hdlNlcnZpY2UuY3JlYXRlUm9sZUNvbnRyb2xsZWROYXZpZ2F0aW9uKGRlZmF1bHROYXYsIHRoaXMucmJhY0NvbmZpZywgcm9sZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlcyB0aGUgc2VydmljZVxyXG4gICAqIEBwYXJhbSByYmFjQ29uZmlnIFRoZSByYmFjIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25maWd1cmUocmJhY0NvbmZpZzogUmJhY0NvbmZpZyk6IHZvaWQge1xyXG4gICAgdGhpcy5yYmFjQ29uZmlnID0gcmJhY0NvbmZpZztcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCB0b2tlbiBoYXMgYWNjZXNzIHRvIHRoZSBhY3Rpb25cclxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gY2hlY2sgYWNjZXNzIGZvclxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNBY3Rpb25BY2Nlc3MoYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnJiYWNDb25maWcuZGlzYWJsZVJvbGVBY3Rpb25zKSB7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVkVG9rZW4kLnBpcGUobWFwKHRva2VuID0+IHtcclxuICAgICAgY29uc3Qgcm9sZXMgPSB0b2tlbi5jbGFpbXMuZ2V0Um9sZTtcclxuICAgICAgLy8gaWYgbm8gcm9sZXMsIG5vIGFjdGlvbiBhY2Nlc3NcclxuICAgICAgaWYgKCFyb2xlcyB8fCByb2xlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZmxhdHRlbiByb2xlIGNvbmZpZyBpbnRvIG9uZSBzZXQgb2YgYWN0aW9ucyBmb3IgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlclxyXG4gICAgICBjb25zdCBmbGF0dGVuZWRBY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgICByb2xlcy5mb3JFYWNoKHJvbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvbGVDb25maWcgPSB0aGlzLnJiYWNDb25maWcucm9sZUNvbmZpZ1tyb2xlXTtcclxuICAgICAgICBpZiAoIXJvbGVDb25maWcgfHwgIXJvbGVDb25maWcuYWN0aW9ucyB8fCAhcm9sZUNvbmZpZy5hY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb2xlQ29uZmlnLmFjdGlvbnMuZm9yRWFjaChhID0+IGZsYXR0ZW5lZEFjdGlvbnMuYWRkKGEudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBmbGF0dGVuZWRBY3Rpb25zLmhhcyhhY3Rpb24udG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlICovXHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLnJiYWNDb25maWcuYWNjZXNzVG9rZW4kLnN1YnNjcmliZSh0b2tlbiA9PiB7XHJcbiAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcclxuICAgICAgaWYgKCF0aGlzLnRva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBuZXcgRGVjb2RlZEFjY2Vzc1Rva2VuKHRoaXMudG9rZW4pO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIHRoZSBoZWFkZXJzIGZvciB0aGUgdXNlciBpbmZvIGNhbGwgd2l0aCB0aGUgZXhpc3RpbmcgYWNjZXNzIHRva2VuXHJcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLCAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonIH0pO1xyXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0PEFjY2Vzc1Rva2VuQ2xhaW1zPih0aGlzLnJiYWNDb25maWcudXNlckluZm9FbmRwb2ludCwgeyBoZWFkZXJzIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAvLyBtYXAgdGhlIHJlc3VsdHMgdG8gdGhlIHByb3BzXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgZGVjb2RlZC5jbGFpbXMgPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlVG9rZW4ubmV4dChkZWNvZGVkKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgLy8gY29udGludWUgb24gZXJyb3IgYW5kIGxvZyB0byBjb25zb2xlXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIHJldHJpZXZlIHVzZXIgaW5mbyBmb3I6ICR7dGhpcy50b2tlbn1gLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** The role navigation service interface */
|
|
2
|
-
export class RoleNavService {
|
|
3
|
-
}
|
|
1
|
+
/** The role navigation service interface */
|
|
2
|
+
export class RoleNavService {
|
|
3
|
+
}
|
|
4
4
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1uYXYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvcmJhYy9zZXJ2aWNlcy9yb2xlLW5hdi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLDRDQUE0QztBQUM1QyxNQUFNLE9BQWdCLGNBQWM7Q0FRbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZOb2RlIH0gZnJvbSAnLi4vLi4vbmF2aWdhdGlvbi9tb2RlbHMvbmF2aWdhdGlvbic7XHJcbmltcG9ydCB7IFJiYWNDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvcmJhYy1jb25maWcnO1xyXG5cclxuLyoqIFRoZSByb2xlIG5hdmlnYXRpb24gc2VydmljZSBpbnRlcmZhY2UgKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvbGVOYXZTZXJ2aWNlIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBuYXZpZ2F0aW9uIGNvbmZpZyB1c2luZyB0aGUgcHJvdmlkZWQgZGVmYXVsdCBuYXZpZ2F0aW9uIGNvbmZpZyBhbmQgdGhlIFJBQkMgY29uZmlndXJhdGlvblxyXG4gICAgICogQHBhcmFtIGRlZmF1bHROYXYgVGhlIGRlZmF1bHQgbmF2aWdhdGlvbiBjb25maWdcclxuICAgICAqIEBwYXJhbSByYmFjQ29uZmlnIFRoZSByYmFjIGNvbmZpZyB1c2VkIGZvciBsaW1pdGluZyB0aGUgbmF2aWdhdGlvblxyXG4gICAgICogQHBhcmFtIHJvbGVzIHRoZSBhcnJheSBvZiByb2xlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgY3JlYXRlUm9sZUNvbnRyb2xsZWROYXZpZ2F0aW9uKGRlZmF1bHROYXY6IEFycmF5PE5hdk5vZGU+LCByYmFjQ29uZmlnOiBSYmFjQ29uZmlnLCByb2xlczogQXJyYXk8c3RyaW5nPik6IEFycmF5PE5hdk5vZGU+O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/** Choose to disable access to all pages for roles with no pages */
|
|
3
|
-
export const DISABLE_ACCESS_FOR_NO_PAGES_ROLE = new InjectionToken('disable-access-for-no-pages');
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/** Choose to disable access to all pages for roles with no pages */
|
|
3
|
+
export const DISABLE_ACCESS_FOR_NO_PAGES_ROLE = new InjectionToken('disable-access-for-no-pages');
|
|
4
4
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9yYmFjL3NlcnZpY2VzL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBNEIsSUFBSSxjQUFjLENBQVUsNkJBQTZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKiogQ2hvb3NlIHRvIGRpc2FibGUgYWNjZXNzIHRvIGFsbCBwYWdlcyBmb3Igcm9sZXMgd2l0aCBubyBwYWdlcyAqL1xyXG5leHBvcnQgY29uc3QgRElTQUJMRV9BQ0NFU1NfRk9SX05PX1BBR0VTX1JPTEU6IEluamVjdGlvblRva2VuPGJvb2xlYW4+ID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaXNhYmxlLWFjY2Vzcy1mb3Itbm8tcGFnZXMnKTsiXX0=
|