dashboard-shell-shell 1.0.121 → 1.0.1000000081
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/.DS_Store +0 -0
- package/assets/brand/harvester/favicon.png +0 -0
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/icons/iconfont.css +19 -3
- package/assets/icons/iconfont.js +1 -1
- package/assets/icons/iconfont.json +28 -0
- package/assets/icons/iconfont.ttf +0 -0
- package/assets/icons/iconfont.woff +0 -0
- package/assets/icons/iconfont.woff2 +0 -0
- package/assets/images/pl/half-logo.svg +2 -23
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +0 -0
- package/assets/styles/base/_variables.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +0 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/global/_select.scss +4 -2
- package/assets/styles/global/_table.scss +5 -0
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +1 -1
- package/assets/translations/zh-hans.yaml +25 -15
- package/chart/monitoring/index.vue +3 -1
- package/chart/monitoring/prometheus/index.vue +13 -10
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/ActionMenu.vue +2 -2
- package/components/ActionMenuShell.vue +3 -0
- package/components/AppModal.vue +84 -8
- package/components/AssignTo.vue +25 -11
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/ButtonDropdown.vue +26 -4
- package/components/ButtonGroup.vue +4 -0
- package/components/ButtonMultiAction.vue +1 -0
- package/components/CodeMirror.vue +19 -6
- package/components/CommunityLinks.vue +3 -3
- package/components/ConsumptionGauge.vue +24 -5
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +13 -7
- package/components/CruResourceFooter.vue +2 -2
- package/components/DashboardOptions.vue +29 -17
- package/components/DetailText.vue +5 -0
- package/components/DisableAuthProviderModal.vue +1 -0
- package/components/DotState.vue +84 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +89 -16
- package/components/FixedBanner.vue +19 -12
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrafanaDashboard.vue +4 -4
- package/components/GrowlManager.vue +4 -1
- package/components/HardwareResourceGauge.vue +39 -3
- package/components/InfoBox.vue +3 -3
- package/components/InputOrDisplay.vue +28 -2
- package/components/LabelValue.vue +20 -1
- package/components/LandingPagePreference.vue +5 -3
- package/components/LocaleSelector.vue +39 -93
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +13 -3
- package/components/MoveModal.vue +1 -0
- package/components/PodSecurityAdmission.vue +1 -1
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +16 -3
- package/components/PromptRemove.vue +29 -9
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +52 -17
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +54 -16
- package/components/ResourceList/Masthead.vue +9 -4
- package/components/ResourceList/index.vue +4 -3
- package/components/ResourceTable.vue +1 -0
- package/components/SideNav.vue +20 -15
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +10 -4
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +540 -554
- package/components/SortableTable/selection.js +2 -13
- package/components/StatusBadge.vue +77 -0
- package/components/Tabbed/Tab.vue +3 -3
- package/components/Tabbed/index.vue +47 -29
- package/components/Wizard.vue +2 -2
- package/components/YamlEditor.vue +1 -1
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/FixedBanner.test.ts +3 -3
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/Principal.vue +10 -3
- package/components/auth/RoleDetailEdit.vue +1 -1
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/form/ArrayList.vue +123 -85
- package/components/form/ArrayListGrouped.vue +10 -2
- package/components/form/ArrayListSelect.vue +1 -1
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/Footer.vue +10 -7
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/InputWithSelect.vue +6 -5
- package/components/form/KeyValue.vue +39 -10
- package/components/form/LabeledSelect.vue +73 -77
- package/components/form/Labels.vue +6 -3
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +42 -17
- package/components/form/NameNsDescription.vue +163 -116
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/Password.vue +11 -5
- package/components/form/PodAffinity.vue +47 -48
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
- package/components/form/ResourceQuota/Project.vue +9 -5
- package/components/form/ResourceQuota/ProjectRow.vue +4 -6
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
- package/components/form/SSHKnownHosts/index.vue +16 -2
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +44 -7
- package/components/form/ShellInput.vue +5 -1
- package/components/form/SimpleSecretSelector.vue +29 -9
- package/components/form/Tolerations.vue +5 -1
- package/components/form/UnitInput.vue +10 -5
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/form/__tests__/UnitInput.test.ts +4 -5
- package/components/formatter/BadgeStateFormatter.vue +8 -5
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/LiveDate.vue +3 -3
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +18 -4
- package/components/nav/Header.vue +39 -13
- package/components/nav/Jump.vue +7 -0
- package/components/nav/NamespaceFilter.vue +21 -11
- package/components/nav/Pinned.vue +1 -1
- package/components/nav/TopLevelMenu.vue +5 -17
- package/components/nav/Type.vue +30 -33
- package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead-btn.vue +225 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -0
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -1
- package/composables/focusTrap.ts +11 -3
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/private-label.js +15 -10
- package/config/router/routes.js +21 -13
- package/config/store.js +4 -0
- package/config/table-headers.js +3 -2
- package/config/uiplugins.js +5 -1
- package/core/plugin-routes.ts +5 -115
- package/core/plugins.js +1 -1
- package/core/types.ts +23 -2
- package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
- package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -0
- package/dialog/DeactivateDriverDialog.vue +5 -4
- package/dialog/ForceMachineRemoveDialog.vue +6 -3
- package/dialog/GitRepoForceUpdateDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +2 -2
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +162 -88
- package/edit/auth/azuread.vue +2 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/auth/ldap/__tests__/config.test.ts +0 -14
- package/edit/auth/ldap/config.vue +0 -24
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +39 -6
- package/edit/auth/saml.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
- package/edit/cloudcredential.vue +24 -9
- package/edit/fleet.cattle.io.clustergroup.vue +5 -3
- package/edit/fleet.cattle.io.gitrepo.vue +2 -0
- package/edit/logging-flow/Match.vue +1 -1
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
- package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
- package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
- package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
- package/edit/namespace.vue +1 -2
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
- package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
- package/edit/service.vue +0 -3
- package/edit/token.vue +32 -11
- package/edit/workload/Job.vue +6 -6
- package/edit/workload/__tests__/Job.test.ts +0 -1
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +3 -3
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +1 -0
- package/list/namespace.vue +3 -1
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/list/workload.vue +7 -6
- package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
- package/machine-config/azure.vue +16 -4
- package/machine-config/vmwarevsphere.vue +16 -0
- package/mixins/resource-fetch.js +2 -1
- package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/kontainerdriver.js +6 -3
- package/models/logging.banzaicloud.io.flow.js +2 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/management.cattle.io.setting.js +2 -1
- package/models/namespace.js +4 -5
- package/models/nodedriver.js +6 -3
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +4 -1
- package/package.json +1 -1
- package/pages/about.vue +16 -8
- package/pages/account/index.vue +80 -24
- package/pages/account/pri.vue +229 -0
- package/pages/auth/login.vue +195 -44
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +144 -19
- package/pages/auth/verify.vue +13 -8
- package/pages/auth copy/login.vue +595 -0
- package/pages/auth copy/logout.vue +47 -0
- package/pages/auth copy/setup.vue +523 -0
- package/pages/auth copy/verify.vue +203 -0
- package/pages/c/_cluster/_product/namespaces.vue +5 -5
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- package/pages/c/_cluster/apps/charts/install.vue +26 -26
- package/pages/c/_cluster/auth/config/index.vue +10 -12
- package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
- package/pages/c/_cluster/explorer/index.vue +17 -15
- package/pages/c/_cluster/istio/index.vue +2 -2
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
- package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/brand.vue +3 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +9 -7
- package/pages/support/index.vue +4 -1
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/normalize.js +3 -1
- package/plugins/dashboard-store/resource-class.js +31 -29
- package/plugins/internal-api/index.ts +37 -0
- package/plugins/internal-api/shared/base-api.ts +13 -0
- package/plugins/internal-api/shell/shell.api.ts +108 -0
- package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
- package/promptRemove/management.cattle.io.globalrole.vue +1 -1
- package/promptRemove/management.cattle.io.project.vue +2 -2
- package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
- package/promptRemove/pod.vue +1 -1
- package/public/index.html +2 -1
- package/rancher-components/BadgeState/BadgeState.vue +5 -1
- package/rancher-components/Banner/Banner.vue +8 -2
- package/rancher-components/Card/Card.vue +3 -6
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
- package/rancher-components/Form/Radio/RadioButton.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
- package/rancher-components/RcDropdown/types.ts +1 -0
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +12 -12
- package/scripts/publish-shell.sh +18 -23
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/test-plugins-build.sh +4 -6
- package/scripts/typegen.sh +28 -46
- package/server/har-file.js +25 -3
- package/static/favicon.ico +0 -0
- package/static/favicon.png +0 -0
- package/static/loading-indicator.html +2 -2
- package/store/aws.js +9 -2
- package/store/features.js +2 -1
- package/store/i18n.js +3 -3
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +2 -1
- package/types/cloud-shell/index.d.ts +11014 -0
- package/types/global-vue.d.ts +5 -0
- package/types/internal-api/shell/growl.d.ts +25 -0
- package/types/internal-api/shell/modal.d.ts +77 -0
- package/types/internal-api/shell/slideIn.d.ts +15 -0
- package/types/shell/index.d.ts +118 -128
- package/types/vue-shim.d.ts +4 -1
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/__tests__/string.test.ts +2 -2
- package/utils/auth.js +1 -0
- package/utils/banners.js +0 -45
- package/utils/cluster.js +35 -0
- package/utils/color.js +9 -8
- package/utils/error.js +61 -3
- package/utils/errorTranslate.json +450 -30
- package/utils/object.js +46 -6
- package/utils/router.js +22 -1
- package/utils/select.js +26 -3
- package/utils/string.js +9 -8
- package/utils/title.ts +1 -1
- package/utils/validators/machine-pool.ts +20 -0
- package/vue.config.js +7 -2
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/resources/fleet.d.ts +0 -57
- package/types/resources/pod-security-admission.ts +0 -36
- package/types/resources/settings.d.ts +0 -93
- package/types/resources/userPreferences.d.ts +0 -13
- package/types/vue-shim.d +0 -20
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { nextTick } from 'vue';
|
|
2
2
|
/* eslint-disable jest/no-hooks */
|
|
3
|
-
import { mount } from '@vue/test-utils';
|
|
3
|
+
import { mount, type VueWrapper } from '@vue/test-utils';
|
|
4
4
|
import { _EDIT } from '@shell/config/query-params';
|
|
5
5
|
|
|
6
6
|
import oidc from '@shell/edit/auth/oidc.vue';
|
|
@@ -32,120 +32,194 @@ const mockModel = {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
describe('oidc.vue', () => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
35
|
+
describe('given default valid values', () => {
|
|
36
|
+
let wrapper: VueWrapper<any, any>;
|
|
37
|
+
const requiredSetup = () => ({
|
|
38
|
+
data() {
|
|
39
|
+
return {
|
|
40
|
+
isEnabling: false,
|
|
41
|
+
editConfig: false,
|
|
42
|
+
model: { ...mockModel },
|
|
43
|
+
serverSetting: null,
|
|
44
|
+
errors: [],
|
|
45
|
+
originalModel: null,
|
|
46
|
+
principals: [],
|
|
47
|
+
authConfigName: 'oidc',
|
|
48
|
+
} as any; // any is necessary as in pre-existing tests we are including inherited mixins values
|
|
49
|
+
},
|
|
50
|
+
global: {
|
|
51
|
+
mocks: {
|
|
52
|
+
$fetchState: { pending: false },
|
|
53
|
+
$store: {
|
|
54
|
+
getters: {
|
|
55
|
+
currentStore: () => 'current_store',
|
|
56
|
+
'current_store/schemaFor': jest.fn(),
|
|
57
|
+
'current_store/all': jest.fn(),
|
|
58
|
+
'i18n/t': (val: string) => val,
|
|
59
|
+
'i18n/exists': jest.fn(),
|
|
60
|
+
},
|
|
61
|
+
dispatch: jest.fn()
|
|
59
62
|
},
|
|
60
|
-
|
|
63
|
+
$route: { query: { AS: '' }, params: { id: 'oicd' } },
|
|
64
|
+
$router: { applyQuery: jest.fn() },
|
|
61
65
|
},
|
|
62
|
-
$route: { query: { AS: '' }, params: { id: 'oicd' } },
|
|
63
|
-
$router: { applyQuery: jest.fn() },
|
|
64
66
|
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
});
|
|
67
|
+
props: {
|
|
68
|
+
value: { applicationSecret: '' },
|
|
69
|
+
mode: _EDIT,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
afterEach(() => {
|
|
76
|
-
wrapper.unmount();
|
|
77
|
-
});
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
wrapper = mount(oidc, { ...requiredSetup() });
|
|
75
|
+
});
|
|
78
76
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
afterEach(() => {
|
|
78
|
+
wrapper.unmount();
|
|
79
|
+
});
|
|
82
80
|
|
|
83
|
-
|
|
81
|
+
describe('have "Create" button disabled', () => {
|
|
82
|
+
it('given missing Auth endpoint URL', () => {
|
|
83
|
+
wrapper.vm.model.authEndpoint = '';
|
|
84
|
+
wrapper.vm.model.scopes = 'openid profile email'; // set scope to be sure
|
|
85
|
+
wrapper.vm.oidcScope = ['openid', 'profile', 'email']; // TODO #13457: this is duplicated due wrong format of scopes
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await nextTick();
|
|
89
|
+
expect(saveButton.disabled).toBe(true);
|
|
90
|
+
});
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
it('given missing required basic scopes', () => {
|
|
93
|
+
wrapper.vm.model.authEndpoint = 'whatever'; // set auth endpoint to be sure
|
|
94
|
+
wrapper.vm.model.scopes = 'something else'; // set wrong scope
|
|
95
|
+
wrapper.vm.oidcScope = ['something', 'else']; // TODO #13457: this is duplicated due wrong format of scopes
|
|
93
96
|
|
|
94
|
-
|
|
95
|
-
});
|
|
97
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
96
98
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
await nextTick();
|
|
99
|
+
expect(saveButton.disabled).toBe(true);
|
|
100
|
+
});
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
it('when provider is disabled and editing config before fields are filled in', async() => {
|
|
103
|
+
wrapper.setData({ model: {}, editConfig: true });
|
|
104
|
+
await nextTick();
|
|
102
105
|
|
|
103
|
-
|
|
104
|
-
});
|
|
106
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
105
107
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
await nextTick();
|
|
108
|
+
expect(saveButton.disabled).toBe(true);
|
|
109
|
+
});
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
it('when provider is disabled and editing config after required fields and scope is missing openid', async() => {
|
|
112
|
+
wrapper.setData({ oidcUrls: { url: validUrl, realm: validRealm } });
|
|
113
|
+
await nextTick();
|
|
111
114
|
|
|
112
|
-
|
|
113
|
-
});
|
|
115
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
expect(saveButton.disabled).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
describe('have "Create" button enabled', () => {
|
|
122
|
+
it('when customEndpoint is disabled and required fields are filled in', async() => {
|
|
123
|
+
wrapper.setData({ oidcUrls: { url: validUrl, realm: validRealm }, oidcScope: validScope.split(' ') });
|
|
124
|
+
await nextTick();
|
|
120
125
|
|
|
121
|
-
|
|
122
|
-
});
|
|
126
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
123
127
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
await nextTick();
|
|
128
|
+
expect(saveButton.disabled).toBe(false);
|
|
129
|
+
});
|
|
127
130
|
|
|
128
|
-
|
|
131
|
+
it('when customEndpoint is enabled and required fields are filled in', async() => {
|
|
132
|
+
wrapper.setData({ customEndpoint: { value: true }, oidcScope: validScope.split(' ') });
|
|
133
|
+
await nextTick();
|
|
129
134
|
|
|
130
|
-
|
|
131
|
-
await nextTick();
|
|
135
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
132
136
|
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
expect(saveButton.disabled).toBe(false);
|
|
138
|
+
});
|
|
135
139
|
|
|
136
|
-
|
|
137
|
-
|
|
140
|
+
it('when provider is enabled and not editing config', async() => {
|
|
141
|
+
wrapper.setData({ model: { enabled: true }, editConfig: false });
|
|
142
|
+
await nextTick();
|
|
138
143
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
const saveButton = wrapper.find('[data-testid="form-save"]').element as HTMLInputElement;
|
|
145
|
+
|
|
146
|
+
expect(saveButton.disabled).toBe(false);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('updates issuer endpoint when oidcUrls.url and oidcUrls.realm changes', async() => {
|
|
151
|
+
wrapper.setData({ oidcUrls: { url: validUrl } });
|
|
152
|
+
await nextTick();
|
|
153
|
+
|
|
154
|
+
expect(wrapper.vm.model.issuer).toBe(`${ validUrl }/realms/`);
|
|
155
|
+
|
|
156
|
+
wrapper.setData({ oidcUrls: { realm: validRealm } });
|
|
157
|
+
await nextTick();
|
|
158
|
+
|
|
159
|
+
expect(wrapper.vm.model.issuer).toBe(`${ validUrl }/realms/${ validRealm }`);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('`groupSearchEnabled` defaults to false', async() => {
|
|
163
|
+
const groupSearchCheckbox = wrapper.getComponent('[data-testid="input-group-search"]');
|
|
164
|
+
|
|
165
|
+
expect(groupSearchCheckbox.isVisible()).toBe(true);
|
|
166
|
+
expect(wrapper.vm.model.groupSearchEnabled).toBe(false);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('`groupSearchEnabled` updates when checkbox is clicked', async() => {
|
|
170
|
+
const groupSearchCheckbox = wrapper.getComponent('[data-testid="input-group-search"]');
|
|
171
|
+
|
|
172
|
+
await groupSearchCheckbox.find('[role="checkbox"]').trigger('click');
|
|
173
|
+
|
|
174
|
+
expect(groupSearchCheckbox.isVisible()).toBe(true);
|
|
175
|
+
expect(wrapper.vm.model.groupSearchEnabled).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it('changing URL should update issuer and auth-endpoint if Keycloak', async() => {
|
|
179
|
+
wrapper.vm.model.id = 'keycloakoidc';
|
|
180
|
+
const newUrl = 'whatever';
|
|
181
|
+
|
|
182
|
+
await wrapper.find(`[data-testid="oidc-url"]`).setValue(newUrl);
|
|
183
|
+
await wrapper.vm.$nextTick();
|
|
184
|
+
|
|
185
|
+
const issuerValue = (wrapper.find('[data-testid="oidc-issuer"]').element as HTMLInputElement).value;
|
|
186
|
+
const endpointValue = (wrapper.find('[data-testid="oidc-auth-endpoint"]').element as HTMLInputElement).value;
|
|
187
|
+
|
|
188
|
+
expect(issuerValue).toBe(`${ newUrl }/realms/`);
|
|
189
|
+
expect(endpointValue).toBe(`${ newUrl }/realms//protocol/openid-connect/auth`);
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('changing realm should update issuer and auth-endpoint if Keycloak', async() => {
|
|
193
|
+
const newRealm = 'newRealm';
|
|
194
|
+
const oldUrl = 'oldUrl';
|
|
195
|
+
|
|
196
|
+
wrapper.vm.model.id = 'keycloakoidc';
|
|
197
|
+
wrapper.vm.oidcUrls.url = oldUrl;
|
|
198
|
+
|
|
199
|
+
await wrapper.find(`[data-testid="oidc-realm"]`).setValue(newRealm);
|
|
200
|
+
await wrapper.vm.$nextTick();
|
|
201
|
+
|
|
202
|
+
const issuerValue = (wrapper.find('[data-testid="oidc-issuer"]').element as HTMLInputElement).value;
|
|
203
|
+
const endpointValue = (wrapper.find('[data-testid="oidc-auth-endpoint"]').element as HTMLInputElement).value;
|
|
204
|
+
|
|
205
|
+
expect(issuerValue).toBe(`${ oldUrl }/realms/${ newRealm }`);
|
|
206
|
+
expect(endpointValue).toBe(`${ oldUrl }/realms/${ newRealm }/protocol/openid-connect/auth`);
|
|
207
|
+
});
|
|
142
208
|
|
|
143
|
-
|
|
144
|
-
|
|
209
|
+
it('clear URL should clear issuer and auth-endpoint if Keycloak', async() => {
|
|
210
|
+
wrapper.vm.model.id = 'keycloakoidc';
|
|
211
|
+
const newUrl = 'whatever';
|
|
212
|
+
const urlInput = wrapper.find(`[data-testid="oidc-url"]`);
|
|
145
213
|
|
|
146
|
-
|
|
214
|
+
await urlInput.setValue(newUrl);
|
|
215
|
+
await wrapper.vm.$nextTick();
|
|
216
|
+
await urlInput.setValue('');
|
|
217
|
+
await wrapper.vm.$nextTick();
|
|
218
|
+
const issuer = (wrapper.find('[data-testid="oidc-issuer"]').element as HTMLInputElement).value;
|
|
219
|
+
const endpoint = (wrapper.find('[data-testid="oidc-auth-endpoint"]').element as HTMLInputElement).value;
|
|
147
220
|
|
|
148
|
-
|
|
149
|
-
|
|
221
|
+
expect(issuer).toBe('');
|
|
222
|
+
expect(endpoint).toBe('');
|
|
223
|
+
});
|
|
150
224
|
});
|
|
151
225
|
});
|
package/edit/auth/azuread.vue
CHANGED
|
@@ -363,7 +363,7 @@ export default {
|
|
|
363
363
|
</template>
|
|
364
364
|
</AuthBanner>
|
|
365
365
|
|
|
366
|
-
<hr>
|
|
366
|
+
<hr role="none">
|
|
367
367
|
|
|
368
368
|
<AllowedPrincipals
|
|
369
369
|
provider="azuread"
|
|
@@ -388,6 +388,7 @@ export default {
|
|
|
388
388
|
<label class="reply-url">{{ t('authConfig.azuread.reply.label') }} </label>
|
|
389
389
|
<CopyToClipboardText
|
|
390
390
|
:plain="true"
|
|
391
|
+
:aria-label="t('authConfig.azuread.reply.ariaLabel')"
|
|
391
392
|
:text="replyUrl"
|
|
392
393
|
/>
|
|
393
394
|
</InfoBox>
|
package/edit/auth/github.vue
CHANGED
|
@@ -90,7 +90,7 @@ export default {
|
|
|
90
90
|
</template>
|
|
91
91
|
</AuthBanner>
|
|
92
92
|
|
|
93
|
-
<hr>
|
|
93
|
+
<hr role="none">
|
|
94
94
|
|
|
95
95
|
<AllowedPrincipals
|
|
96
96
|
provider="googleoauth"
|
|
@@ -143,12 +143,14 @@ export default {
|
|
|
143
143
|
<b>{{ t('authConfig.googleoauth.steps.1.body.2', {}, true) }}</b> {{ t('authConfig.googleoauth.steps.1.topPrivateDomain', {}, true) }} <CopyToClipboardText
|
|
144
144
|
:plain="true"
|
|
145
145
|
:text="tArgs.hostname"
|
|
146
|
+
:aria-label="t('authConfig.googleoauth.steps.1.ariaLabel.hostname')"
|
|
146
147
|
/>
|
|
147
148
|
</li>
|
|
148
149
|
<li>
|
|
149
150
|
<b>{{ t('authConfig.googleoauth.steps.1.body.3', {}, true) }}</b> <CopyToClipboardText
|
|
150
151
|
:plain="true"
|
|
151
152
|
:text="serverUrl"
|
|
153
|
+
:aria-label="t('authConfig.googleoauth.steps.1.ariaLabel.serverUrl')"
|
|
152
154
|
/>
|
|
153
155
|
</li>
|
|
154
156
|
<li>{{ t('authConfig.googleoauth.steps.1.body.4', {}, true) }} </li>
|
|
@@ -170,12 +172,14 @@ export default {
|
|
|
170
172
|
<b>{{ t('authConfig.googleoauth.steps.2.body.2', {}, true) }}</b> <CopyToClipboardText
|
|
171
173
|
:plain="true"
|
|
172
174
|
:text="serverUrl"
|
|
175
|
+
:aria-label="t('authConfig.googleoauth.steps.1.ariaLabel.serverUrl')"
|
|
173
176
|
/>
|
|
174
177
|
</li>
|
|
175
178
|
<li>
|
|
176
179
|
<b>{{ t('authConfig.googleoauth.steps.2.body.3', {}, true) }}</b> <CopyToClipboardText
|
|
177
180
|
:plain="true"
|
|
178
181
|
:text="serverUrl+'/verify-auth'"
|
|
182
|
+
:aria-label="t('authConfig.googleoauth.steps.2.ariaLabel.serverUrlVerify')"
|
|
179
183
|
/>
|
|
180
184
|
</li>
|
|
181
185
|
<li>{{ t('authConfig.googleoauth.steps.2.body.4', {}, true) }} </li>
|
|
@@ -2,20 +2,6 @@ import { mount } from '@vue/test-utils';
|
|
|
2
2
|
import LDAPConfig from '@shell/edit/auth/ldap/config.vue';
|
|
3
3
|
|
|
4
4
|
describe('lDAP config', () => {
|
|
5
|
-
it.each([
|
|
6
|
-
'openldap', 'freeipa'
|
|
7
|
-
])('should display searchUsingServiceAccount checkbox if type %p', (type) => {
|
|
8
|
-
const wrapper = mount(LDAPConfig, {
|
|
9
|
-
propsData: {
|
|
10
|
-
value: {},
|
|
11
|
-
type,
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
const checkbox = wrapper.find('[data-testid="searchUsingServiceAccount"]');
|
|
15
|
-
|
|
16
|
-
expect(checkbox).toBeDefined();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
5
|
it('updates user login filter when value is entered', async() => {
|
|
20
6
|
const wrapper = mount(
|
|
21
7
|
LDAPConfig,
|
|
@@ -11,8 +11,6 @@ const DEFAULT_TLS_PORT = 636;
|
|
|
11
11
|
|
|
12
12
|
export const SHIBBOLETH = 'shibboleth';
|
|
13
13
|
export const OKTA = 'okta';
|
|
14
|
-
export const OPEN_LDAP = 'openldap';
|
|
15
|
-
export const FREE_IPA = 'freeipa';
|
|
16
14
|
|
|
17
15
|
export default {
|
|
18
16
|
emits: ['update:value'],
|
|
@@ -66,11 +64,6 @@ export default {
|
|
|
66
64
|
// Does the auth provider support LDAP for search in addition to SAML?
|
|
67
65
|
isSamlProvider() {
|
|
68
66
|
return this.type === SHIBBOLETH || this.type === OKTA;
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
// Allow to enable user search just for these providers
|
|
72
|
-
isSearchAllowed() {
|
|
73
|
-
return this.type === OPEN_LDAP || this.type === FREE_IPA;
|
|
74
67
|
}
|
|
75
68
|
},
|
|
76
69
|
|
|
@@ -233,23 +226,6 @@ export default {
|
|
|
233
226
|
/>
|
|
234
227
|
</div>
|
|
235
228
|
</div>
|
|
236
|
-
|
|
237
|
-
<div
|
|
238
|
-
v-if="isSearchAllowed"
|
|
239
|
-
class="row mb-20"
|
|
240
|
-
>
|
|
241
|
-
<div class="col">
|
|
242
|
-
<Checkbox
|
|
243
|
-
v-model:value="model.searchUsingServiceAccount"
|
|
244
|
-
:mode="mode"
|
|
245
|
-
data-testid="searchUsingServiceAccount"
|
|
246
|
-
class="full-height"
|
|
247
|
-
:label="t('authConfig.ldap.searchUsingServiceAccount.label')"
|
|
248
|
-
:tooltip="t('authConfig.ldap.searchUsingServiceAccount.tip')"
|
|
249
|
-
/>
|
|
250
|
-
</div>
|
|
251
|
-
</div>
|
|
252
|
-
|
|
253
229
|
<div class="row mb-20">
|
|
254
230
|
<div class="col span-6">
|
|
255
231
|
<LabeledInput
|
package/edit/auth/ldap/index.vue
CHANGED
package/edit/auth/oidc.vue
CHANGED
|
@@ -12,6 +12,7 @@ import ArrayList from '@shell/components/form/ArrayList';
|
|
|
12
12
|
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
13
13
|
import { RadioGroup } from '@components/Form/Radio';
|
|
14
14
|
import { Checkbox } from '@components/Form/Checkbox';
|
|
15
|
+
import { BASE_SCOPES } from '@shell/store/auth';
|
|
15
16
|
|
|
16
17
|
export default {
|
|
17
18
|
components: {
|
|
@@ -50,6 +51,7 @@ export default {
|
|
|
50
51
|
tokenEndpoint: null,
|
|
51
52
|
userInfoEndpoint: null,
|
|
52
53
|
},
|
|
54
|
+
// TODO #13457: this is duplicated due wrong format
|
|
53
55
|
oidcScope: []
|
|
54
56
|
};
|
|
55
57
|
},
|
|
@@ -76,9 +78,10 @@ export default {
|
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
const { clientId, clientSecret } = this.model;
|
|
79
|
-
const
|
|
81
|
+
const isMissingAuthEndpoint = (this.requiresAuthEndpoint && !this.model.authEndpoint);
|
|
82
|
+
const isMissingScopes = !this.requiredScopes.every((scope) => this.oidcScope.includes(scope));
|
|
80
83
|
|
|
81
|
-
if (
|
|
84
|
+
if (isMissingAuthEndpoint || isMissingScopes) {
|
|
82
85
|
return false;
|
|
83
86
|
}
|
|
84
87
|
|
|
@@ -91,6 +94,19 @@ export default {
|
|
|
91
94
|
|
|
92
95
|
return !!(clientId && clientSecret && rancherUrl && issuer);
|
|
93
96
|
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
requiresAuthEndpoint() {
|
|
100
|
+
return ['genericoidc', 'keycloakoidc'].includes(this.model.id);
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* TODO #13457: Refactor scopes to be an array of terms
|
|
105
|
+
* Return valid scopes
|
|
106
|
+
* The scopes for given auth provider (model.id) have format of ['scope1 scope2 scope3']
|
|
107
|
+
*/
|
|
108
|
+
requiredScopes() {
|
|
109
|
+
return this.model.id ? (BASE_SCOPES[this.model.id] || []) ? (BASE_SCOPES[this.model.id] || [])[0].split(' ') : [] : [];
|
|
94
110
|
}
|
|
95
111
|
},
|
|
96
112
|
|
|
@@ -104,6 +120,7 @@ export default {
|
|
|
104
120
|
},
|
|
105
121
|
|
|
106
122
|
'model.enabled'(neu) {
|
|
123
|
+
// TODO #13457: Refactor scopes to be an array of terms
|
|
107
124
|
// Cover case where oidc gets disabled and we return to the edit screen with a reset model
|
|
108
125
|
if (!neu) {
|
|
109
126
|
this.oidcUrls = {
|
|
@@ -114,8 +131,10 @@ export default {
|
|
|
114
131
|
userInfoEndpoint: null,
|
|
115
132
|
};
|
|
116
133
|
this.customEndpoint.value = false;
|
|
134
|
+
// TODO #13457: Refactor scopes to be an array of terms
|
|
117
135
|
this.oidcScope = this.model?.scope?.split(' ');
|
|
118
136
|
} else {
|
|
137
|
+
// TODO #13457: Refactor scopes to be an array of terms
|
|
119
138
|
this.oidcScope = this.model?.scope?.split(' ');
|
|
120
139
|
}
|
|
121
140
|
},
|
|
@@ -130,13 +149,19 @@ export default {
|
|
|
130
149
|
|
|
131
150
|
methods: {
|
|
132
151
|
updateEndpoints() {
|
|
152
|
+
const isKeycloak = this.model.id === 'keycloakoidc';
|
|
153
|
+
|
|
133
154
|
if (!this.oidcUrls.url) {
|
|
155
|
+
this.model.issuer = '';
|
|
156
|
+
if (isKeycloak) {
|
|
157
|
+
this.model.authEndpoint = '';
|
|
158
|
+
}
|
|
159
|
+
|
|
134
160
|
return;
|
|
135
161
|
}
|
|
136
|
-
const isKeycloak = this.model.id === 'keycloakoidc';
|
|
137
162
|
|
|
138
163
|
const url = this.oidcUrls.url.replaceAll(' ', '');
|
|
139
|
-
const realmsPath =
|
|
164
|
+
const realmsPath = 'realms';
|
|
140
165
|
|
|
141
166
|
this.model.issuer = `${ url }/${ realmsPath }/${ this.oidcUrls.realm || '' }`;
|
|
142
167
|
|
|
@@ -184,7 +209,7 @@ export default {
|
|
|
184
209
|
</template>
|
|
185
210
|
</AuthBanner>
|
|
186
211
|
|
|
187
|
-
<hr>
|
|
212
|
+
<hr role="none">
|
|
188
213
|
|
|
189
214
|
<AllowedPrincipals
|
|
190
215
|
:provider="NAME"
|
|
@@ -201,6 +226,7 @@ export default {
|
|
|
201
226
|
|
|
202
227
|
<h3>{{ t(`authConfig.oidc.${NAME}`) }}</h3>
|
|
203
228
|
|
|
229
|
+
<!-- Auth credentials -->
|
|
204
230
|
<div class="row mb-20">
|
|
205
231
|
<div class="col span-6">
|
|
206
232
|
<LabeledInput
|
|
@@ -222,6 +248,7 @@ export default {
|
|
|
222
248
|
</div>
|
|
223
249
|
</div>
|
|
224
250
|
|
|
251
|
+
<!-- Key/Certificate -->
|
|
225
252
|
<div class="row mb-20">
|
|
226
253
|
<div class="col span-6">
|
|
227
254
|
<LabeledInput
|
|
@@ -255,6 +282,7 @@ export default {
|
|
|
255
282
|
</div>
|
|
256
283
|
</div>
|
|
257
284
|
|
|
285
|
+
<!-- Allow group search -->
|
|
258
286
|
<div class="row mb-20">
|
|
259
287
|
<div class="col span-6">
|
|
260
288
|
<Checkbox
|
|
@@ -267,6 +295,7 @@ export default {
|
|
|
267
295
|
</div>
|
|
268
296
|
</div>
|
|
269
297
|
|
|
298
|
+
<!-- Scopes -->
|
|
270
299
|
<div class="row mb-20">
|
|
271
300
|
<div class="col span-6">
|
|
272
301
|
<ArrayList
|
|
@@ -280,6 +309,7 @@ export default {
|
|
|
280
309
|
</div>
|
|
281
310
|
</div>
|
|
282
311
|
|
|
312
|
+
<!-- Generated vs Specific Endpoints -->
|
|
283
313
|
<div class="row mb-20">
|
|
284
314
|
<div class="col span-6">
|
|
285
315
|
<RadioGroup
|
|
@@ -297,6 +327,7 @@ export default {
|
|
|
297
327
|
</div>
|
|
298
328
|
</div>
|
|
299
329
|
|
|
330
|
+
<!-- Generated endpoints -->
|
|
300
331
|
<div class="row mb-20">
|
|
301
332
|
<div class="col span-6">
|
|
302
333
|
<LabeledInput
|
|
@@ -320,6 +351,7 @@ export default {
|
|
|
320
351
|
</div>
|
|
321
352
|
</div>
|
|
322
353
|
|
|
354
|
+
<!-- Specific Endpoints -->
|
|
323
355
|
<div class="row mb-20">
|
|
324
356
|
<div class="col span-6">
|
|
325
357
|
<LabeledInput
|
|
@@ -350,12 +382,13 @@ export default {
|
|
|
350
382
|
:label="t(`authConfig.oidc.authEndpoint`)"
|
|
351
383
|
:mode="mode"
|
|
352
384
|
:disabled="!customEndpoint.value"
|
|
353
|
-
:required="
|
|
385
|
+
:required="requiresAuthEndpoint"
|
|
354
386
|
data-testid="oidc-auth-endpoint"
|
|
355
387
|
/>
|
|
356
388
|
</div>
|
|
357
389
|
</div>
|
|
358
390
|
|
|
391
|
+
<!-- Advanced section -->
|
|
359
392
|
<AdvancedSection :mode="mode">
|
|
360
393
|
<div class="row mb-20">
|
|
361
394
|
<div class="col span-6">
|
package/edit/auth/saml.vue
CHANGED
|
@@ -65,14 +65,17 @@ export default {
|
|
|
65
65
|
</div>
|
|
66
66
|
<div class="row">
|
|
67
67
|
<div class="col span-12">
|
|
68
|
-
<h3>Metric Selector</h3>
|
|
69
68
|
<MatchExpressions
|
|
70
69
|
:mode="mode"
|
|
71
70
|
:value="matchExpressions"
|
|
72
71
|
:label="t('hpa.metricIdentifier.selector.label')"
|
|
73
72
|
:show-remove="false"
|
|
74
73
|
@input="matchChanged($event)"
|
|
75
|
-
|
|
74
|
+
>
|
|
75
|
+
<template #header>
|
|
76
|
+
<h3>{{ t('hpa.metricIdentifier.selector.header') }}</h3>
|
|
77
|
+
</template>
|
|
78
|
+
</MatchExpressions>
|
|
76
79
|
</div>
|
|
77
80
|
</div>
|
|
78
81
|
</div>
|