@api-client/ui 0.2.13 → 0.3.0
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/.vscode/settings.json +1 -0
- package/build/src/core/ModalActivity.d.ts +1 -1
- package/build/src/core/ModalActivity.d.ts.map +1 -1
- package/build/src/core/ModalActivity.js +6 -5
- package/build/src/core/ModalActivity.js.map +1 -1
- package/build/src/core/ThemeManager.d.ts +4 -2
- package/build/src/core/ThemeManager.d.ts.map +1 -1
- package/build/src/core/ThemeManager.js.map +1 -1
- package/build/src/demo/DemoPage.d.ts +1 -4
- package/build/src/demo/DemoPage.d.ts.map +1 -1
- package/build/src/demo/DemoPage.js +2 -5
- package/build/src/demo/DemoPage.js.map +1 -1
- package/build/src/elements/authorization/ui/CcAuthorization.d.ts +1 -1
- package/build/src/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
- package/build/src/elements/authorization/ui/CcAuthorization.js +2 -2
- package/build/src/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts +1 -1
- package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts.map +1 -1
- package/build/src/elements/authorization/ui/OAuth2Authorization.js +11 -5
- package/build/src/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
- package/build/src/elements/authorization/ui/OidcAuthorization.d.ts +1 -2
- package/build/src/elements/authorization/ui/OidcAuthorization.d.ts.map +1 -1
- package/build/src/elements/authorization/ui/OidcAuthorization.js +10 -8
- package/build/src/elements/authorization/ui/OidcAuthorization.js.map +1 -1
- package/build/src/elements/code/HttpSnippets.d.ts +1 -1
- package/build/src/elements/code/HttpSnippets.d.ts.map +1 -1
- package/build/src/elements/code/HttpSnippets.js +5 -5
- package/build/src/elements/code/HttpSnippets.js.map +1 -1
- package/build/src/elements/dialog/internals/ConfirmDelete.d.ts +1 -1
- package/build/src/elements/dialog/internals/ConfirmDelete.d.ts.map +1 -1
- package/build/src/elements/dialog/internals/ConfirmDelete.js +5 -5
- package/build/src/elements/dialog/internals/ConfirmDelete.js.map +1 -1
- package/build/src/elements/dialog/internals/Rename.d.ts +1 -1
- package/build/src/elements/dialog/internals/Rename.d.ts.map +1 -1
- package/build/src/elements/dialog/internals/Rename.js +6 -5
- package/build/src/elements/dialog/internals/Rename.js.map +1 -1
- package/build/src/elements/environment/EnvironmentEditor.d.ts +1 -1
- package/build/src/elements/environment/EnvironmentEditor.d.ts.map +1 -1
- package/build/src/elements/environment/EnvironmentEditor.js +5 -4
- package/build/src/elements/environment/EnvironmentEditor.js.map +1 -1
- package/build/src/elements/http/BodyEditor.d.ts +1 -3
- package/build/src/elements/http/BodyEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyEditor.js +25 -20
- package/build/src/elements/http/BodyEditor.js.map +1 -1
- package/build/src/elements/http/BodyMultipartEditor.d.ts +1 -1
- package/build/src/elements/http/BodyMultipartEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyMultipartEditor.js +3 -3
- package/build/src/elements/http/BodyMultipartEditor.js.map +1 -1
- package/build/src/elements/http/CertificateAdd.element.d.ts +1 -3
- package/build/src/elements/http/CertificateAdd.element.d.ts.map +1 -1
- package/build/src/elements/http/CertificateAdd.element.js +6 -10
- package/build/src/elements/http/CertificateAdd.element.js.map +1 -1
- package/build/src/elements/http/HeadersForm.d.ts +1 -1
- package/build/src/elements/http/HeadersForm.d.ts.map +1 -1
- package/build/src/elements/http/HeadersForm.js +3 -3
- package/build/src/elements/http/HeadersForm.js.map +1 -1
- package/build/src/elements/http/HttpAssertions.element.d.ts +1 -1
- package/build/src/elements/http/HttpAssertions.element.d.ts.map +1 -1
- package/build/src/elements/http/HttpAssertions.element.js +2 -2
- package/build/src/elements/http/HttpAssertions.element.js.map +1 -1
- package/build/src/elements/http/HttpFlows.element.d.ts +1 -1
- package/build/src/elements/http/HttpFlows.element.d.ts.map +1 -1
- package/build/src/elements/http/HttpFlows.element.js +6 -6
- package/build/src/elements/http/HttpFlows.element.js.map +1 -1
- package/build/src/elements/http/RequestEditor.d.ts +1 -3
- package/build/src/elements/http/RequestEditor.d.ts.map +1 -1
- package/build/src/elements/http/RequestEditor.js +10 -11
- package/build/src/elements/http/RequestEditor.js.map +1 -1
- package/build/src/elements/http/UrlParamsForm.d.ts +1 -1
- package/build/src/elements/http/UrlParamsForm.d.ts.map +1 -1
- package/build/src/elements/http/UrlParamsForm.js +4 -4
- package/build/src/elements/http/UrlParamsForm.js.map +1 -1
- package/build/src/elements/project/HttpProjectRequest.d.ts +1 -1
- package/build/src/elements/project/HttpProjectRequest.d.ts.map +1 -1
- package/build/src/elements/project/HttpProjectRequest.js +3 -3
- package/build/src/elements/project/HttpProjectRequest.js.map +1 -1
- package/build/src/elements/project/HttpProjectRequestHistory.d.ts +1 -2
- package/build/src/elements/project/HttpProjectRequestHistory.d.ts.map +1 -1
- package/build/src/elements/project/HttpProjectRequestHistory.js +5 -6
- package/build/src/elements/project/HttpProjectRequestHistory.js.map +1 -1
- package/build/src/elements/project/ProjectRunReport.d.ts +1 -1
- package/build/src/elements/project/ProjectRunReport.d.ts.map +1 -1
- package/build/src/elements/project/ProjectRunReport.js +7 -7
- package/build/src/elements/project/ProjectRunReport.js.map +1 -1
- package/build/src/elements/project/ProjectRunner.d.ts +1 -2
- package/build/src/elements/project/ProjectRunner.d.ts.map +1 -1
- package/build/src/elements/project/ProjectRunner.js +4 -5
- package/build/src/elements/project/ProjectRunner.js.map +1 -1
- package/build/src/md/button/internals/base.d.ts +98 -0
- package/build/src/md/button/internals/base.d.ts.map +1 -0
- package/build/src/md/button/internals/base.js +353 -0
- package/build/src/md/button/internals/base.js.map +1 -0
- package/build/src/md/button/internals/button.d.ts +7 -75
- package/build/src/md/button/internals/button.d.ts.map +1 -1
- package/build/src/md/button/internals/button.js +18 -247
- package/build/src/md/button/internals/button.js.map +1 -1
- package/build/src/md/button/internals/{button-styles.d.ts → button.styles.d.ts} +1 -1
- package/build/src/md/button/internals/button.styles.d.ts.map +1 -0
- package/build/src/md/button/internals/button.styles.js +319 -0
- package/build/src/md/button/internals/button.styles.js.map +1 -0
- package/build/src/md/button/internals/group.d.ts +54 -0
- package/build/src/md/button/internals/group.d.ts.map +1 -0
- package/build/src/md/button/internals/group.js +157 -0
- package/build/src/md/button/internals/group.js.map +1 -0
- package/build/src/md/button/internals/{text-button.styles.d.ts → group.styles.d.ts} +1 -1
- package/build/src/md/button/internals/group.styles.d.ts.map +1 -0
- package/build/src/md/button/internals/group.styles.js +102 -0
- package/build/src/md/button/internals/group.styles.js.map +1 -0
- package/build/src/md/button/ui-button-group.d.ts +11 -0
- package/build/src/md/button/ui-button-group.d.ts.map +1 -0
- package/build/src/md/{icon-button/ui-filled-icon-button.js → button/ui-button-group.js} +10 -11
- package/build/src/md/button/ui-button-group.js.map +1 -0
- package/build/src/md/button/ui-button.d.ts +14 -0
- package/build/src/md/button/ui-button.d.ts.map +1 -0
- package/build/src/md/button/{ui-text-button.js → ui-button.js} +10 -11
- package/build/src/md/button/ui-button.js.map +1 -0
- package/build/src/md/dialog/internals/Dialog.d.ts +5 -5
- package/build/src/md/dialog/internals/Dialog.d.ts.map +1 -1
- package/build/src/md/dialog/internals/Dialog.js +14 -9
- package/build/src/md/dialog/internals/Dialog.js.map +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.d.ts +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.js +1 -1
- package/build/src/md/dropdown-list/internals/UiDropdownList.js.map +1 -1
- package/build/src/md/icon-button/internals/IconButton.d.ts +12 -36
- package/build/src/md/icon-button/internals/IconButton.d.ts.map +1 -1
- package/build/src/md/icon-button/internals/IconButton.js +32 -144
- package/build/src/md/icon-button/internals/IconButton.js.map +1 -1
- package/build/src/md/{button/internals/filled-button.styles.d.ts → icon-button/internals/IconButton.styles.d.ts} +1 -1
- package/build/src/md/icon-button/internals/IconButton.styles.d.ts.map +1 -0
- package/build/src/md/icon-button/internals/IconButton.styles.js +286 -0
- package/build/src/md/icon-button/internals/IconButton.styles.js.map +1 -0
- package/build/src/md/icon-button/ui-icon-button.d.ts.map +1 -1
- package/build/src/md/icon-button/ui-icon-button.js +2 -3
- package/build/src/md/icon-button/ui-icon-button.js.map +1 -1
- package/build/src/md/ripple/internals/ripple.d.ts +2 -0
- package/build/src/md/ripple/internals/ripple.d.ts.map +1 -1
- package/build/src/md/ripple/internals/ripple.js +20 -10
- package/build/src/md/ripple/internals/ripple.js.map +1 -1
- package/build/src/md/ripple/internals/ripple.styles.d.ts.map +1 -1
- package/build/src/md/ripple/internals/ripple.styles.js +8 -20
- package/build/src/md/ripple/internals/ripple.styles.js.map +1 -1
- package/build/src/md/snackbar/internals/Snackbar.d.ts +1 -1
- package/build/src/md/snackbar/internals/Snackbar.d.ts.map +1 -1
- package/build/src/md/snackbar/internals/Snackbar.js +4 -2
- package/build/src/md/snackbar/internals/Snackbar.js.map +1 -1
- package/build/src/md/text-field/internals/filled.styles.d.ts.map +1 -1
- package/build/src/md/text-field/internals/filled.styles.js +3 -0
- package/build/src/md/text-field/internals/filled.styles.js.map +1 -1
- package/build/src/styles/m3/dialog.module.d.ts +2 -2
- package/build/src/styles/m3/dialog.module.js +2 -2
- package/build/src/styles/m3/dialog.module.js.map +1 -1
- package/build/src/styles/m3/tokens.d.ts.map +1 -1
- package/build/src/styles/m3/tokens.js +208 -182
- package/build/src/styles/m3/tokens.js.map +1 -1
- package/demo/elements/authorization/oauth-authorize.html +1 -1
- package/demo/elements/authorization/oauth-authorize.ts +1 -1
- package/demo/elements/environment/variables-editor.ts +2 -2
- package/demo/elements/http/url-editing.ts +3 -3
- package/demo/elements/project/request-editor.ts +4 -4
- package/demo/layout/index.ts +5 -5
- package/demo/md/buttons/button.html +121 -0
- package/demo/md/buttons/button.ts +246 -0
- package/demo/md/buttons/{index.html → group.html} +15 -2
- package/demo/md/buttons/group.ts +171 -0
- package/demo/md/checkbox/index.ts +1 -1
- package/demo/md/dialog/dialog.ts +8 -9
- package/demo/md/dropdown-list/index.ts +68 -71
- package/demo/md/icon-button/index.html +97 -7
- package/demo/md/icon-button/index.ts +97 -201
- package/demo/md/index.html +3 -1
- package/demo/md/inputs/input.ts +1 -1
- package/demo/md/inputs/radio.ts +1 -1
- package/demo/md/inputs/switch.ts +1 -1
- package/demo/md/notification/snack.ts +5 -5
- package/demo/md/progress/progress.ts +4 -3
- package/package.json +2 -2
- package/src/core/ModalActivity.ts +6 -5
- package/src/core/ThemeManager.ts +5 -4
- package/src/demo/DemoPage.ts +2 -5
- package/src/elements/authorization/ui/CcAuthorization.ts +2 -2
- package/src/elements/authorization/ui/OAuth2Authorization.ts +11 -5
- package/src/elements/authorization/ui/OidcAuthorization.ts +10 -8
- package/src/elements/code/HttpSnippets.ts +5 -5
- package/src/elements/dialog/internals/ConfirmDelete.ts +5 -5
- package/src/elements/dialog/internals/Rename.ts +6 -5
- package/src/elements/environment/EnvironmentEditor.ts +5 -4
- package/src/elements/http/BodyEditor.ts +25 -20
- package/src/elements/http/BodyMultipartEditor.ts +3 -3
- package/src/elements/http/CertificateAdd.element.ts +6 -10
- package/src/elements/http/HeadersForm.ts +3 -3
- package/src/elements/http/HttpAssertions.element.ts +2 -2
- package/src/elements/http/HttpFlows.element.ts +6 -6
- package/src/elements/http/RequestEditor.ts +10 -11
- package/src/elements/http/UrlParamsForm.ts +4 -4
- package/src/elements/project/HttpProjectRequest.ts +3 -3
- package/src/elements/project/HttpProjectRequestHistory.ts +5 -6
- package/src/elements/project/ProjectRunReport.ts +7 -7
- package/src/elements/project/ProjectRunner.ts +4 -5
- package/src/md/button/internals/base.ts +299 -0
- package/src/md/button/internals/button.styles.ts +319 -0
- package/src/md/button/internals/button.ts +8 -234
- package/src/md/button/internals/group.styles.ts +102 -0
- package/src/md/button/internals/group.ts +121 -0
- package/src/md/button/ui-button-group.ts +15 -0
- package/src/md/button/ui-button.ts +18 -0
- package/src/md/dialog/internals/Dialog.ts +14 -9
- package/src/md/dropdown-list/internals/UiDropdownList.ts +1 -1
- package/src/md/icon-button/internals/IconButton.styles.ts +286 -0
- package/src/md/icon-button/internals/IconButton.ts +15 -139
- package/src/md/icon-button/ui-icon-button.ts +2 -3
- package/src/md/ripple/internals/ripple.styles.ts +8 -20
- package/src/md/ripple/internals/ripple.ts +21 -13
- package/src/md/snackbar/internals/Snackbar.ts +4 -2
- package/src/md/text-field/internals/filled.styles.ts +3 -0
- package/src/styles/m3/dialog.module.ts +2 -2
- package/src/styles/m3/native.css +270 -0
- package/src/styles/m3/tokens.css +208 -182
- package/src/styles/m3/tokens.ts +208 -182
- package/test/ui/button/UiButton.test.ts +51 -29
- package/test/ui/button/UiIconButton.test.ts +25 -19
- package/test/ui/dialog/UiDialog.test.ts +10 -10
- package/build/src/md/button/internals/button-styles.d.ts.map +0 -1
- package/build/src/md/button/internals/button-styles.js +0 -143
- package/build/src/md/button/internals/button-styles.js.map +0 -1
- package/build/src/md/button/internals/elevated-button.d.ts +0 -4
- package/build/src/md/button/internals/elevated-button.d.ts.map +0 -1
- package/build/src/md/button/internals/elevated-button.js +0 -4
- package/build/src/md/button/internals/elevated-button.js.map +0 -1
- package/build/src/md/button/internals/elevated-button.styles.d.ts +0 -3
- package/build/src/md/button/internals/elevated-button.styles.d.ts.map +0 -1
- package/build/src/md/button/internals/elevated-button.styles.js +0 -38
- package/build/src/md/button/internals/elevated-button.styles.js.map +0 -1
- package/build/src/md/button/internals/filled-button.d.ts +0 -4
- package/build/src/md/button/internals/filled-button.d.ts.map +0 -1
- package/build/src/md/button/internals/filled-button.js +0 -4
- package/build/src/md/button/internals/filled-button.js.map +0 -1
- package/build/src/md/button/internals/filled-button.styles.d.ts.map +0 -1
- package/build/src/md/button/internals/filled-button.styles.js +0 -30
- package/build/src/md/button/internals/filled-button.styles.js.map +0 -1
- package/build/src/md/button/internals/filled-tonal-button.d.ts +0 -4
- package/build/src/md/button/internals/filled-tonal-button.d.ts.map +0 -1
- package/build/src/md/button/internals/filled-tonal-button.js +0 -4
- package/build/src/md/button/internals/filled-tonal-button.js.map +0 -1
- package/build/src/md/button/internals/filled-tonal-button.styles.d.ts +0 -3
- package/build/src/md/button/internals/filled-tonal-button.styles.d.ts.map +0 -1
- package/build/src/md/button/internals/filled-tonal-button.styles.js +0 -30
- package/build/src/md/button/internals/filled-tonal-button.styles.js.map +0 -1
- package/build/src/md/button/internals/outlined-button.d.ts +0 -4
- package/build/src/md/button/internals/outlined-button.d.ts.map +0 -1
- package/build/src/md/button/internals/outlined-button.js +0 -4
- package/build/src/md/button/internals/outlined-button.js.map +0 -1
- package/build/src/md/button/internals/outlined-button.styles.d.ts +0 -3
- package/build/src/md/button/internals/outlined-button.styles.d.ts.map +0 -1
- package/build/src/md/button/internals/outlined-button.styles.js +0 -31
- package/build/src/md/button/internals/outlined-button.styles.js.map +0 -1
- package/build/src/md/button/internals/text-button.d.ts +0 -4
- package/build/src/md/button/internals/text-button.d.ts.map +0 -1
- package/build/src/md/button/internals/text-button.js +0 -4
- package/build/src/md/button/internals/text-button.js.map +0 -1
- package/build/src/md/button/internals/text-button.styles.d.ts.map +0 -1
- package/build/src/md/button/internals/text-button.styles.js +0 -30
- package/build/src/md/button/internals/text-button.styles.js.map +0 -1
- package/build/src/md/button/ui-elevated-button.d.ts +0 -14
- package/build/src/md/button/ui-elevated-button.d.ts.map +0 -1
- package/build/src/md/button/ui-elevated-button.js +0 -31
- package/build/src/md/button/ui-elevated-button.js.map +0 -1
- package/build/src/md/button/ui-filled-button.d.ts +0 -14
- package/build/src/md/button/ui-filled-button.d.ts.map +0 -1
- package/build/src/md/button/ui-filled-button.js +0 -31
- package/build/src/md/button/ui-filled-button.js.map +0 -1
- package/build/src/md/button/ui-filled-tonal-button.d.ts +0 -14
- package/build/src/md/button/ui-filled-tonal-button.d.ts.map +0 -1
- package/build/src/md/button/ui-filled-tonal-button.js +0 -31
- package/build/src/md/button/ui-filled-tonal-button.js.map +0 -1
- package/build/src/md/button/ui-outlined-button.d.ts +0 -14
- package/build/src/md/button/ui-outlined-button.d.ts.map +0 -1
- package/build/src/md/button/ui-outlined-button.js +0 -31
- package/build/src/md/button/ui-outlined-button.js.map +0 -1
- package/build/src/md/button/ui-text-button.d.ts +0 -14
- package/build/src/md/button/ui-text-button.d.ts.map +0 -1
- package/build/src/md/button/ui-text-button.js.map +0 -1
- package/build/src/md/icon-button/ui-filled-icon-button.d.ts +0 -11
- package/build/src/md/icon-button/ui-filled-icon-button.d.ts.map +0 -1
- package/build/src/md/icon-button/ui-filled-icon-button.js.map +0 -1
- package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts +0 -11
- package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts.map +0 -1
- package/build/src/md/icon-button/ui-filled-tonal-icon-button.js +0 -28
- package/build/src/md/icon-button/ui-filled-tonal-icon-button.js.map +0 -1
- package/build/src/md/icon-button/ui-outlined-icon-button.d.ts +0 -11
- package/build/src/md/icon-button/ui-outlined-icon-button.d.ts.map +0 -1
- package/build/src/md/icon-button/ui-outlined-icon-button.js +0 -28
- package/build/src/md/icon-button/ui-outlined-icon-button.js.map +0 -1
- package/demo/md/buttons/index.ts +0 -279
- package/src/md/button/internals/button-styles.ts +0 -143
- package/src/md/button/internals/elevated-button.styles.ts +0 -38
- package/src/md/button/internals/elevated-button.ts +0 -3
- package/src/md/button/internals/filled-button.styles.ts +0 -30
- package/src/md/button/internals/filled-button.ts +0 -3
- package/src/md/button/internals/filled-tonal-button.styles.ts +0 -30
- package/src/md/button/internals/filled-tonal-button.ts +0 -3
- package/src/md/button/internals/outlined-button.styles.ts +0 -31
- package/src/md/button/internals/outlined-button.ts +0 -3
- package/src/md/button/internals/text-button.styles.ts +0 -30
- package/src/md/button/internals/text-button.ts +0 -3
- package/src/md/button/ui-elevated-button.ts +0 -19
- package/src/md/button/ui-filled-button.ts +0 -19
- package/src/md/button/ui-filled-tonal-button.ts +0 -19
- package/src/md/button/ui-outlined-button.ts +0 -19
- package/src/md/button/ui-text-button.ts +0 -19
- package/src/md/icon-button/ui-filled-icon-button.ts +0 -16
- package/src/md/icon-button/ui-filled-tonal-icon-button.ts +0 -16
- package/src/md/icon-button/ui-outlined-icon-button.ts +0 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuth2Authorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OAuth2Authorization.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CUSTOM_CREDENTIALS,\n generateState,\n readUrlValue,\n validateRedirectUri,\n} from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type { IOAuth2Authorization, IOauth2GrantType, ITokenInfo } from '@api-client/core/models/Authorization.js'\nimport type { OAuth2DeliveryMethod } from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport { html, nothing, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { CredentialsInfo, Oauth2Credentials } from '../types.js'\nimport { Authorization } from './Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport { SupportedInputTypes } from '../../../types/input.js'\nimport CheckboxElement from '../../../md/checkbox/internals/CheckboxElement.js'\nimport { selectNode } from '../Utils.js'\nimport { SnackNotifications } from '../../../md/notification/SnackNotifications.js'\nimport '../../../md/button/ui-filled-button.js'\nimport '../../../md/text-field/ui-filled-text-field.js'\nimport '../../../md/list/ui-list.js'\nimport '../../../md/list/ui-list-item.js'\nimport '../../../md/dropdown-list/ui-dropdown-list.js'\nimport '../../../md/icon-button/ui-icon-button.js'\nimport '../../../md/checkbox/ui-checkbox.js'\nimport '../../../md/icons/ui-icon.js'\n\n/**\n * List of OAuth 2.0 default response types.\n * This list can be extended by custom grants\n *\n * @returns List of objects with `type` and `label` properties.\n */\nexport const oauth2GrantTypes: IOauth2GrantType[] = [\n {\n type: KnownGrants.implicit,\n label: 'Implicit',\n },\n {\n type: KnownGrants.code,\n label: 'Authorization code',\n },\n {\n type: KnownGrants.clientCredentials,\n label: 'Client credentials',\n },\n {\n type: KnownGrants.password,\n label: 'Password',\n },\n {\n type: KnownGrants.deviceCode,\n label: 'Device code',\n },\n {\n type: KnownGrants.jwtBearer,\n label: 'JWT Bearer',\n },\n]\n\nconst LocationLabels: Record<OAuth2DeliveryMethod, string> = {\n body: 'Message body',\n header: 'Authorization header',\n query: 'Query string',\n}\n\nexport default class OAuth2Authorization extends Authorization {\n get config(): IOAuth2Authorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOAuth2Authorization\n }\n return authorization.config as IOAuth2Authorization\n }\n\n /**\n * @return Computed value, true if the response type is a custom definition.\n */\n get isCustomGrantType(): boolean {\n const { grantType } = this.config\n return (\n !!grantType &&\n ![\n KnownGrants.implicit,\n KnownGrants.code,\n KnownGrants.clientCredentials,\n KnownGrants.password,\n KnownGrants.jwtBearer,\n KnownGrants.deviceCode,\n ].includes(grantType)\n )\n }\n\n /**\n * @returns true when the client id field is required.\n */\n get clientIdRequired(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return ![KnownGrants.clientCredentials, KnownGrants.password, KnownGrants.deviceCode].includes(grantType)\n }\n\n /**\n * @returns true when the client id field is rendered.\n */\n get hasClientId(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return ![KnownGrants.jwtBearer].includes(grantType)\n }\n\n /**\n * @returns true when the client secret field is rendered.\n */\n get hasClientSecret(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n if (isCustomGrantType) {\n return isCustomGrantType\n }\n return [KnownGrants.code, KnownGrants.clientCredentials, KnownGrants.password, KnownGrants.deviceCode].includes(\n grantType\n )\n }\n\n /**\n * @returns true when the client secret field is required.\n */\n get clientSecretRequired(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return [KnownGrants.code].includes(grantType)\n }\n\n /**\n * @returns true when the authorization URI field is rendered.\n */\n get authorizationUriRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return isCustomGrantType || [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n /**\n * @returns true when the token URI field is rendered.\n */\n get accessTokenUriRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return (\n isCustomGrantType ||\n [\n KnownGrants.clientCredentials,\n KnownGrants.code,\n KnownGrants.password,\n KnownGrants.jwtBearer,\n KnownGrants.deviceCode,\n ].includes(grantType)\n )\n }\n\n /**\n * @returns true when the username and password fields are rendered.\n */\n get passwordRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return isCustomGrantType || [KnownGrants.password].includes(grantType)\n }\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n get hasRedirectUri(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n /**\n * Currently available grant types.\n */\n @state() accessor grantTypes: IOauth2GrantType[] | undefined = oauth2GrantTypes\n\n /**\n * The definition of client credentials to be rendered for a given grant type.\n * When set on the editor it renders a drop down where the user can choose from predefined\n * credentials (client id & secret).\n *\n */\n @state() accessor credentialsSource: Oauth2Credentials[] | undefined\n\n /**\n * Selected credential source\n */\n @state() accessor credentialSource: string | undefined\n\n /**\n * The default redirect URI to use if not define din the config.\n * @attribute\n */\n @property({ type: String }) accessor defaultRedirectUri: string | undefined\n\n @property({ type: Boolean }) accessor credentialsDisabled = this.disabled\n\n /**\n * The base URI to use to construct the correct URLs to the authorization endpoints.\n *\n * When the paths are relative then base URI is added to the path.\n * Relative paths must start with '/'.\n *\n * Note, URL processing is happening internally in the component. The produced authorize event\n * will have base URI already applied.\n */\n @property({ type: String }) accessor baseUri: string | undefined\n\n /**\n * The error message returned by the authorization library.\n * It renders error dialog when an error ocurred.\n * It is automatically cleared when the user request the token again.\n */\n @state() accessor lastErrorMessage: string | undefined\n\n /**\n * When this property is set then the PKCE option is not rendered for the\n * `authorization_code`. This is mainly meant to be used by the `api-authorization-method`\n * to keep this control disabled and override generated settings when the API spec\n * says that the PKCE is supported.\n * @attribute\n */\n @property({ type: Boolean }) accessor noPkce = false\n\n /**\n * If set, the response type selector is hidden from the UI.\n * @attribute\n */\n @property({ type: Boolean }) accessor noGrantType = false\n\n /**\n * @returns The list of client credentials to render in the credentials selector.\n */\n listCredentials(): CredentialsInfo[] {\n const { credentialsSource, config } = this\n const { grantType } = config\n let credentials: CredentialsInfo[] = []\n if (credentialsSource && credentialsSource.length > 0) {\n const grantTypeCredentials = credentialsSource.find((s) => s.grantType === grantType)\n if (grantTypeCredentials) {\n const customCredential = { name: CUSTOM_CREDENTIALS }\n credentials = [customCredential].concat(grantTypeCredentials.credentials)\n }\n }\n return credentials\n }\n\n /**\n * Sets the client credentials after updating them from the credentials source selector.\n * @param clientId The client id to set on the editor.\n * @param clientSecret The client secret to set on the editor.\n * @param disabled Whether the credentials input is disabled.\n */\n updateCredentials(clientId: string, clientSecret: string, disabled: boolean): void {\n const { config } = this\n config.clientId = clientId\n config.clientSecret = clientSecret\n this.credentialsDisabled = disabled\n this.requestUpdate()\n }\n\n /**\n * This triggers change in the client id & secret of the editor after selecting\n * a credentials source by the user.\n *\n * @param selectedSource The name of the selected credentials source to select.\n */\n updateClientCredentials(selectedSource: string): void {\n const { credentialsSource } = this\n if (!credentialsSource) {\n return\n }\n if (selectedSource) {\n const credentials = this.listCredentials()\n const credential = credentials.find((c) => c.name === selectedSource)\n if (credential) {\n this.updateCredentials(\n credential.clientId || '',\n credential.clientSecret || '',\n credential.name !== CUSTOM_CREDENTIALS\n )\n }\n } else {\n this.updateCredentials('', '', true)\n }\n }\n\n /**\n * @returns true when a credentials source is being selected.\n */\n isSourceSelected(): boolean {\n const { credentialSource } = this\n const credentials = this.listCredentials()\n if (credentials.length > 0) {\n if (!credentialSource) {\n return false\n }\n }\n return true\n }\n\n /**\n * Adds a scope value. If the value has a comma then it is split.\n * @param scope The scope string to add.\n */\n addScope(scope: string): void {\n const { config } = this\n if (!Array.isArray(config.scopes)) {\n config.scopes = []\n }\n const values = scope.split(',').filter((i) => !!i.trim())\n config.scopes = config.scopes.concat(values)\n this.requestUpdate()\n this.notifyChange()\n }\n\n removeScope(index: number): void {\n const { config } = this\n if (!Array.isArray(config.scopes)) {\n return\n }\n if (config.scopes[index] === undefined) {\n return\n }\n config.scopes.splice(index, 1)\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Selects a grant type. It has no effect when the type is already selected.\n * @param value The grant type value to use.\n */\n updateGrantType(value: string): void {\n const { config, credentialSource } = this\n const { grantType } = config\n if (config.grantType === value) {\n return\n }\n if (grantType !== value && credentialSource) {\n this.credentialSource = undefined\n this.credentialsDisabled = this.disabled\n }\n config.grantType = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * It does nothing when the value is already set.\n * @param value The credentials source to use\n */\n updateCredentialSource(value: string): void {\n if (this.credentialSource === value) {\n return\n }\n this.updateClientCredentials(value)\n this.credentialSource = value\n this.notifyChange()\n this.requestUpdate()\n }\n\n updateClientId(value?: string): void {\n const { config } = this\n if (config.clientId === value) {\n return\n }\n config.clientId = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateClientSecret(value?: string): void {\n const { config } = this\n if (config.clientSecret === value) {\n return\n }\n config.clientSecret = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateAuthorizationUri(value?: string): void {\n const { config } = this\n if (config.authorizationUri === value) {\n return\n }\n config.authorizationUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateAccessTokenUri(value?: string): void {\n const { config } = this\n if (config.accessTokenUri === value) {\n return\n }\n config.accessTokenUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateUsername(value?: string): void {\n const { config } = this\n if (config.username === value) {\n return\n }\n config.username = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updatePassword(value?: string): void {\n const { config } = this\n if (config.password === value) {\n return\n }\n config.password = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateDeliveryMethod(value: OAuth2DeliveryMethod): void {\n const { config } = this\n if (config.deliveryMethod === value) {\n return\n }\n config.deliveryMethod = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updatePkce(enabled: boolean): void {\n const { config } = this\n if (config.pkce !== enabled) {\n config.pkce = enabled\n this.notifyChange()\n }\n }\n\n updateAssertion(value?: string): void {\n const { config } = this\n if (config.assertion === value) {\n return\n }\n config.assertion = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateDeviceCode(value?: string): void {\n const { config } = this\n if (config.deviceCode === value) {\n return\n }\n config.deviceCode = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateRedirectUri(value: string): void {\n const { defaultRedirectUri = '', config } = this\n const { redirectUri = defaultRedirectUri } = config\n\n const isValid = validateRedirectUri(value)\n if (!isValid) {\n if (config.redirectUri !== defaultRedirectUri) {\n config.redirectUri = defaultRedirectUri\n this.requestUpdate()\n this.notifyChange()\n }\n return\n }\n if (value === redirectUri) {\n delete config.redirectUri\n } else {\n config.redirectUri = value\n }\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n serialize(): IOAuth2Authorization {\n const { config, baseUri } = this\n const { grantType, tokenType = 'Bearer' } = config\n const detail: IOAuth2Authorization = {\n grantType,\n tokenType,\n clientId: config.clientId,\n accessToken: config.accessToken || '',\n scopes: config.scopes,\n deliveryMethod: config.deliveryMethod || 'header',\n deliveryName: config.deliveryName || 'authorization',\n }\n\n switch (grantType) {\n case KnownGrants.implicit:\n // The browser flow.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n break\n case KnownGrants.code:\n // The server flow.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.clientSecret = config.clientSecret\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n detail.pkce = config.pkce\n break\n case 'application':\n case KnownGrants.clientCredentials:\n // The server flow.\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n case KnownGrants.password:\n // The server flow.\n detail.username = config.username\n detail.password = config.password\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n case KnownGrants.jwtBearer:\n // https://datatracker.ietf.org/doc/html/rfc7523#section-2.1\n detail.assertion = config.assertion\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n delete detail.clientId\n break\n case KnownGrants.deviceCode:\n // https://datatracker.ietf.org/doc/html/rfc8628#section-3.4\n detail.deviceCode = config.deviceCode\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n default:\n // Custom response type.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.clientSecret = config.clientSecret\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n detail.username = config.username\n detail.password = config.password\n break\n }\n return detail\n }\n\n override checkValidity(): boolean {\n const { config } = this\n const {\n grantType,\n clientId,\n authorizationUri,\n clientSecret,\n accessTokenUri,\n password,\n username,\n assertion,\n deviceCode,\n } = config\n if (!grantType) {\n return false\n }\n switch (grantType) {\n case KnownGrants.implicit:\n return !!clientId && !!authorizationUri\n case KnownGrants.code:\n return !!clientId && !!authorizationUri && !!clientSecret && !!accessTokenUri\n case KnownGrants.clientCredentials:\n return !!accessTokenUri\n case KnownGrants.password:\n return !!accessTokenUri && !!password && !!username\n case KnownGrants.jwtBearer:\n return !!accessTokenUri && !!assertion\n case KnownGrants.deviceCode:\n return !!accessTokenUri && !!deviceCode\n default:\n return !!accessTokenUri\n }\n }\n\n override async authorize(): Promise<ITokenInfo | null> {\n if (this.lastErrorMessage) {\n this.lastErrorMessage = undefined\n }\n\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n\n this.authorizing = true\n const detail = this.serialize()\n const authState = generateState()\n detail.state = authState\n let tokenInfo: ITokenInfo | undefined\n try {\n tokenInfo = await CoreEvents.Authorization.OAuth2.authorize(detail, this)\n this.authorizing = false\n if (!tokenInfo) {\n return null\n }\n if (detail.grantType === KnownGrants.implicit && tokenInfo.state !== authState) {\n return null\n }\n if (tokenInfo.accessToken && tokenInfo.accessToken !== this.config.accessToken) {\n if (tokenInfo.tokenType && tokenInfo.tokenType !== this.config.tokenType) {\n this.config.tokenType = tokenInfo.tokenType\n } else if (!tokenInfo.tokenType && this.config.tokenType !== 'Bearer') {\n this.config.tokenType = 'Bearer'\n }\n this.config.accessToken = tokenInfo.accessToken\n this.requestUpdate()\n this.notifyChange()\n }\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return tokenInfo\n }\n\n protected handleGrantTypeSelect(e: CustomEvent): void {\n const target = e.detail && (e.detail.item as HTMLElement | undefined)\n if (!target) {\n return\n }\n const selected = target.dataset.value as string\n if (!selected) {\n return\n }\n this.updateGrantType(selected)\n }\n\n protected handleCredentialSource(e: CustomEvent): void {\n const target = e.detail && (e.detail.item as HTMLElement | undefined)\n if (!target) {\n return\n }\n const selected = target.dataset.value as string\n if (selected) {\n this.updateCredentialSource(selected)\n }\n }\n\n protected handleClientId(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateClientId(value)\n }\n\n protected handleClientSecret(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateClientSecret(value)\n }\n\n protected handleAuthorizationUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAuthorizationUri(value)\n }\n\n protected handleAccessTokenUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAccessTokenUri(value)\n }\n\n protected handleUsername(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateUsername(value)\n }\n\n protected handlePassword(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updatePassword(value)\n }\n\n protected handleDeliveryMethod(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const selected = target.dataset.value as OAuth2DeliveryMethod | undefined\n if (selected) {\n this.updateDeliveryMethod(selected)\n }\n }\n\n protected handlePkceChange(e: Event): void {\n const input = e.target as CheckboxElement\n this.updatePkce(!!input.checked)\n }\n\n protected handleAssertion(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAssertion(value)\n }\n\n protected handleDeviceCode(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateDeviceCode(value)\n }\n\n /**\n * A handler for `focus` event on a label that contains text and\n * should be copied to clipboard when user is interacting with it.\n */\n protected handleClickCopy(e: Event): void {\n const node = e.target as HTMLElement\n this.copyFromNode(node)\n }\n\n protected handlerCopyKeydown(e: KeyboardEvent): void {\n if (e.code !== 'Space') {\n return\n }\n const node = e.target as HTMLElement\n this.copyFromNode(node)\n }\n\n /**\n * Copies the content of the node to clipboard.\n */\n protected async copyFromNode(node: HTMLElement): Promise<void> {\n await navigator.clipboard.writeText(node.innerText)\n selectNode(node)\n SnackNotifications.notify('Copied to clipboard', 2000)\n }\n\n protected handleRedirectUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateRedirectUri(value)\n }\n\n protected handleScopeAdd(e: Event): void {\n const input = (e.currentTarget as HTMLElement).parentElement as Input\n const { value } = input\n if (!value) {\n return\n }\n this.addScope(value)\n input.value = ''\n }\n\n protected handleScopeRemove(e: Event): void {\n const target = e.currentTarget as HTMLElement\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.removeScope(index)\n }\n\n override render(): TemplateResult {\n return html` ${this.renderHeader()} ${this.renderEditor()} `\n }\n\n protected renderEditor(): TemplateResult | typeof nothing {\n const { authorization } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">${this.renderFormContent()}</form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { accessToken } = config\n return accessToken ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected renderError(): TemplateResult | typeof nothing {\n const { lastErrorMessage } = this\n if (!lastErrorMessage) {\n return nothing\n }\n return html`<p class=\"error-message\">⚠ ${lastErrorMessage}</p>`\n }\n\n /**\n * @returns The template for the OAuth 2 token value\n */\n protected renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { accessToken } = config\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">Current token</label>\n <p class=\"token-value body-small\">\n <span @click=\"${this.handleClickCopy}\" @keydown=\"${this.handlerCopyKeydown}\">${accessToken}</span>\n </p>\n <div class=\"authorize-actions base-level\">\n <ui-filled-button\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh access token</ui-filled-button\n >\n </div>\n </div>`\n }\n\n /**\n * @returns The template for the \"authorize\" button.\n */\n protected renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-filled-button ?disabled=\"${authorizing}\" class=\"auth-button\" data-type=\"get-token\" @click=\"${this.authorize}\"\n >Request access token</ui-filled-button\n >\n </div>`\n }\n\n /**\n * @returns The template for the <form> content.\n */\n protected renderFormContent(): (TemplateResult | typeof nothing)[] {\n const { baseUri } = this\n const urlType = (baseUri ? 'string' : 'url') as SupportedInputTypes\n const result: (TemplateResult | typeof nothing)[] = [\n this.renderGrantType(),\n this.renderCredentialsSource(),\n this.renderClientId(),\n this.renderClientSecret(),\n this.renderAssertion(),\n this.renderDeviceCode(),\n this.renderAuthorizationUri(urlType),\n this.renderAccessTokenUri(urlType),\n this.renderRedirect(),\n this.renderUsernameTemplate(),\n this.renderPassword(),\n this.renderScopes(),\n this.renderParamsLocation(),\n this.renderCustomProperties(),\n ]\n return result\n }\n\n /**\n * @return The template for API custom properties (annotations)\n */\n protected renderCustomProperties(): TemplateResult | typeof nothing {\n return nothing\n }\n\n /**\n * @returns The template for the OAuth 2 response type selector\n */\n protected renderGrantType(): TemplateResult | typeof nothing {\n const { config, readOnly, disabled, noGrantType, isCustomGrantType } = this\n const { grantType } = config\n const items = this.grantTypes || []\n const item = items.find((i) => i.type === grantType)\n const value = item && item.label\n return html`\n <div class=\"full-input grant-line\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleGrantTypeSelect}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"grantType\"\n .value=\"${value || ''}\"\n label=\"Grant type\"\n ?required=\"${!noGrantType && !isCustomGrantType}\"\n ?hidden=\"${noGrantType}\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${items.map(\n (current) =>\n html`<ui-list-item role=\"menuitem\" data-value=\"${current.type}\">${current.label}</ui-list-item>`\n )}\n </ui-list>\n </ui-dropdown-list>\n\n ${this.renderPkce()}\n </div>\n `\n }\n\n /**\n * @return The template for the client credentials source.\n */\n protected renderCredentialsSource(): TemplateResult | typeof nothing {\n const { credentialSource } = this\n const credentials = this.listCredentials()\n if (credentials.length === 0) {\n return nothing\n }\n return html` <div class=\"full-input credential-source-list\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleCredentialSource}\" closeOnOutsideClick>\n <ui-filled-text-field readOnly name=\"credentialSource\" .value=\"${credentialSource || ''}\" label=\"Grant type\">\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${credentials.map(\n (current) => html`<ui-list-item role=\"menuitem\" data-value=\"${current.name}\">${current.name}</ui-list-item>`\n )}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @returns The template for the OAuth 2 client id input.\n */\n protected renderClientId(): TemplateResult | typeof nothing {\n if (!this.hasClientId) {\n return nothing\n }\n const { config, credentialsDisabled, clientIdRequired } = this\n const { clientId } = config\n const sourceSelected = this.isSourceSelected()\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Client id\"\n name=\"clientId\"\n type=\"password\"\n ?required=\"${clientIdRequired}\"\n invalidText=\"Client ID is required for this response type\"\n .value=\"${live(clientId || '')}\"\n ?disabled=\"${sourceSelected ? credentialsDisabled : true}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleClientId}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the OAuth 2 client secret input.\n */\n protected renderClientSecret(): TemplateResult | typeof nothing {\n const { hasClientSecret } = this\n if (!hasClientSecret) {\n return nothing\n }\n const { config, credentialsDisabled, clientSecretRequired } = this\n const { clientSecret } = config\n const sourceSelected = this.isSourceSelected()\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Client secret\"\n name=\"clientSecret\"\n type=\"password\"\n ?required=\"${clientSecretRequired}\"\n invalidText=\"Client secret is required for this response type\"\n .value=\"${live(clientSecret || '')}\"\n ?disabled=\"${sourceSelected ? credentialsDisabled : true}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleClientSecret}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the assertion (JWT) input, when needed.\n */\n protected renderAssertion(): TemplateResult | typeof nothing {\n const { config } = this\n if (config.grantType !== KnownGrants.jwtBearer) {\n return nothing\n }\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Assertion (JWT)\"\n name=\"assertion\"\n .value=\"${live(config.assertion || '')}\"\n required\n invalidText=\"Assertion is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAssertion}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @return The template for the device code input, when needed.\n */\n protected renderDeviceCode(): TemplateResult | typeof nothing {\n const { config } = this\n if (config.grantType !== KnownGrants.deviceCode) {\n return nothing\n }\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Device code\"\n name=\"deviceCode\"\n .value=\"${live(config.deviceCode || '')}\"\n required\n invalidText=\"Device code is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleDeviceCode}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @param urlType The input type to render\n * @returns The template for the authorization URI input\n */\n protected renderAuthorizationUri(urlType: SupportedInputTypes): TemplateResult | typeof nothing {\n if (!this.authorizationUriRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { authorizationUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Authorization URI\"\n name=\"authorizationUri\"\n .value=\"${live(authorizationUri || '')}\"\n type=${urlType}\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Authorization URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAuthorizationUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @param urlType The input type to render\n * @returns The template for the access token URI input\n */\n protected renderAccessTokenUri(urlType: SupportedInputTypes): TemplateResult | typeof nothing {\n if (!this.accessTokenUriRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { accessTokenUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Access token URI\"\n name=\"accessTokenUri\"\n .value=\"${live(accessTokenUri || '')}\"\n type=${urlType}\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Access token URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAccessTokenUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the user name input\n */\n protected renderUsernameTemplate(): TemplateResult | typeof nothing {\n if (!this.passwordRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { username } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Username\"\n name=\"username\"\n .value=\"${live(username || '')}\"\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"User name is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleUsername}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the user password input\n */\n protected renderPassword(): TemplateResult | typeof nothing {\n if (!this.passwordRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { password } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Password\"\n name=\"password\"\n .value=\"${live(password || '')}\"\n type=\"password\"\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Password is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handlePassword}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * For client_credentials grant this renders the dropdown with an option to select\n * where the credentials should be used. Current values:\n * - authorization header\n * - message body\n */\n protected renderParamsLocation(): TemplateResult | typeof nothing {\n const { config } = this\n const { grantType, deliveryMethod } = config\n if (grantType !== KnownGrants.clientCredentials) {\n return nothing\n }\n const { disabled, readOnly } = this\n return html` <div class=\"full-input delivery-method-line\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleDeliveryMethod}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"deliveryMethod\"\n .value=\"${LocationLabels[deliveryMethod as OAuth2DeliveryMethod] || ''}\"\n label=\"Credentials location\"\n ?disabled=\"${disabled || readOnly}\"\n data-selected=\"${deliveryMethod || ''}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-value=\"header\">${LocationLabels.header}</ui-list-item>\n <ui-list-item role=\"menuitem\" data-value=\"body\">${LocationLabels.body}</ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @returns The template for the PKCE option of the OAuth 2 extension.\n */\n protected renderPkce(): TemplateResult | typeof nothing {\n const { config, noPkce } = this\n const { grantType, pkce } = config\n if (noPkce || grantType !== KnownGrants.code) {\n return nothing\n }\n return html`\n <label class=\"label-large pkce\">\n <ui-checkbox\n .checked=\"${!!pkce}\"\n @change=\"${this.handlePkceChange}\"\n name=\"pkce\"\n aria-label=\"Use PKCE extension\"\n ></ui-checkbox>\n Use PKCE extension\n </label>\n `\n }\n\n /**\n * @returns The template for the OAuth 2 redirect URI label\n */\n protected renderRedirect(): TemplateResult | typeof nothing {\n const { hasRedirectUri } = this\n if (!hasRedirectUri) {\n return nothing\n }\n const { defaultRedirectUri = '', config } = this\n const { redirectUri = defaultRedirectUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Redirect URI\"\n name=\"redirectUri\"\n .value=\"${live(redirectUri)}\"\n type=\"url\"\n required\n invalidText=\"Redirect URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleRedirectUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderScopes(): TemplateResult | typeof nothing {\n const { config } = this\n const { scopes = [] } = config\n\n return html`\n <section aria-label=\"Scopes\">\n <div class=\"label-large scopes-label\">\n Scopes\n <span class=\"badge large-container\">${scopes.length}</span>\n </div>\n\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Scope value\"\n name=\"scope\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n >\n <ui-icon-button\n type=\"outlined\"\n slot=\"suffix\"\n aria-label=\"Add value\"\n title=\"Click this button to accept the value\"\n @click=\"${this.handleScopeAdd}\"\n >\n <ui-icon icon=\"add\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </ui-filled-text-field>\n </div>\n ${this.renderScopesList(scopes)}\n </section>\n `\n }\n\n protected renderScopesList(scopes: string[]): TemplateResult | typeof nothing {\n if (!scopes || !scopes.length) {\n return nothing\n }\n return html`\n <ui-list class=\"scopes-list base-level\" role=\"list\">\n ${scopes.map(\n (item, index) => html`\n <ui-list-item role=\"listitem\">\n ${item}\n <ui-icon-button\n slot=\"end\"\n aria-label=\"Remove scope\"\n title=\"Removes the scope from the list\"\n @click=\"${this.handleScopeRemove}\"\n data-index=\"${index}\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </ui-list-item>\n `\n )}\n </ui-list>\n `\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OAuth2Authorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OAuth2Authorization.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CUSTOM_CREDENTIALS,\n generateState,\n readUrlValue,\n validateRedirectUri,\n} from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type { IOAuth2Authorization, IOauth2GrantType, ITokenInfo } from '@api-client/core/models/Authorization.js'\nimport type { OAuth2DeliveryMethod } from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport { html, nothing, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { CredentialsInfo, Oauth2Credentials } from '../types.js'\nimport { Authorization } from './Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport { SupportedInputTypes } from '../../../types/input.js'\nimport CheckboxElement from '../../../md/checkbox/internals/CheckboxElement.js'\nimport { selectNode } from '../Utils.js'\nimport { SnackNotifications } from '../../../md/notification/SnackNotifications.js'\nimport '../../../md/button/ui-button.js'\nimport '../../../md/text-field/ui-filled-text-field.js'\nimport '../../../md/list/ui-list.js'\nimport '../../../md/list/ui-list-item.js'\nimport '../../../md/dropdown-list/ui-dropdown-list.js'\nimport '../../../md/icon-button/ui-icon-button.js'\nimport '../../../md/checkbox/ui-checkbox.js'\nimport '../../../md/icons/ui-icon.js'\n\n/**\n * List of OAuth 2.0 default response types.\n * This list can be extended by custom grants\n *\n * @returns List of objects with `type` and `label` properties.\n */\nexport const oauth2GrantTypes: IOauth2GrantType[] = [\n {\n type: KnownGrants.implicit,\n label: 'Implicit',\n },\n {\n type: KnownGrants.code,\n label: 'Authorization code',\n },\n {\n type: KnownGrants.clientCredentials,\n label: 'Client credentials',\n },\n {\n type: KnownGrants.password,\n label: 'Password',\n },\n {\n type: KnownGrants.deviceCode,\n label: 'Device code',\n },\n {\n type: KnownGrants.jwtBearer,\n label: 'JWT Bearer',\n },\n]\n\nconst LocationLabels: Record<OAuth2DeliveryMethod, string> = {\n body: 'Message body',\n header: 'Authorization header',\n query: 'Query string',\n}\n\nexport default class OAuth2Authorization extends Authorization {\n get config(): IOAuth2Authorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOAuth2Authorization\n }\n return authorization.config as IOAuth2Authorization\n }\n\n /**\n * @return Computed value, true if the response type is a custom definition.\n */\n get isCustomGrantType(): boolean {\n const { grantType } = this.config\n return (\n !!grantType &&\n ![\n KnownGrants.implicit,\n KnownGrants.code,\n KnownGrants.clientCredentials,\n KnownGrants.password,\n KnownGrants.jwtBearer,\n KnownGrants.deviceCode,\n ].includes(grantType)\n )\n }\n\n /**\n * @returns true when the client id field is required.\n */\n get clientIdRequired(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return ![KnownGrants.clientCredentials, KnownGrants.password, KnownGrants.deviceCode].includes(grantType)\n }\n\n /**\n * @returns true when the client id field is rendered.\n */\n get hasClientId(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return ![KnownGrants.jwtBearer].includes(grantType)\n }\n\n /**\n * @returns true when the client secret field is rendered.\n */\n get hasClientSecret(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n if (isCustomGrantType) {\n return isCustomGrantType\n }\n return [KnownGrants.code, KnownGrants.clientCredentials, KnownGrants.password, KnownGrants.deviceCode].includes(\n grantType\n )\n }\n\n /**\n * @returns true when the client secret field is required.\n */\n get clientSecretRequired(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return [KnownGrants.code].includes(grantType)\n }\n\n /**\n * @returns true when the authorization URI field is rendered.\n */\n get authorizationUriRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return isCustomGrantType || [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n /**\n * @returns true when the token URI field is rendered.\n */\n get accessTokenUriRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return (\n isCustomGrantType ||\n [\n KnownGrants.clientCredentials,\n KnownGrants.code,\n KnownGrants.password,\n KnownGrants.jwtBearer,\n KnownGrants.deviceCode,\n ].includes(grantType)\n )\n }\n\n /**\n * @returns true when the username and password fields are rendered.\n */\n get passwordRendered(): boolean {\n const { isCustomGrantType } = this\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return isCustomGrantType || [KnownGrants.password].includes(grantType)\n }\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n get hasRedirectUri(): boolean {\n const { grantType } = this.config\n if (!grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n /**\n * Currently available grant types.\n */\n @state() accessor grantTypes: IOauth2GrantType[] | undefined = oauth2GrantTypes\n\n /**\n * The definition of client credentials to be rendered for a given grant type.\n * When set on the editor it renders a drop down where the user can choose from predefined\n * credentials (client id & secret).\n *\n */\n @state() accessor credentialsSource: Oauth2Credentials[] | undefined\n\n /**\n * Selected credential source\n */\n @state() accessor credentialSource: string | undefined\n\n /**\n * The default redirect URI to use if not define din the config.\n * @attribute\n */\n @property({ type: String }) accessor defaultRedirectUri: string | undefined\n\n @property({ type: Boolean }) accessor credentialsDisabled = this.disabled\n\n /**\n * The base URI to use to construct the correct URLs to the authorization endpoints.\n *\n * When the paths are relative then base URI is added to the path.\n * Relative paths must start with '/'.\n *\n * Note, URL processing is happening internally in the component. The produced authorize event\n * will have base URI already applied.\n */\n @property({ type: String }) accessor baseUri: string | undefined\n\n /**\n * The error message returned by the authorization library.\n * It renders error dialog when an error ocurred.\n * It is automatically cleared when the user request the token again.\n */\n @state() accessor lastErrorMessage: string | undefined\n\n /**\n * When this property is set then the PKCE option is not rendered for the\n * `authorization_code`. This is mainly meant to be used by the `api-authorization-method`\n * to keep this control disabled and override generated settings when the API spec\n * says that the PKCE is supported.\n * @attribute\n */\n @property({ type: Boolean }) accessor noPkce = false\n\n /**\n * If set, the response type selector is hidden from the UI.\n * @attribute\n */\n @property({ type: Boolean }) accessor noGrantType = false\n\n /**\n * @returns The list of client credentials to render in the credentials selector.\n */\n listCredentials(): CredentialsInfo[] {\n const { credentialsSource, config } = this\n const { grantType } = config\n let credentials: CredentialsInfo[] = []\n if (credentialsSource && credentialsSource.length > 0) {\n const grantTypeCredentials = credentialsSource.find((s) => s.grantType === grantType)\n if (grantTypeCredentials) {\n const customCredential = { name: CUSTOM_CREDENTIALS }\n credentials = [customCredential].concat(grantTypeCredentials.credentials)\n }\n }\n return credentials\n }\n\n /**\n * Sets the client credentials after updating them from the credentials source selector.\n * @param clientId The client id to set on the editor.\n * @param clientSecret The client secret to set on the editor.\n * @param disabled Whether the credentials input is disabled.\n */\n updateCredentials(clientId: string, clientSecret: string, disabled: boolean): void {\n const { config } = this\n config.clientId = clientId\n config.clientSecret = clientSecret\n this.credentialsDisabled = disabled\n this.requestUpdate()\n }\n\n /**\n * This triggers change in the client id & secret of the editor after selecting\n * a credentials source by the user.\n *\n * @param selectedSource The name of the selected credentials source to select.\n */\n updateClientCredentials(selectedSource: string): void {\n const { credentialsSource } = this\n if (!credentialsSource) {\n return\n }\n if (selectedSource) {\n const credentials = this.listCredentials()\n const credential = credentials.find((c) => c.name === selectedSource)\n if (credential) {\n this.updateCredentials(\n credential.clientId || '',\n credential.clientSecret || '',\n credential.name !== CUSTOM_CREDENTIALS\n )\n }\n } else {\n this.updateCredentials('', '', true)\n }\n }\n\n /**\n * @returns true when a credentials source is being selected.\n */\n isSourceSelected(): boolean {\n const { credentialSource } = this\n const credentials = this.listCredentials()\n if (credentials.length > 0) {\n if (!credentialSource) {\n return false\n }\n }\n return true\n }\n\n /**\n * Adds a scope value. If the value has a comma then it is split.\n * @param scope The scope string to add.\n */\n addScope(scope: string): void {\n const { config } = this\n if (!Array.isArray(config.scopes)) {\n config.scopes = []\n }\n const values = scope.split(',').filter((i) => !!i.trim())\n config.scopes = config.scopes.concat(values)\n this.requestUpdate()\n this.notifyChange()\n }\n\n removeScope(index: number): void {\n const { config } = this\n if (!Array.isArray(config.scopes)) {\n return\n }\n if (config.scopes[index] === undefined) {\n return\n }\n config.scopes.splice(index, 1)\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Selects a grant type. It has no effect when the type is already selected.\n * @param value The grant type value to use.\n */\n updateGrantType(value: string): void {\n const { config, credentialSource } = this\n const { grantType } = config\n if (config.grantType === value) {\n return\n }\n if (grantType !== value && credentialSource) {\n this.credentialSource = undefined\n this.credentialsDisabled = this.disabled\n }\n config.grantType = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * It does nothing when the value is already set.\n * @param value The credentials source to use\n */\n updateCredentialSource(value: string): void {\n if (this.credentialSource === value) {\n return\n }\n this.updateClientCredentials(value)\n this.credentialSource = value\n this.notifyChange()\n this.requestUpdate()\n }\n\n updateClientId(value?: string): void {\n const { config } = this\n if (config.clientId === value) {\n return\n }\n config.clientId = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateClientSecret(value?: string): void {\n const { config } = this\n if (config.clientSecret === value) {\n return\n }\n config.clientSecret = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateAuthorizationUri(value?: string): void {\n const { config } = this\n if (config.authorizationUri === value) {\n return\n }\n config.authorizationUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateAccessTokenUri(value?: string): void {\n const { config } = this\n if (config.accessTokenUri === value) {\n return\n }\n config.accessTokenUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateUsername(value?: string): void {\n const { config } = this\n if (config.username === value) {\n return\n }\n config.username = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updatePassword(value?: string): void {\n const { config } = this\n if (config.password === value) {\n return\n }\n config.password = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateDeliveryMethod(value: OAuth2DeliveryMethod): void {\n const { config } = this\n if (config.deliveryMethod === value) {\n return\n }\n config.deliveryMethod = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updatePkce(enabled: boolean): void {\n const { config } = this\n if (config.pkce !== enabled) {\n config.pkce = enabled\n this.notifyChange()\n }\n }\n\n updateAssertion(value?: string): void {\n const { config } = this\n if (config.assertion === value) {\n return\n }\n config.assertion = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateDeviceCode(value?: string): void {\n const { config } = this\n if (config.deviceCode === value) {\n return\n }\n config.deviceCode = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n updateRedirectUri(value: string): void {\n const { defaultRedirectUri = '', config } = this\n const { redirectUri = defaultRedirectUri } = config\n\n const isValid = validateRedirectUri(value)\n if (!isValid) {\n if (config.redirectUri !== defaultRedirectUri) {\n config.redirectUri = defaultRedirectUri\n this.requestUpdate()\n this.notifyChange()\n }\n return\n }\n if (value === redirectUri) {\n delete config.redirectUri\n } else {\n config.redirectUri = value\n }\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n serialize(): IOAuth2Authorization {\n const { config, baseUri } = this\n const { grantType, tokenType = 'Bearer' } = config\n const detail: IOAuth2Authorization = {\n grantType,\n tokenType,\n clientId: config.clientId,\n accessToken: config.accessToken || '',\n scopes: config.scopes,\n deliveryMethod: config.deliveryMethod || 'header',\n deliveryName: config.deliveryName || 'authorization',\n }\n\n switch (grantType) {\n case KnownGrants.implicit:\n // The browser flow.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n break\n case KnownGrants.code:\n // The server flow.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.clientSecret = config.clientSecret\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n detail.pkce = config.pkce\n break\n case 'application':\n case KnownGrants.clientCredentials:\n // The server flow.\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n case KnownGrants.password:\n // The server flow.\n detail.username = config.username\n detail.password = config.password\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n case KnownGrants.jwtBearer:\n // https://datatracker.ietf.org/doc/html/rfc7523#section-2.1\n detail.assertion = config.assertion\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n delete detail.clientId\n break\n case KnownGrants.deviceCode:\n // https://datatracker.ietf.org/doc/html/rfc8628#section-3.4\n detail.deviceCode = config.deviceCode\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.clientSecret = config.clientSecret\n break\n default:\n // Custom response type.\n detail.authorizationUri = readUrlValue(config.authorizationUri, baseUri)\n detail.clientSecret = config.clientSecret\n detail.accessTokenUri = readUrlValue(config.accessTokenUri, baseUri)\n detail.redirectUri = readUrlValue(config.redirectUri, baseUri)\n detail.username = config.username\n detail.password = config.password\n break\n }\n return detail\n }\n\n override checkValidity(): boolean {\n const { config } = this\n const {\n grantType,\n clientId,\n authorizationUri,\n clientSecret,\n accessTokenUri,\n password,\n username,\n assertion,\n deviceCode,\n } = config\n if (!grantType) {\n return false\n }\n switch (grantType) {\n case KnownGrants.implicit:\n return !!clientId && !!authorizationUri\n case KnownGrants.code:\n return !!clientId && !!authorizationUri && !!clientSecret && !!accessTokenUri\n case KnownGrants.clientCredentials:\n return !!accessTokenUri\n case KnownGrants.password:\n return !!accessTokenUri && !!password && !!username\n case KnownGrants.jwtBearer:\n return !!accessTokenUri && !!assertion\n case KnownGrants.deviceCode:\n return !!accessTokenUri && !!deviceCode\n default:\n return !!accessTokenUri\n }\n }\n\n override async authorize(): Promise<ITokenInfo | null> {\n if (this.lastErrorMessage) {\n this.lastErrorMessage = undefined\n }\n\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n\n this.authorizing = true\n const detail = this.serialize()\n const authState = generateState()\n detail.state = authState\n let tokenInfo: ITokenInfo | undefined\n try {\n tokenInfo = await CoreEvents.Authorization.OAuth2.authorize(detail, this)\n this.authorizing = false\n if (!tokenInfo) {\n return null\n }\n if (detail.grantType === KnownGrants.implicit && tokenInfo.state !== authState) {\n return null\n }\n if (tokenInfo.accessToken && tokenInfo.accessToken !== this.config.accessToken) {\n if (tokenInfo.tokenType && tokenInfo.tokenType !== this.config.tokenType) {\n this.config.tokenType = tokenInfo.tokenType\n } else if (!tokenInfo.tokenType && this.config.tokenType !== 'Bearer') {\n this.config.tokenType = 'Bearer'\n }\n this.config.accessToken = tokenInfo.accessToken\n this.requestUpdate()\n this.notifyChange()\n }\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return tokenInfo\n }\n\n protected handleGrantTypeSelect(e: CustomEvent): void {\n const target = e.detail && (e.detail.item as HTMLElement | undefined)\n if (!target) {\n return\n }\n const selected = target.dataset.value as string\n if (!selected) {\n return\n }\n this.updateGrantType(selected)\n }\n\n protected handleCredentialSource(e: CustomEvent): void {\n const target = e.detail && (e.detail.item as HTMLElement | undefined)\n if (!target) {\n return\n }\n const selected = target.dataset.value as string\n if (selected) {\n this.updateCredentialSource(selected)\n }\n }\n\n protected handleClientId(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateClientId(value)\n }\n\n protected handleClientSecret(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateClientSecret(value)\n }\n\n protected handleAuthorizationUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAuthorizationUri(value)\n }\n\n protected handleAccessTokenUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAccessTokenUri(value)\n }\n\n protected handleUsername(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateUsername(value)\n }\n\n protected handlePassword(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updatePassword(value)\n }\n\n protected handleDeliveryMethod(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const selected = target.dataset.value as OAuth2DeliveryMethod | undefined\n if (selected) {\n this.updateDeliveryMethod(selected)\n }\n }\n\n protected handlePkceChange(e: Event): void {\n const input = e.target as CheckboxElement\n this.updatePkce(!!input.checked)\n }\n\n protected handleAssertion(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateAssertion(value)\n }\n\n protected handleDeviceCode(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateDeviceCode(value)\n }\n\n /**\n * A handler for `focus` event on a label that contains text and\n * should be copied to clipboard when user is interacting with it.\n */\n protected handleClickCopy(e: Event): void {\n const node = e.target as HTMLElement\n this.copyFromNode(node)\n }\n\n protected handlerCopyKeydown(e: KeyboardEvent): void {\n if (e.code !== 'Space') {\n return\n }\n const node = e.target as HTMLElement\n this.copyFromNode(node)\n }\n\n /**\n * Copies the content of the node to clipboard.\n */\n protected async copyFromNode(node: HTMLElement): Promise<void> {\n await navigator.clipboard.writeText(node.innerText)\n selectNode(node)\n SnackNotifications.notify('Copied to clipboard', 2000)\n }\n\n protected handleRedirectUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateRedirectUri(value)\n }\n\n protected handleScopeAdd(e: Event): void {\n const input = (e.currentTarget as HTMLElement).parentElement as Input\n const { value } = input\n if (!value) {\n return\n }\n this.addScope(value)\n input.value = ''\n }\n\n protected handleScopeRemove(e: Event): void {\n const target = e.currentTarget as HTMLElement\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.removeScope(index)\n }\n\n override render(): TemplateResult {\n return html` ${this.renderHeader()} ${this.renderEditor()} `\n }\n\n protected renderEditor(): TemplateResult | typeof nothing {\n const { authorization } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">${this.renderFormContent()}</form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { accessToken } = config\n return accessToken ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected renderError(): TemplateResult | typeof nothing {\n const { lastErrorMessage } = this\n if (!lastErrorMessage) {\n return nothing\n }\n return html`<p class=\"error-message\">⚠ ${lastErrorMessage}</p>`\n }\n\n /**\n * @returns The template for the OAuth 2 token value\n */\n protected renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { accessToken } = config\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">Current token</label>\n <p class=\"token-value body-small\">\n <span @click=\"${this.handleClickCopy}\" @keydown=\"${this.handlerCopyKeydown}\">${accessToken}</span>\n </p>\n <div class=\"authorize-actions base-level\">\n <ui-button\n color=\"filled\"\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh access token</ui-button\n >\n </div>\n </div>`\n }\n\n /**\n * @returns The template for the \"authorize\" button.\n */\n protected renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-button\n color=\"filled\"\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"get-token\"\n @click=\"${this.authorize}\"\n >Request access token</ui-button\n >\n </div>`\n }\n\n /**\n * @returns The template for the <form> content.\n */\n protected renderFormContent(): (TemplateResult | typeof nothing)[] {\n const { baseUri } = this\n const urlType = (baseUri ? 'string' : 'url') as SupportedInputTypes\n const result: (TemplateResult | typeof nothing)[] = [\n this.renderGrantType(),\n this.renderCredentialsSource(),\n this.renderClientId(),\n this.renderClientSecret(),\n this.renderAssertion(),\n this.renderDeviceCode(),\n this.renderAuthorizationUri(urlType),\n this.renderAccessTokenUri(urlType),\n this.renderRedirect(),\n this.renderUsernameTemplate(),\n this.renderPassword(),\n this.renderScopes(),\n this.renderParamsLocation(),\n this.renderCustomProperties(),\n ]\n return result\n }\n\n /**\n * @return The template for API custom properties (annotations)\n */\n protected renderCustomProperties(): TemplateResult | typeof nothing {\n return nothing\n }\n\n /**\n * @returns The template for the OAuth 2 response type selector\n */\n protected renderGrantType(): TemplateResult | typeof nothing {\n const { config, readOnly, disabled, noGrantType, isCustomGrantType } = this\n const { grantType } = config\n const items = this.grantTypes || []\n const item = items.find((i) => i.type === grantType)\n const value = item && item.label\n return html`\n <div class=\"full-input grant-line\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleGrantTypeSelect}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"grantType\"\n .value=\"${value || ''}\"\n label=\"Grant type\"\n ?required=\"${!noGrantType && !isCustomGrantType}\"\n ?hidden=\"${noGrantType}\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${items.map(\n (current) =>\n html`<ui-list-item role=\"menuitem\" data-value=\"${current.type}\">${current.label}</ui-list-item>`\n )}\n </ui-list>\n </ui-dropdown-list>\n\n ${this.renderPkce()}\n </div>\n `\n }\n\n /**\n * @return The template for the client credentials source.\n */\n protected renderCredentialsSource(): TemplateResult | typeof nothing {\n const { credentialSource } = this\n const credentials = this.listCredentials()\n if (credentials.length === 0) {\n return nothing\n }\n return html` <div class=\"full-input credential-source-list\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleCredentialSource}\" closeOnOutsideClick>\n <ui-filled-text-field readOnly name=\"credentialSource\" .value=\"${credentialSource || ''}\" label=\"Grant type\">\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${credentials.map(\n (current) => html`<ui-list-item role=\"menuitem\" data-value=\"${current.name}\">${current.name}</ui-list-item>`\n )}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @returns The template for the OAuth 2 client id input.\n */\n protected renderClientId(): TemplateResult | typeof nothing {\n if (!this.hasClientId) {\n return nothing\n }\n const { config, credentialsDisabled, clientIdRequired } = this\n const { clientId } = config\n const sourceSelected = this.isSourceSelected()\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Client id\"\n name=\"clientId\"\n type=\"password\"\n ?required=\"${clientIdRequired}\"\n invalidText=\"Client ID is required for this response type\"\n .value=\"${live(clientId || '')}\"\n ?disabled=\"${sourceSelected ? credentialsDisabled : true}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleClientId}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the OAuth 2 client secret input.\n */\n protected renderClientSecret(): TemplateResult | typeof nothing {\n const { hasClientSecret } = this\n if (!hasClientSecret) {\n return nothing\n }\n const { config, credentialsDisabled, clientSecretRequired } = this\n const { clientSecret } = config\n const sourceSelected = this.isSourceSelected()\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Client secret\"\n name=\"clientSecret\"\n type=\"password\"\n ?required=\"${clientSecretRequired}\"\n invalidText=\"Client secret is required for this response type\"\n .value=\"${live(clientSecret || '')}\"\n ?disabled=\"${sourceSelected ? credentialsDisabled : true}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleClientSecret}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the assertion (JWT) input, when needed.\n */\n protected renderAssertion(): TemplateResult | typeof nothing {\n const { config } = this\n if (config.grantType !== KnownGrants.jwtBearer) {\n return nothing\n }\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Assertion (JWT)\"\n name=\"assertion\"\n .value=\"${live(config.assertion || '')}\"\n required\n invalidText=\"Assertion is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAssertion}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @return The template for the device code input, when needed.\n */\n protected renderDeviceCode(): TemplateResult | typeof nothing {\n const { config } = this\n if (config.grantType !== KnownGrants.deviceCode) {\n return nothing\n }\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Device code\"\n name=\"deviceCode\"\n .value=\"${live(config.deviceCode || '')}\"\n required\n invalidText=\"Device code is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleDeviceCode}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @param urlType The input type to render\n * @returns The template for the authorization URI input\n */\n protected renderAuthorizationUri(urlType: SupportedInputTypes): TemplateResult | typeof nothing {\n if (!this.authorizationUriRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { authorizationUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Authorization URI\"\n name=\"authorizationUri\"\n .value=\"${live(authorizationUri || '')}\"\n type=${urlType}\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Authorization URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAuthorizationUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @param urlType The input type to render\n * @returns The template for the access token URI input\n */\n protected renderAccessTokenUri(urlType: SupportedInputTypes): TemplateResult | typeof nothing {\n if (!this.accessTokenUriRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { accessTokenUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Access token URI\"\n name=\"accessTokenUri\"\n .value=\"${live(accessTokenUri || '')}\"\n type=${urlType}\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Access token URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleAccessTokenUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the user name input\n */\n protected renderUsernameTemplate(): TemplateResult | typeof nothing {\n if (!this.passwordRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { username } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Username\"\n name=\"username\"\n .value=\"${live(username || '')}\"\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"User name is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleUsername}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * @returns The template for the user password input\n */\n protected renderPassword(): TemplateResult | typeof nothing {\n if (!this.passwordRendered) {\n return nothing\n }\n const { config, isCustomGrantType } = this\n const { password } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Password\"\n name=\"password\"\n .value=\"${live(password || '')}\"\n type=\"password\"\n ?required=\"${!isCustomGrantType}\"\n invalidText=\"Password is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handlePassword}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n /**\n * For client_credentials grant this renders the dropdown with an option to select\n * where the credentials should be used. Current values:\n * - authorization header\n * - message body\n */\n protected renderParamsLocation(): TemplateResult | typeof nothing {\n const { config } = this\n const { grantType, deliveryMethod } = config\n if (grantType !== KnownGrants.clientCredentials) {\n return nothing\n }\n const { disabled, readOnly } = this\n return html` <div class=\"full-input delivery-method-line\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleDeliveryMethod}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"deliveryMethod\"\n .value=\"${LocationLabels[deliveryMethod as OAuth2DeliveryMethod] || ''}\"\n label=\"Credentials location\"\n ?disabled=\"${disabled || readOnly}\"\n data-selected=\"${deliveryMethod || ''}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-value=\"header\">${LocationLabels.header}</ui-list-item>\n <ui-list-item role=\"menuitem\" data-value=\"body\">${LocationLabels.body}</ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @returns The template for the PKCE option of the OAuth 2 extension.\n */\n protected renderPkce(): TemplateResult | typeof nothing {\n const { config, noPkce } = this\n const { grantType, pkce } = config\n if (noPkce || grantType !== KnownGrants.code) {\n return nothing\n }\n return html`\n <label class=\"label-large pkce\">\n <ui-checkbox\n .checked=\"${!!pkce}\"\n @change=\"${this.handlePkceChange}\"\n name=\"pkce\"\n aria-label=\"Use PKCE extension\"\n ></ui-checkbox>\n Use PKCE extension\n </label>\n `\n }\n\n /**\n * @returns The template for the OAuth 2 redirect URI label\n */\n protected renderRedirect(): TemplateResult | typeof nothing {\n const { hasRedirectUri } = this\n if (!hasRedirectUri) {\n return nothing\n }\n const { defaultRedirectUri = '', config } = this\n const { redirectUri = defaultRedirectUri } = config\n return html`\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Redirect URI\"\n name=\"redirectUri\"\n .value=\"${live(redirectUri)}\"\n type=\"url\"\n required\n invalidText=\"Redirect URI is required for this response type\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleRedirectUri}\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderScopes(): TemplateResult | typeof nothing {\n const { config } = this\n const { scopes = [] } = config\n\n return html`\n <section aria-label=\"Scopes\">\n <div class=\"label-large scopes-label\">\n Scopes\n <span class=\"badge large-container\">${scopes.length}</span>\n </div>\n\n <div class=\"full-input base-level\">\n <ui-filled-text-field\n label=\"Scope value\"\n name=\"scope\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n >\n <ui-icon-button\n type=\"outlined\"\n slot=\"suffix\"\n aria-label=\"Add value\"\n title=\"Click this button to accept the value\"\n @click=\"${this.handleScopeAdd}\"\n >\n <ui-icon icon=\"add\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </ui-filled-text-field>\n </div>\n ${this.renderScopesList(scopes)}\n </section>\n `\n }\n\n protected renderScopesList(scopes: string[]): TemplateResult | typeof nothing {\n if (!scopes || !scopes.length) {\n return nothing\n }\n return html`\n <ui-list class=\"scopes-list base-level\" role=\"list\">\n ${scopes.map(\n (item, index) => html`\n <ui-list-item role=\"listitem\">\n ${item}\n <ui-icon-button\n slot=\"end\"\n aria-label=\"Remove scope\"\n title=\"Removes the scope from the list\"\n @click=\"${this.handleScopeRemove}\"\n data-index=\"${index}\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </ui-list-item>\n `\n )}\n </ui-list>\n `\n }\n}\n"]}
|
|
@@ -4,8 +4,7 @@ import type { IOauth2GrantType, IOauth2ResponseType, IOidcAuthorization, IOidcTo
|
|
|
4
4
|
import type { IOpenIdProviderMetadata } from '@api-client/core/authorization/types.js';
|
|
5
5
|
import OAuth2Authorization from './OAuth2Authorization.js';
|
|
6
6
|
import '../../../md/icons/ui-icon.js';
|
|
7
|
-
import '../../../md/button/ui-
|
|
8
|
-
import '../../../md/button/ui-filled-button.js';
|
|
7
|
+
import '../../../md/button/ui-button.js';
|
|
9
8
|
export declare const GrantLabels: Record<string, string>;
|
|
10
9
|
export declare const ResponseTypeLabels: Record<string, string>;
|
|
11
10
|
export declare const discoveryCache: Map<string, IOpenIdProviderMetadata>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcAuthorization.d.ts","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACnE,OAAO,+BAA+B,CAAA;AAKtC,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACf,MAAM,0CAA0C,CAAA;AAEjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,mBAAmB,MAAM,0BAA0B,CAAA;AAE1D,OAAO,8BAA8B,CAAA;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"OidcAuthorization.d.ts","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACnE,OAAO,+BAA+B,CAAA;AAKtC,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACf,MAAM,0CAA0C,CAAA;AAEjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,mBAAmB,MAAM,0BAA0B,CAAA;AAE1D,OAAO,8BAA8B,CAAA;AACrC,OAAO,iCAAiC,CAAA;AAExC,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ9C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKrD,CAAA;AAED,eAAO,MAAM,cAAc,sCAA6C,CAAA;AAExE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAS/C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,mBAAmB;IACvD,QAAQ,CAAC,UAAU,UAAQ;IAEpC;;;OAGG;IACM,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IAEtD;;OAEG;IACH,IAAa,cAAc,IAAI,OAAO,CAOrC;IAED,IAAa,MAAM,IAAI,kBAAkB,CASxC;cAEkB,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQzD;;;OAGG;IACM,SAAS,IAAI,kBAAkB;IA0BzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCzC,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,GAAG,MAAM;IAe/D,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAkB7C,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAUrC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC/B;;;OAGG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAWjD;;OAEG;cACa,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAK7F,aAAa,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI;IAsBlD,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE;IAetE;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,EAAE;IAoB1E;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAkBlC;;;;OAIG;IACH,SAAS,CAAC,0BAA0B,IAAI,IAAI;IAiB5C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQvC,SAAS,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAMzC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAIlC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAYxD,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;cAUvB,YAAY,IAAI,cAAc,GAAG,OAAO,OAAO;IAalE,SAAS,CAAC,iBAAiB,IAAI,cAAc;cA6B1B,iBAAiB,IAAI,CAAC,OAAO,OAAO,GAAG,cAAc,CAAC,EAAE;IAM3E;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,cAAc,GAAG,OAAO,OAAO;IA4B5D;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,MAAM;cAK9E,gBAAgB,IAAI,cAAc,GAAG,OAAO,OAAO;cAMnD,iBAAiB,IAAI,cAAc,GAAG,OAAO,OAAO;IAmBvE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IAQ7F,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc;IAWlE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IA+B/E,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM;cAc5D,oBAAoB,IAAI,cAAc,GAAG,OAAO,OAAO;CAa3E"}
|
|
@@ -8,8 +8,7 @@ import * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'
|
|
|
8
8
|
import { Events as CoreEvents } from '@api-client/core/events/Events.js';
|
|
9
9
|
import OAuth2Authorization from './OAuth2Authorization.js';
|
|
10
10
|
import '../../../md/icons/ui-icon.js';
|
|
11
|
-
import '../../../md/button/ui-
|
|
12
|
-
import '../../../md/button/ui-filled-button.js';
|
|
11
|
+
import '../../../md/button/ui-button.js';
|
|
13
12
|
export const GrantLabels = {
|
|
14
13
|
[KnownGrants.implicit]: 'Access token',
|
|
15
14
|
[KnownGrants.code]: 'Authorization code',
|
|
@@ -422,11 +421,12 @@ let OidcAuthorization = (() => {
|
|
|
422
421
|
@change="${this.handleIssuerUri}"
|
|
423
422
|
></ui-filled-text-field>
|
|
424
423
|
|
|
425
|
-
<ui-
|
|
424
|
+
<ui-button
|
|
425
|
+
color="tonal"
|
|
426
426
|
title="Downloads and processes the discovery info"
|
|
427
427
|
@click="${this.handleIssuerRead}"
|
|
428
428
|
data-type="read-discovery"
|
|
429
|
-
>Read</ui-
|
|
429
|
+
>Read</ui-button
|
|
430
430
|
>
|
|
431
431
|
</div>
|
|
432
432
|
`;
|
|
@@ -484,12 +484,13 @@ let OidcAuthorization = (() => {
|
|
|
484
484
|
<p class="tokens-title">Tokens</p>
|
|
485
485
|
${tokens.map((info, index) => this.renderToken(info, index))}
|
|
486
486
|
<div class="authorize-actions">
|
|
487
|
-
<ui-
|
|
487
|
+
<ui-button
|
|
488
|
+
color="filled"
|
|
488
489
|
?disabled="${authorizing}"
|
|
489
490
|
class="auth-button"
|
|
490
491
|
data-type="refresh-token"
|
|
491
492
|
@click="${this.authorize}"
|
|
492
|
-
>Refresh tokens</ui-
|
|
493
|
+
>Refresh tokens</ui-button
|
|
493
494
|
>
|
|
494
495
|
</div>
|
|
495
496
|
</div>`;
|
|
@@ -557,12 +558,13 @@ let OidcAuthorization = (() => {
|
|
|
557
558
|
renderOAth2Authorize() {
|
|
558
559
|
const { authorizing } = this;
|
|
559
560
|
return html ` <div class="authorize-actions base-level">
|
|
560
|
-
<ui-
|
|
561
|
+
<ui-button
|
|
562
|
+
color="filled"
|
|
561
563
|
?disabled="${authorizing || !this.discovered}"
|
|
562
564
|
class="auth-button"
|
|
563
565
|
data-type="get-token"
|
|
564
566
|
@click="${this.authorize}"
|
|
565
|
-
>Request tokens</ui-
|
|
567
|
+
>Request tokens</ui-button
|
|
566
568
|
>
|
|
567
569
|
</div>`;
|
|
568
570
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcAuthorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from 'lit'\nimport '@github/relative-time-element'\nimport { state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { generateState } from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type {\n IOauth2GrantType,\n IOauth2ResponseType,\n IOidcAuthorization,\n IOidcTokenError,\n IOidcTokenInfo,\n} from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport type { IOpenIdProviderMetadata } from '@api-client/core/authorization/types.js'\nimport OAuth2Authorization from './OAuth2Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-filled-tonal-button.js'\nimport '../../../md/button/ui-filled-button.js'\n\nexport const GrantLabels: Record<string, string> = {\n [KnownGrants.implicit]: 'Access token',\n [KnownGrants.code]: 'Authorization code',\n refresh_token: 'Refresh token',\n [KnownGrants.password]: 'Password',\n [KnownGrants.clientCredentials]: 'Client credentials',\n [KnownGrants.deviceCode]: 'Device code',\n [KnownGrants.jwtBearer]: 'JWT Bearer',\n}\n\nexport const ResponseTypeLabels: Record<string, string> = {\n token: 'Token',\n code: 'Code',\n id_token: 'ID token',\n id: 'ID token',\n}\n\nexport const discoveryCache = new Map<string, IOpenIdProviderMetadata>()\n\n/**\n * @returns The default grant types for OIDC\n */\nexport const defaultGrantTypes: IOauth2GrantType[] = [\n {\n type: 'implicit',\n label: 'Access token (browser flow)',\n },\n {\n type: 'authorization_code',\n label: 'Authorization code (server flow)',\n },\n]\n\nexport default class OidcAuthorization extends OAuth2Authorization {\n @state() accessor discovered = false\n\n /**\n * The index of the response from the `supportedResponses`.\n * By default it selects the first one.\n */\n @state() accessor selectedResponse: number | undefined\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n override get hasRedirectUri(): boolean {\n const { discovered } = this\n const { grantType } = this.config\n if (!discovered || !grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n override get config(): IOidcAuthorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOidcAuthorization\n }\n return authorization.config as IOidcAuthorization\n }\n\n protected override update(cp: PropertyValues<void>): void {\n if (cp.has('authorization') && this.authorization) {\n this.detectDiscovered()\n this.detectSelectedResponseType()\n }\n super.update(cp)\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n override serialize(): IOidcAuthorization {\n const result = super.serialize() as IOidcAuthorization\n const { config } = this\n delete result.accessToken\n result.issuerUri = config.issuerUri\n result.tokens = config.tokens\n result.tokenInUse = config.tokenInUse\n result.supportedResponses = config.supportedResponses\n result.grantTypes = config.grantTypes\n result.serverScopes = config.serverScopes\n\n const { selectedResponse = 0 } = this\n const { supportedResponses = [], tokens, tokenInUse = 0 } = config\n const response = supportedResponses[selectedResponse]\n if (response) {\n result.responseType = response.map((i) => i.type).join(' ')\n }\n if (Array.isArray(tokens)) {\n result.accessToken = this.readTokenValue(tokens[tokenInUse] as IOidcTokenInfo)\n }\n if (result.responseType && !this.noPkce && result.responseType.includes('code')) {\n result.pkce = config.pkce\n }\n return result\n }\n\n override async authorize(): Promise<null> {\n this.lastErrorMessage = undefined\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n this.authorizing = true\n const detail = this.serialize()\n const stateParam = generateState()\n detail.state = stateParam\n\n try {\n const tokens = await CoreEvents.Authorization.Oidc.authorize(detail, this)\n this.authorizing = false\n if (!Array.isArray(tokens) || !tokens.length) {\n return null\n }\n const { config } = this\n config.tokens = tokens\n config.accessToken = undefined\n config.tokenInUse = 0\n this.notifyChange()\n this.requestUpdate()\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return null\n }\n\n readTokenLabel(token: IOidcTokenInfo | IOidcTokenError): string {\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return 'Access token'\n case 'code':\n return 'Access token from code exchange'\n case 'id_token':\n case 'id':\n return 'ID token'\n default:\n return 'Unknown token'\n }\n }\n\n readTokenValue(token: IOidcTokenInfo): string {\n if (!token) {\n return ''\n }\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return token.accessToken || ''\n case 'code':\n return token.accessToken || ''\n case 'id_token':\n case 'id':\n return token.idToken || ''\n default:\n return token.accessToken || token.refreshToken || token.idToken || ''\n }\n }\n\n updateIssuerUri(value?: string): void {\n const { config } = this\n if (config.issuerUri === value) {\n return\n }\n config.issuerUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Downloads the OIDC info and pre-populates the form inputs.\n */\n async discover(): Promise<void> {\n const { issuerUri } = this.config\n if (!issuerUri) {\n const message = 'Set the issuer URI first.'\n this.lastErrorMessage = message\n this.discovered = false\n throw new Error(message)\n }\n this.lastErrorMessage = undefined\n let info: IOpenIdProviderMetadata | undefined\n const oidcUrl = this.buildIssuerUrl(issuerUri)\n if (discoveryCache.has(oidcUrl)) {\n info = discoveryCache.get(oidcUrl)\n } else {\n try {\n info = await this.transportDiscovery(oidcUrl)\n if (info) {\n discoveryCache.set(oidcUrl, info)\n }\n } catch {\n this.lastErrorMessage = `Unable to read the discovery information.`\n }\n }\n if (info) {\n this.propagateOidc(info)\n this.discovered = true\n this.notifyChange()\n } else {\n this.discovered = false\n }\n }\n\n /**\n * Constructs the OIDC discovery URL.\n * @param baseUri The issues URI.\n */\n protected buildIssuerUrl(baseUri: string): string {\n let url = baseUri\n if (!url.includes('.well-known')) {\n if (!url.endsWith('/')) {\n url += '/'\n }\n url += '.well-known/openid-configuration'\n }\n return url\n }\n\n /**\n * Requests the data from the discovery endpoint.\n */\n protected async transportDiscovery(url: string): Promise<IOpenIdProviderMetadata | undefined> {\n const rsp = await fetch(url)\n return rsp.json()\n }\n\n propagateOidc(meta: IOpenIdProviderMetadata): void {\n const { config } = this\n\n config.authorizationUri = meta.authorization_endpoint\n config.supportedResponses = this.translateResponseCodes(meta.response_types_supported)\n if (meta.token_endpoint) {\n config.accessTokenUri = meta.token_endpoint\n }\n if (Array.isArray(meta.grant_types_supported) && meta.grant_types_supported.length) {\n config.serverScopes = meta.grant_types_supported\n this.grantTypes = this.translateGrantTypesMeta(meta.grant_types_supported)\n } else {\n this.grantTypes = [...defaultGrantTypes]\n config.serverScopes = undefined\n }\n if (Array.isArray(meta.scopes_supported)) {\n config.scopes = meta.scopes_supported\n } else {\n config.scopes = ['openid']\n }\n }\n\n protected translateGrantTypesMeta(types: string[]): IOauth2GrantType[] {\n const result: IOauth2GrantType[] = []\n types.forEach((type) => {\n const item = {\n type,\n label: type,\n }\n if (GrantLabels[type]) {\n item.label = GrantLabels[type]\n }\n result.push(item)\n })\n return result\n }\n\n /**\n * This generates a 2-dimensional array with the response codes\n * supported by the authorization server. Next to the grant type\n * it describes how token is received by the\n */\n protected translateResponseCodes(codes: string[]): IOauth2ResponseType[][] {\n const result: IOauth2ResponseType[][] = []\n codes.forEach((value) => {\n const items = value.split(' ')\n const response: IOauth2ResponseType[] = []\n result.push(response)\n items.forEach((responseValue) => {\n const type = {\n type: responseValue,\n label: responseValue,\n }\n if (ResponseTypeLabels[responseValue]) {\n type.label = ResponseTypeLabels[responseValue]\n }\n response.push(type)\n })\n })\n return result\n }\n\n /**\n * Sets the `discovered` flag depending on the current configuration.\n */\n protected detectDiscovered(): void {\n const { grantTypes, config } = this\n const { issuerUri, authorizationUri, scopes } = config\n if (!issuerUri || !authorizationUri) {\n this.discovered = false\n return\n }\n if (!Array.isArray(grantTypes) || !grantTypes.length) {\n this.discovered = false\n return\n }\n if (!Array.isArray(scopes) || !scopes.length) {\n this.discovered = false\n return\n }\n this.discovered = true\n }\n\n /**\n * A function called from the auth element `updated` lifecycle method.\n * It tries to figure out the `selectedResponse` from the current list of\n * `supportedResponses` and the `responseType`.\n */\n protected detectSelectedResponseType(): void {\n const { selectedResponse, config } = this\n const { supportedResponses, responseType } = config\n if (!responseType || !Array.isArray(supportedResponses)) {\n return\n }\n const parts = responseType.split(' ')\n const index = supportedResponses.findIndex((i) => {\n const rspTypes = i.map((e) => e.type)\n const hasNotFound = parts.some((p) => !rspTypes.includes(p))\n return !hasNotFound\n })\n if (index >= 0 && selectedResponse !== index) {\n this.selectedResponse = index\n }\n }\n\n selectResponseType(index: number): void {\n if (this.selectedResponse === index) {\n return\n }\n this.selectedResponse = index\n // this.notifyChange(); ???\n }\n\n protected handleIssuerUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateIssuerUri(value)\n }\n\n protected handleIssuerRead(): void {\n this.discover()\n }\n\n protected handleResponseTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.selectResponseType(index)\n }\n\n protected handleTokenInUse(e: Event): void {\n const input = e.target as HTMLInputElement\n const { value } = input\n if (!input.checked) {\n return\n }\n this.config.tokenInUse = Number(value)\n this.notifyChange()\n }\n\n protected override renderEditor(): TemplateResult | typeof nothing {\n const { authorization, discovered } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">\n ${this.renderIssuerInput()} ${discovered ? this.renderFormContent() : ''}\n </form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderIssuerInput(): TemplateResult {\n const { config } = this\n const { issuerUri } = config\n return html`\n <div class=\"full-input base-level issuer-field\">\n <ui-filled-text-field\n label=\"Issuer URI\"\n name=\"issuerUri\"\n .value=\"${live(issuerUri || '')}\"\n type=\"url\"\n required\n invalidText=\"Issuer URI is required\"\n supportingText=\"The URI without the .well-known part.\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleIssuerUri}\"\n ></ui-filled-text-field>\n\n <ui-filled-tonal-button\n title=\"Downloads and processes the discovery info\"\n @click=\"${this.handleIssuerRead}\"\n data-type=\"read-discovery\"\n >Read</ui-filled-tonal-button\n >\n </div>\n `\n }\n\n protected override renderFormContent(): (typeof nothing | TemplateResult)[] {\n const parts = super.renderFormContent()\n parts.unshift(this.renderResponses())\n return parts\n }\n\n /**\n * @returns The template for the response types drop down.\n */\n protected renderResponses(): TemplateResult | typeof nothing {\n const { supportedResponses } = this.config\n if (!Array.isArray(supportedResponses) || !supportedResponses.length) {\n return nothing\n }\n const { selectedResponse = 0, readOnly, disabled } = this\n\n const selected = supportedResponses[selectedResponse]\n const label = selected ? selected.map((i) => i.label).join(', ') : ''\n\n return html` <div class=\"full-input\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleResponseTypeSelect}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"responseType\"\n .value=\"${label}\"\n label=\"Response type\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${supportedResponses.map((item, index) => this.renderResponseItem(item, index))}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @param item The responses list to render as a single item.\n * @returns The template for the response types drop down item.\n */\n protected renderResponseItem(item: IOauth2ResponseType[], index: number): TemplateResult | string {\n const label = item.map((i) => i.label).join(', ')\n return html` <ui-list-item role=\"menuitem\" data-index=\"${index}\">${label}</ui-list-item> `\n }\n\n protected override renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { tokens = [] } = config\n return tokens.length ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected override renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { tokens = [] } = config\n return html` <div class=\"current-tokens\">\n <p class=\"tokens-title\">Tokens</p>\n ${tokens.map((info, index) => this.renderToken(info, index))}\n <div class=\"authorize-actions\">\n <ui-filled-button\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh tokens</ui-filled-button\n >\n </div>\n </div>`\n }\n\n protected renderToken(token: IOidcTokenInfo | IOidcTokenError, index: number): TemplateResult {\n const typedError = token as IOidcTokenError\n if (typedError.error) {\n return this.renderErrorToken(typedError)\n }\n return this.renderInfoToken(token as IOidcTokenInfo, index)\n }\n\n protected renderErrorToken(token: IOidcTokenError): TemplateResult {\n const { error, errorDescription } = token\n const label = this.readTokenLabel(token)\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">${label}</label>\n <p class=\"token-value body-small\">\n <span>${error}: ${errorDescription}</span>\n </p>\n </div>`\n }\n\n protected renderInfoToken(token: IOidcTokenInfo, index: number): TemplateResult {\n const { config } = this\n const { responseType } = token\n const label = this.readTokenLabel(token)\n const value = this.readTokenValue(token)\n return html`\n <div class=\"token-option\">\n <input\n type=\"radio\"\n id=\"${responseType}\"\n name=\"tokenInUse\"\n .value=\"${String(index)}\"\n ?checked=\"${config.tokenInUse === index}\"\n @change=\"${this.handleTokenInUse}\"\n />\n <div class=\"token-info\">\n <label for=\"${responseType}\" class=\"token-label label-large\"> ${label} </label>\n ${this.renderTokenExpiration(token)}\n <div\n class=\"token-value body-small\"\n title=\"${value}\"\n @click=\"${this.handleClickCopy}\"\n @keydown=\"${this.handlerCopyKeydown}\"\n >\n ${value.trim()}\n </div>\n </div>\n </div>\n `\n }\n\n protected renderTokenExpiration(token: IOidcTokenInfo): TemplateResult | string {\n const { time, expiresIn } = token\n if (!time || !expiresIn) {\n return ''\n }\n const d = new Date(time + expiresIn * 1000)\n const expTime = d.toISOString()\n const expired = Date.now() > d.getTime()\n const label = expired ? 'Expired' : 'Expires'\n return html`\n <div class=\"token-expires label-small\">${label} <relative-time datetime=\"${expTime}\"></relative-time></div>\n `\n }\n\n protected override renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-filled-button\n ?disabled=\"${authorizing || !this.discovered}\"\n class=\"auth-button\"\n data-type=\"get-token\"\n @click=\"${this.authorize}\"\n >Request tokens</ui-filled-button\n >\n </div>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OidcAuthorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from 'lit'\nimport '@github/relative-time-element'\nimport { state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { generateState } from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type {\n IOauth2GrantType,\n IOauth2ResponseType,\n IOidcAuthorization,\n IOidcTokenError,\n IOidcTokenInfo,\n} from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport type { IOpenIdProviderMetadata } from '@api-client/core/authorization/types.js'\nimport OAuth2Authorization from './OAuth2Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-button.js'\n\nexport const GrantLabels: Record<string, string> = {\n [KnownGrants.implicit]: 'Access token',\n [KnownGrants.code]: 'Authorization code',\n refresh_token: 'Refresh token',\n [KnownGrants.password]: 'Password',\n [KnownGrants.clientCredentials]: 'Client credentials',\n [KnownGrants.deviceCode]: 'Device code',\n [KnownGrants.jwtBearer]: 'JWT Bearer',\n}\n\nexport const ResponseTypeLabels: Record<string, string> = {\n token: 'Token',\n code: 'Code',\n id_token: 'ID token',\n id: 'ID token',\n}\n\nexport const discoveryCache = new Map<string, IOpenIdProviderMetadata>()\n\n/**\n * @returns The default grant types for OIDC\n */\nexport const defaultGrantTypes: IOauth2GrantType[] = [\n {\n type: 'implicit',\n label: 'Access token (browser flow)',\n },\n {\n type: 'authorization_code',\n label: 'Authorization code (server flow)',\n },\n]\n\nexport default class OidcAuthorization extends OAuth2Authorization {\n @state() accessor discovered = false\n\n /**\n * The index of the response from the `supportedResponses`.\n * By default it selects the first one.\n */\n @state() accessor selectedResponse: number | undefined\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n override get hasRedirectUri(): boolean {\n const { discovered } = this\n const { grantType } = this.config\n if (!discovered || !grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n override get config(): IOidcAuthorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOidcAuthorization\n }\n return authorization.config as IOidcAuthorization\n }\n\n protected override update(cp: PropertyValues<void>): void {\n if (cp.has('authorization') && this.authorization) {\n this.detectDiscovered()\n this.detectSelectedResponseType()\n }\n super.update(cp)\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n override serialize(): IOidcAuthorization {\n const result = super.serialize() as IOidcAuthorization\n const { config } = this\n delete result.accessToken\n result.issuerUri = config.issuerUri\n result.tokens = config.tokens\n result.tokenInUse = config.tokenInUse\n result.supportedResponses = config.supportedResponses\n result.grantTypes = config.grantTypes\n result.serverScopes = config.serverScopes\n\n const { selectedResponse = 0 } = this\n const { supportedResponses = [], tokens, tokenInUse = 0 } = config\n const response = supportedResponses[selectedResponse]\n if (response) {\n result.responseType = response.map((i) => i.type).join(' ')\n }\n if (Array.isArray(tokens)) {\n result.accessToken = this.readTokenValue(tokens[tokenInUse] as IOidcTokenInfo)\n }\n if (result.responseType && !this.noPkce && result.responseType.includes('code')) {\n result.pkce = config.pkce\n }\n return result\n }\n\n override async authorize(): Promise<null> {\n this.lastErrorMessage = undefined\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n this.authorizing = true\n const detail = this.serialize()\n const stateParam = generateState()\n detail.state = stateParam\n\n try {\n const tokens = await CoreEvents.Authorization.Oidc.authorize(detail, this)\n this.authorizing = false\n if (!Array.isArray(tokens) || !tokens.length) {\n return null\n }\n const { config } = this\n config.tokens = tokens\n config.accessToken = undefined\n config.tokenInUse = 0\n this.notifyChange()\n this.requestUpdate()\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return null\n }\n\n readTokenLabel(token: IOidcTokenInfo | IOidcTokenError): string {\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return 'Access token'\n case 'code':\n return 'Access token from code exchange'\n case 'id_token':\n case 'id':\n return 'ID token'\n default:\n return 'Unknown token'\n }\n }\n\n readTokenValue(token: IOidcTokenInfo): string {\n if (!token) {\n return ''\n }\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return token.accessToken || ''\n case 'code':\n return token.accessToken || ''\n case 'id_token':\n case 'id':\n return token.idToken || ''\n default:\n return token.accessToken || token.refreshToken || token.idToken || ''\n }\n }\n\n updateIssuerUri(value?: string): void {\n const { config } = this\n if (config.issuerUri === value) {\n return\n }\n config.issuerUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Downloads the OIDC info and pre-populates the form inputs.\n */\n async discover(): Promise<void> {\n const { issuerUri } = this.config\n if (!issuerUri) {\n const message = 'Set the issuer URI first.'\n this.lastErrorMessage = message\n this.discovered = false\n throw new Error(message)\n }\n this.lastErrorMessage = undefined\n let info: IOpenIdProviderMetadata | undefined\n const oidcUrl = this.buildIssuerUrl(issuerUri)\n if (discoveryCache.has(oidcUrl)) {\n info = discoveryCache.get(oidcUrl)\n } else {\n try {\n info = await this.transportDiscovery(oidcUrl)\n if (info) {\n discoveryCache.set(oidcUrl, info)\n }\n } catch {\n this.lastErrorMessage = `Unable to read the discovery information.`\n }\n }\n if (info) {\n this.propagateOidc(info)\n this.discovered = true\n this.notifyChange()\n } else {\n this.discovered = false\n }\n }\n\n /**\n * Constructs the OIDC discovery URL.\n * @param baseUri The issues URI.\n */\n protected buildIssuerUrl(baseUri: string): string {\n let url = baseUri\n if (!url.includes('.well-known')) {\n if (!url.endsWith('/')) {\n url += '/'\n }\n url += '.well-known/openid-configuration'\n }\n return url\n }\n\n /**\n * Requests the data from the discovery endpoint.\n */\n protected async transportDiscovery(url: string): Promise<IOpenIdProviderMetadata | undefined> {\n const rsp = await fetch(url)\n return rsp.json()\n }\n\n propagateOidc(meta: IOpenIdProviderMetadata): void {\n const { config } = this\n\n config.authorizationUri = meta.authorization_endpoint\n config.supportedResponses = this.translateResponseCodes(meta.response_types_supported)\n if (meta.token_endpoint) {\n config.accessTokenUri = meta.token_endpoint\n }\n if (Array.isArray(meta.grant_types_supported) && meta.grant_types_supported.length) {\n config.serverScopes = meta.grant_types_supported\n this.grantTypes = this.translateGrantTypesMeta(meta.grant_types_supported)\n } else {\n this.grantTypes = [...defaultGrantTypes]\n config.serverScopes = undefined\n }\n if (Array.isArray(meta.scopes_supported)) {\n config.scopes = meta.scopes_supported\n } else {\n config.scopes = ['openid']\n }\n }\n\n protected translateGrantTypesMeta(types: string[]): IOauth2GrantType[] {\n const result: IOauth2GrantType[] = []\n types.forEach((type) => {\n const item = {\n type,\n label: type,\n }\n if (GrantLabels[type]) {\n item.label = GrantLabels[type]\n }\n result.push(item)\n })\n return result\n }\n\n /**\n * This generates a 2-dimensional array with the response codes\n * supported by the authorization server. Next to the grant type\n * it describes how token is received by the\n */\n protected translateResponseCodes(codes: string[]): IOauth2ResponseType[][] {\n const result: IOauth2ResponseType[][] = []\n codes.forEach((value) => {\n const items = value.split(' ')\n const response: IOauth2ResponseType[] = []\n result.push(response)\n items.forEach((responseValue) => {\n const type = {\n type: responseValue,\n label: responseValue,\n }\n if (ResponseTypeLabels[responseValue]) {\n type.label = ResponseTypeLabels[responseValue]\n }\n response.push(type)\n })\n })\n return result\n }\n\n /**\n * Sets the `discovered` flag depending on the current configuration.\n */\n protected detectDiscovered(): void {\n const { grantTypes, config } = this\n const { issuerUri, authorizationUri, scopes } = config\n if (!issuerUri || !authorizationUri) {\n this.discovered = false\n return\n }\n if (!Array.isArray(grantTypes) || !grantTypes.length) {\n this.discovered = false\n return\n }\n if (!Array.isArray(scopes) || !scopes.length) {\n this.discovered = false\n return\n }\n this.discovered = true\n }\n\n /**\n * A function called from the auth element `updated` lifecycle method.\n * It tries to figure out the `selectedResponse` from the current list of\n * `supportedResponses` and the `responseType`.\n */\n protected detectSelectedResponseType(): void {\n const { selectedResponse, config } = this\n const { supportedResponses, responseType } = config\n if (!responseType || !Array.isArray(supportedResponses)) {\n return\n }\n const parts = responseType.split(' ')\n const index = supportedResponses.findIndex((i) => {\n const rspTypes = i.map((e) => e.type)\n const hasNotFound = parts.some((p) => !rspTypes.includes(p))\n return !hasNotFound\n })\n if (index >= 0 && selectedResponse !== index) {\n this.selectedResponse = index\n }\n }\n\n selectResponseType(index: number): void {\n if (this.selectedResponse === index) {\n return\n }\n this.selectedResponse = index\n // this.notifyChange(); ???\n }\n\n protected handleIssuerUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateIssuerUri(value)\n }\n\n protected handleIssuerRead(): void {\n this.discover()\n }\n\n protected handleResponseTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.selectResponseType(index)\n }\n\n protected handleTokenInUse(e: Event): void {\n const input = e.target as HTMLInputElement\n const { value } = input\n if (!input.checked) {\n return\n }\n this.config.tokenInUse = Number(value)\n this.notifyChange()\n }\n\n protected override renderEditor(): TemplateResult | typeof nothing {\n const { authorization, discovered } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">\n ${this.renderIssuerInput()} ${discovered ? this.renderFormContent() : ''}\n </form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderIssuerInput(): TemplateResult {\n const { config } = this\n const { issuerUri } = config\n return html`\n <div class=\"full-input base-level issuer-field\">\n <ui-filled-text-field\n label=\"Issuer URI\"\n name=\"issuerUri\"\n .value=\"${live(issuerUri || '')}\"\n type=\"url\"\n required\n invalidText=\"Issuer URI is required\"\n supportingText=\"The URI without the .well-known part.\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleIssuerUri}\"\n ></ui-filled-text-field>\n\n <ui-button\n color=\"tonal\"\n title=\"Downloads and processes the discovery info\"\n @click=\"${this.handleIssuerRead}\"\n data-type=\"read-discovery\"\n >Read</ui-button\n >\n </div>\n `\n }\n\n protected override renderFormContent(): (typeof nothing | TemplateResult)[] {\n const parts = super.renderFormContent()\n parts.unshift(this.renderResponses())\n return parts\n }\n\n /**\n * @returns The template for the response types drop down.\n */\n protected renderResponses(): TemplateResult | typeof nothing {\n const { supportedResponses } = this.config\n if (!Array.isArray(supportedResponses) || !supportedResponses.length) {\n return nothing\n }\n const { selectedResponse = 0, readOnly, disabled } = this\n\n const selected = supportedResponses[selectedResponse]\n const label = selected ? selected.map((i) => i.label).join(', ') : ''\n\n return html` <div class=\"full-input\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleResponseTypeSelect}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"responseType\"\n .value=\"${label}\"\n label=\"Response type\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${supportedResponses.map((item, index) => this.renderResponseItem(item, index))}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @param item The responses list to render as a single item.\n * @returns The template for the response types drop down item.\n */\n protected renderResponseItem(item: IOauth2ResponseType[], index: number): TemplateResult | string {\n const label = item.map((i) => i.label).join(', ')\n return html` <ui-list-item role=\"menuitem\" data-index=\"${index}\">${label}</ui-list-item> `\n }\n\n protected override renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { tokens = [] } = config\n return tokens.length ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected override renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { tokens = [] } = config\n return html` <div class=\"current-tokens\">\n <p class=\"tokens-title\">Tokens</p>\n ${tokens.map((info, index) => this.renderToken(info, index))}\n <div class=\"authorize-actions\">\n <ui-button\n color=\"filled\"\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh tokens</ui-button\n >\n </div>\n </div>`\n }\n\n protected renderToken(token: IOidcTokenInfo | IOidcTokenError, index: number): TemplateResult {\n const typedError = token as IOidcTokenError\n if (typedError.error) {\n return this.renderErrorToken(typedError)\n }\n return this.renderInfoToken(token as IOidcTokenInfo, index)\n }\n\n protected renderErrorToken(token: IOidcTokenError): TemplateResult {\n const { error, errorDescription } = token\n const label = this.readTokenLabel(token)\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">${label}</label>\n <p class=\"token-value body-small\">\n <span>${error}: ${errorDescription}</span>\n </p>\n </div>`\n }\n\n protected renderInfoToken(token: IOidcTokenInfo, index: number): TemplateResult {\n const { config } = this\n const { responseType } = token\n const label = this.readTokenLabel(token)\n const value = this.readTokenValue(token)\n return html`\n <div class=\"token-option\">\n <input\n type=\"radio\"\n id=\"${responseType}\"\n name=\"tokenInUse\"\n .value=\"${String(index)}\"\n ?checked=\"${config.tokenInUse === index}\"\n @change=\"${this.handleTokenInUse}\"\n />\n <div class=\"token-info\">\n <label for=\"${responseType}\" class=\"token-label label-large\"> ${label} </label>\n ${this.renderTokenExpiration(token)}\n <div\n class=\"token-value body-small\"\n title=\"${value}\"\n @click=\"${this.handleClickCopy}\"\n @keydown=\"${this.handlerCopyKeydown}\"\n >\n ${value.trim()}\n </div>\n </div>\n </div>\n `\n }\n\n protected renderTokenExpiration(token: IOidcTokenInfo): TemplateResult | string {\n const { time, expiresIn } = token\n if (!time || !expiresIn) {\n return ''\n }\n const d = new Date(time + expiresIn * 1000)\n const expTime = d.toISOString()\n const expired = Date.now() > d.getTime()\n const label = expired ? 'Expired' : 'Expires'\n return html`\n <div class=\"token-expires label-small\">${label} <relative-time datetime=\"${expTime}\"></relative-time></div>\n `\n }\n\n protected override renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-button\n color=\"filled\"\n ?disabled=\"${authorizing || !this.discovered}\"\n class=\"auth-button\"\n data-type=\"get-token\"\n @click=\"${this.authorize}\"\n >Request tokens</ui-button\n >\n </div>`\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import CodeSnippet from '../../code-snippets/CodeSnippet.js';
|
|
|
4
4
|
import '../../md/dropdown-list/ui-dropdown-list.js';
|
|
5
5
|
import '../../md/list/ui-list.js';
|
|
6
6
|
import '../../md/list/ui-list-item.js';
|
|
7
|
-
import '../../md/button/ui-
|
|
7
|
+
import '../../md/button/ui-button.js';
|
|
8
8
|
import '../../md/icons/ui-icon.js';
|
|
9
9
|
interface CodeGroup {
|
|
10
10
|
label: string;
|