@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.6
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/assets/data/aws-regions.json +1 -0
- package/assets/images/key.svg +17 -0
- package/assets/styles/base/_spacing.scss +2 -2
- package/assets/styles/global/_form.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/themes/_dark.scss +3 -0
- package/assets/styles/themes/_light.scss +3 -0
- package/assets/styles/vendor/vue-select.scss +1 -1
- package/assets/translations/en-us.yaml +404 -64
- package/assets/translations/zh-hans.yaml +3 -4
- package/cloud-credential/gcp.vue +9 -1
- package/components/AppModal.vue +2 -0
- package/components/CodeMirror.vue +1 -1
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +1 -2
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +116 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +5 -0
- package/components/KeyValueView.vue +1 -1
- package/components/LocaleSelector.vue +9 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +6 -1
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
- package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/composables.ts +60 -11
- package/components/Resource/Detail/Metadata/index.vue +12 -5
- package/components/Resource/Detail/Page.vue +15 -0
- package/components/Resource/Detail/ResourceRow.vue +37 -18
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/TitleBar/Title.vue +2 -1
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/composables.ts +44 -0
- package/components/Resource/Detail/TitleBar/index.vue +83 -11
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/__tests__/index.test.ts +26 -5
- package/components/ResourceDetail/index.vue +30 -16
- package/components/ResourceDetail/legacy.vue +18 -1
- package/components/ResourceList/Masthead.vue +6 -0
- package/components/ResourceYaml.vue +14 -1
- package/components/SlideInPanelManager.vue +46 -7
- package/components/StateDot/index.vue +28 -0
- package/components/Tabbed/index.vue +11 -15
- package/components/Wizard.vue +4 -2
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetApplications.vue +0 -7
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +8 -0
- package/components/fleet/FleetRepos.vue +1 -6
- package/components/fleet/FleetResources.vue +4 -5
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/ResourceCard.vue +1 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
- package/components/fleet/dashboard/ResourceDetails.vue +8 -10
- package/components/fleet/dashboard/ResourcePanel.vue +15 -8
- package/components/form/ArrayList.vue +13 -2
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +81 -43
- package/components/form/LabeledSelect.vue +56 -16
- package/components/form/Labels.vue +90 -17
- package/components/form/MatchExpressions.vue +46 -5
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/ResourceSelector.vue +1 -0
- package/components/form/ResourceTabs/index.vue +5 -0
- package/components/form/SecretSelector.vue +9 -2
- package/components/form/Select.vue +57 -19
- package/components/form/SimpleSecretSelector.vue +9 -2
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +8 -0
- package/components/form/ValueFromResource.vue +1 -1
- package/components/form/__tests__/LabeledSelect.test.ts +8 -4
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Select.test.ts +5 -2
- package/components/formatter/FleetApplicationSource.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/google/AccountAccess.vue +211 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +70 -47
- package/components/nav/Header.vue +5 -1
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/Notification.vue +510 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/composables/drawer.ts +26 -0
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +6 -0
- package/config/product/auth.js +16 -1
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +5 -1
- package/config/product/fleet.js +7 -0
- package/config/product/settings.js +22 -11
- package/config/query-params.js +3 -0
- package/config/roles.ts +1 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/routes.js +27 -31
- package/config/settings.ts +21 -3
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +2 -2
- package/config/types.js +15 -6
- package/core/plugin.ts +32 -7
- package/core/types.ts +18 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/node.vue +2 -2
- package/detail/pod.vue +2 -2
- package/detail/service.vue +10 -1
- package/detail/workload/index.vue +8 -2
- package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/ImportDialog.vue +8 -8
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +4 -1
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +44 -222
- package/edit/fleet.cattle.io.helmop.vue +44 -269
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -0
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
- package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/index.vue +1 -0
- package/edit/service.vue +4 -1
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +5 -0
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/node.vue +2 -0
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/resource-fetch-api-pagination.js +16 -0
- package/mixins/vue-select-overrides.js +1 -0
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +8 -79
- package/models/fleet.cattle.io.cluster.js +11 -0
- package/models/fleet.cattle.io.gitrepo.js +2 -2
- package/models/fleet.cattle.io.helmop.js +9 -39
- package/models/management.cattle.io.fleetworkspace.js +2 -1
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/provisioning.cattle.io.cluster.js +5 -5
- package/models/service.js +4 -0
- package/models/workload.js +5 -0
- package/package.json +1 -1
- package/pages/about.vue +4 -58
- package/pages/auth/login.vue +1 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
- package/pages/c/_cluster/apps/charts/index.vue +285 -81
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/index.vue +3 -3
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/application/create.vue +3 -2
- package/pages/c/_cluster/fleet/index.vue +94 -56
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/explorer/resource/detail/configmap.vue +30 -7
- package/pages/explorer/resource/detail/secret.vue +50 -0
- package/pages/home.vue +9 -55
- package/pages/support/index.vue +4 -6
- package/plugins/dashboard-store/actions.js +19 -5
- package/plugins/dashboard-store/getters.js +4 -0
- package/plugins/dashboard-store/resource-class.js +16 -2
- package/plugins/steve/steve-pagination-utils.ts +26 -18
- package/plugins/steve/subscribe.js +6 -1
- package/rancher-components/Banner/Banner.vue +13 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
- package/store/auth.js +2 -0
- package/store/catalog.js +23 -1
- package/store/growl.js +97 -8
- package/store/index.js +6 -0
- package/store/notifications.ts +426 -0
- package/store/prefs.js +0 -1
- package/store/type-map.js +19 -16
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +24 -0
- package/types/notifications/index.ts +74 -0
- package/types/shell/index.d.ts +46 -32
- package/types/store/dashboard-store.types.ts +16 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +9 -2
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/fleet.ts +54 -65
- package/utils/object.js +36 -0
- package/utils/pagination-utils.ts +1 -1
- package/utils/release-notes.ts +48 -0
- package/utils/selector-typed.ts +7 -2
- package/utils/string.js +24 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +22 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/components/Resource/Detail/TitleBar/composable.ts +0 -31
- package/config/product/legacy.js +0 -62
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
- /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
|
@@ -1,12 +1,58 @@
|
|
|
1
1
|
import { routeRequiresAuthentication } from '@shell/utils/router';
|
|
2
2
|
import { isLoggedIn, notLoggedIn, noAuth, findMe } from '@shell/utils/auth';
|
|
3
|
+
import { RANCHER_AS_OIDC_QUERY_PARAMS } from '@shell/config/query-params';
|
|
4
|
+
|
|
5
|
+
const R_OIDC_PROV_PARAMS = 'rancher-as-oidc-prov-params';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Detect if we've come from an OIDC client
|
|
9
|
+
*/
|
|
10
|
+
function isRancherOidcProviderLogin(queryParams) {
|
|
11
|
+
return queryParams && Object.keys(queryParams).length && RANCHER_AS_OIDC_QUERY_PARAMS.every((item) => Object.keys(queryParams).includes(item));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* If we've logged in on a request from an OIDC client return to it
|
|
16
|
+
*/
|
|
17
|
+
function handleOidcRedirectToCallbackUrl() {
|
|
18
|
+
const rancherAsOidcProvider = sessionStorage.getItem(R_OIDC_PROV_PARAMS);
|
|
19
|
+
|
|
20
|
+
if (rancherAsOidcProvider) {
|
|
21
|
+
window.location.href = `${ window.location.origin }/oidc/authorize${ rancherAsOidcProvider }&code_challenge_method=S256`;
|
|
22
|
+
sessionStorage.removeItem(R_OIDC_PROV_PARAMS);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
3
25
|
|
|
4
26
|
export function install(router, context) {
|
|
5
27
|
router.beforeEach(async(to, from, next) => await authenticate(to, from, next, context));
|
|
6
28
|
}
|
|
7
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Generate an object that includes both the v3User and the me data
|
|
32
|
+
* @param {*} v3User V3 user information
|
|
33
|
+
* @param {*} me Me user data
|
|
34
|
+
* @returns User info to be passed to `isLoggedIn`
|
|
35
|
+
*/
|
|
36
|
+
function getUserObject(v3User, me) {
|
|
37
|
+
return {
|
|
38
|
+
id: me.id,
|
|
39
|
+
me,
|
|
40
|
+
v3User,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
8
44
|
export async function authenticate(to, from, next, { store }) {
|
|
9
45
|
if (!routeRequiresAuthentication(to)) {
|
|
46
|
+
if (to.name === 'auth-login') {
|
|
47
|
+
if (isRancherOidcProviderLogin(to.query)) {
|
|
48
|
+
// If redirected here from an oidc client persist the values we need to return to it once rancher auth is complete...
|
|
49
|
+
sessionStorage.setItem(R_OIDC_PROV_PARAMS, window.location.search);
|
|
50
|
+
} else if (sessionStorage.getItem(R_OIDC_PROV_PARAMS)) {
|
|
51
|
+
// ... otherwise clear it (to avoid a redirect to it on successful log in)
|
|
52
|
+
sessionStorage.removeItem(R_OIDC_PROV_PARAMS);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
10
56
|
return next();
|
|
11
57
|
}
|
|
12
58
|
|
|
@@ -25,10 +71,12 @@ export async function authenticate(to, from, next, { store }) {
|
|
|
25
71
|
|
|
26
72
|
if ( fromHeader === 'none' ) {
|
|
27
73
|
noAuth(store);
|
|
74
|
+
handleOidcRedirectToCallbackUrl();
|
|
28
75
|
} else if ( fromHeader === 'true' ) {
|
|
29
76
|
const me = await findMe(store);
|
|
30
77
|
|
|
31
|
-
isLoggedIn(store, me);
|
|
78
|
+
await isLoggedIn(store, getUserObject(v3User, me));
|
|
79
|
+
handleOidcRedirectToCallbackUrl();
|
|
32
80
|
} else if ( fromHeader === 'false' ) {
|
|
33
81
|
notLoggedIn(store, next, to);
|
|
34
82
|
|
|
@@ -38,7 +86,8 @@ export async function authenticate(to, from, next, { store }) {
|
|
|
38
86
|
try {
|
|
39
87
|
const me = await findMe(store);
|
|
40
88
|
|
|
41
|
-
isLoggedIn(store, me);
|
|
89
|
+
await isLoggedIn(store, getUserObject(v3User, me));
|
|
90
|
+
handleOidcRedirectToCallbackUrl();
|
|
42
91
|
} catch (e) {
|
|
43
92
|
const status = e?._status;
|
|
44
93
|
|
package/config/router/routes.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { NAME as APPS } from '@shell/config/product/apps';
|
|
2
2
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
3
3
|
import { NAME as MANAGER } from '@shell/config/product/manager';
|
|
4
|
-
import { CAPI, MANAGEMENT, BACKUP_RESTORE,
|
|
4
|
+
import { CAPI, MANAGEMENT, BACKUP_RESTORE, COMPLIANCE } from '@shell/config/types';
|
|
5
5
|
import { NAME as AUTH } from '@shell/config/product/auth';
|
|
6
6
|
|
|
7
7
|
// All these imports are related to the install-redirect.js navigation guard.
|
|
8
8
|
import { installRedirectRouteMeta } from '@shell/config/router/navigation-guards/install-redirect';
|
|
9
9
|
import { NAME as BACKUP_NAME, CHART_NAME as BACKUP_CHART_NAME } from '@shell/config/product/backup';
|
|
10
|
-
import { NAME as
|
|
10
|
+
import { NAME as COMPLIANCE_NAME, CHART_NAME as COMPLIANCE_CHART_NAME } from '@shell/config/product/compliance';
|
|
11
11
|
import { NAME as GATEKEEPER_NAME, CHART_NAME as GATEKEEPER_CHART_NAME } from '@shell/config/product/gatekeeper';
|
|
12
12
|
import { NAME as ISTIO_NAME, CHART_NAME as ISTIO_CHART_NAME } from '@shell/config/product/istio';
|
|
13
13
|
import { NAME as LOGGING_NAME, CHART_NAME as LOGGING_CHART_NAME } from '@shell/config/product/logging';
|
|
@@ -207,17 +207,25 @@ export default [
|
|
|
207
207
|
name: 'c-cluster-backup',
|
|
208
208
|
meta: { ...installRedirectRouteMeta(BACKUP_NAME, BACKUP_CHART_NAME, BACKUP_RESTORE.BACKUP) }
|
|
209
209
|
}, {
|
|
210
|
-
path: '/c/:cluster/
|
|
211
|
-
name: 'c-cluster-
|
|
212
|
-
meta: { ...installRedirectRouteMeta(
|
|
210
|
+
path: '/c/:cluster/compliance',
|
|
211
|
+
name: 'c-cluster-compliance',
|
|
212
|
+
meta: { ...installRedirectRouteMeta(COMPLIANCE_NAME, COMPLIANCE_CHART_NAME, COMPLIANCE.CLUSTER_SCAN) }
|
|
213
213
|
}, {
|
|
214
214
|
path: '/c/:cluster/fleet',
|
|
215
215
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/index.vue')),
|
|
216
216
|
name: 'c-cluster-fleet',
|
|
217
|
+
meta: {
|
|
218
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
219
|
+
doneOverride: 'c-cluster-fleet',
|
|
220
|
+
},
|
|
217
221
|
}, {
|
|
218
222
|
path: '/c/:cluster/fleet/application',
|
|
219
223
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/index.vue')),
|
|
220
224
|
name: 'c-cluster-fleet-application',
|
|
225
|
+
meta: {
|
|
226
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
227
|
+
doneOverride: 'c-cluster-fleet-application',
|
|
228
|
+
},
|
|
221
229
|
}, {
|
|
222
230
|
path: '/c/:cluster/fleet/application/create',
|
|
223
231
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/create.vue')),
|
|
@@ -225,11 +233,19 @@ export default [
|
|
|
225
233
|
}, {
|
|
226
234
|
path: '/c/:cluster/fleet/application/:resource/create',
|
|
227
235
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/create.vue')),
|
|
228
|
-
name: 'c-cluster-fleet-application-resource-create'
|
|
236
|
+
name: 'c-cluster-fleet-application-resource-create',
|
|
237
|
+
meta: {
|
|
238
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
239
|
+
doneOverride: 'c-cluster-fleet-application',
|
|
240
|
+
},
|
|
229
241
|
}, {
|
|
230
242
|
path: '/c/:cluster/fleet/application/:resource/:namespace/:id?',
|
|
231
243
|
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/_id.vue')),
|
|
232
|
-
name: 'c-cluster-fleet-application-resource-namespace-id'
|
|
244
|
+
name: 'c-cluster-fleet-application-resource-namespace-id',
|
|
245
|
+
meta: {
|
|
246
|
+
detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
|
|
247
|
+
doneOverride: 'c-cluster-fleet-application'
|
|
248
|
+
},
|
|
233
249
|
}, {
|
|
234
250
|
path: '/c/:cluster/gatekeeper',
|
|
235
251
|
component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/index.vue')),
|
|
@@ -240,18 +256,6 @@ export default [
|
|
|
240
256
|
component: () => interopDefault(import('@shell/pages/c/_cluster/istio/index.vue')),
|
|
241
257
|
name: 'c-cluster-istio',
|
|
242
258
|
meta: { ...installRedirectRouteMeta(ISTIO_NAME, ISTIO_CHART_NAME) }
|
|
243
|
-
}, {
|
|
244
|
-
path: '/c/:cluster/legacy',
|
|
245
|
-
redirect(to) {
|
|
246
|
-
return {
|
|
247
|
-
name: 'c-cluster-legacy-project',
|
|
248
|
-
params: {
|
|
249
|
-
...(to?.params || {}),
|
|
250
|
-
product: EXPLORER,
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
},
|
|
254
|
-
name: 'c-cluster-legacy'
|
|
255
259
|
}, {
|
|
256
260
|
path: '/c/:cluster/logging',
|
|
257
261
|
component: () => interopDefault(import('@shell/pages/c/_cluster/logging/index.vue')),
|
|
@@ -331,10 +335,6 @@ export default [
|
|
|
331
335
|
path: '/c/:cluster/gatekeeper/constraints',
|
|
332
336
|
component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/constraints/index.vue')),
|
|
333
337
|
name: 'c-cluster-gatekeeper-constraints'
|
|
334
|
-
}, {
|
|
335
|
-
path: '/c/:cluster/legacy/project',
|
|
336
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/project/index.vue')),
|
|
337
|
-
name: 'c-cluster-legacy-project'
|
|
338
338
|
}, {
|
|
339
339
|
path: '/c/:cluster/manager/cloudCredential',
|
|
340
340
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/index.vue')),
|
|
@@ -379,6 +379,10 @@ export default [
|
|
|
379
379
|
path: '/c/:cluster/settings/performance',
|
|
380
380
|
component: () => interopDefault(import('@shell/pages/c/_cluster/settings/performance.vue')),
|
|
381
381
|
name: 'c-cluster-settings-performance'
|
|
382
|
+
}, {
|
|
383
|
+
path: '/c/:cluster/settings/fleet',
|
|
384
|
+
component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/settings/index.vue')),
|
|
385
|
+
name: 'c-cluster-settings-fleet'
|
|
382
386
|
}, {
|
|
383
387
|
path: '/c/:cluster/auth/group.principal/assign-edit',
|
|
384
388
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/group.principal/assign-edit.vue')),
|
|
@@ -416,14 +420,6 @@ export default [
|
|
|
416
420
|
path: '/c/:cluster/auth/config/:id',
|
|
417
421
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/config/_id.vue')),
|
|
418
422
|
name: 'c-cluster-auth-config-id'
|
|
419
|
-
}, {
|
|
420
|
-
path: '/c/:cluster/legacy/pages/:page?',
|
|
421
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/pages/_page.vue')),
|
|
422
|
-
name: 'c-cluster-legacy-pages-page'
|
|
423
|
-
}, {
|
|
424
|
-
path: '/c/:cluster/legacy/project/:page',
|
|
425
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/legacy/project/_page.vue')),
|
|
426
|
-
name: 'c-cluster-legacy-project-page'
|
|
427
423
|
}, {
|
|
428
424
|
path: '/c/:cluster/manager/cloudCredential/:id',
|
|
429
425
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/_id.vue')),
|
package/config/settings.ts
CHANGED
|
@@ -45,11 +45,11 @@ export const SETTING = {
|
|
|
45
45
|
AUTH_TOKEN_MAX_TTL_MINUTES: 'auth-token-max-ttl-minutes',
|
|
46
46
|
KUBECONFIG_GENERATE_TOKEN: 'kubeconfig-generate-token',
|
|
47
47
|
KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',
|
|
48
|
-
ENGINE_URL: 'engine-install-url',
|
|
49
48
|
ENGINE_ISO_URL: 'engine-iso-url',
|
|
50
49
|
FIRST_LOGIN: 'first-login',
|
|
51
50
|
INGRESS_IP_DOMAIN: 'ingress-ip-domain',
|
|
52
51
|
SERVER_URL: 'server-url',
|
|
52
|
+
RKE_METADATA_CONFIG: 'rke-metadata-config',
|
|
53
53
|
EULA_AGREED: 'eula-agreed',
|
|
54
54
|
AUTH_USER_INFO_MAX_AGE_SECONDS: 'auth-user-info-max-age-seconds',
|
|
55
55
|
AUTH_USER_SESSION_TTL_MINUTES: 'auth-user-session-ttl-minutes',
|
|
@@ -106,6 +106,7 @@ export const SETTING = {
|
|
|
106
106
|
DISABLE_INACTIVE_USER_AFTER: 'disable-inactive-user-after',
|
|
107
107
|
DELETE_INACTIVE_USER_AFTER: 'delete-inactive-user-after',
|
|
108
108
|
K3S_UPGRADER_UNINSTALL_CONCURRENCY: 'k3s-based-upgrader-uninstall-concurrency',
|
|
109
|
+
SYSTEM_AGENT_UPGRADER_INSTALL_CONCURRENCY: 'system-agent-upgrader-install-concurrency',
|
|
109
110
|
IMPORTED_CLUSTER_VERSION_MANAGEMENT: 'imported-cluster-version-management',
|
|
110
111
|
CLUSTER_AGENT_DEFAULT_PRIORITY_CLASS: 'cluster-agent-default-priority-class',
|
|
111
112
|
CLUSTER_AGENT_DEFAULT_POD_DISTRIBUTION_BUDGET: 'cluster-agent-default-pod-disruption-budget'
|
|
@@ -114,7 +115,6 @@ export const SETTING = {
|
|
|
114
115
|
// These are the settings that are allowed to be edited via the UI
|
|
115
116
|
export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
116
117
|
[SETTING.CA_CERTS]: { kind: 'multiline', readOnly: true },
|
|
117
|
-
[SETTING.ENGINE_URL]: {},
|
|
118
118
|
[SETTING.ENGINE_ISO_URL]: {},
|
|
119
119
|
[SETTING.PASSWORD_MIN_LENGTH]: {
|
|
120
120
|
kind: 'integer',
|
|
@@ -146,6 +146,7 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
146
146
|
[SETTING.KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES]: { kind: 'integer' },
|
|
147
147
|
[SETTING.AUTH_USER_INFO_RESYNC_CRON]: {},
|
|
148
148
|
[SETTING.SERVER_URL]: { kind: 'url', canReset: true },
|
|
149
|
+
[SETTING.RKE_METADATA_CONFIG]: { kind: 'json' },
|
|
149
150
|
[SETTING.SYSTEM_DEFAULT_REGISTRY]: {},
|
|
150
151
|
[SETTING.UI_INDEX]: {},
|
|
151
152
|
[SETTING.UI_DASHBOARD_INDEX]: {},
|
|
@@ -160,6 +161,10 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
160
161
|
options: ['strict', 'system-store'],
|
|
161
162
|
warning: 'agent-tls-mode'
|
|
162
163
|
},
|
|
164
|
+
[SETTING.SYSTEM_AGENT_UPGRADER_INSTALL_CONCURRENCY]: {
|
|
165
|
+
kind: 'integer',
|
|
166
|
+
ruleSet: [{ name: 'minValue', factoryArg: 1 }]
|
|
167
|
+
},
|
|
163
168
|
[SETTING.K3S_UPGRADER_UNINSTALL_CONCURRENCY]: {
|
|
164
169
|
kind: 'integer',
|
|
165
170
|
ruleSet: [{ name: 'minValue', factoryArg: 1 }]
|
|
@@ -170,7 +175,20 @@ export const ALLOWED_SETTINGS: GlobalSetting = {
|
|
|
170
175
|
|
|
171
176
|
};
|
|
172
177
|
|
|
173
|
-
|
|
178
|
+
/**
|
|
179
|
+
* Show settings in a special cluster provisioning section
|
|
180
|
+
*
|
|
181
|
+
* These should probably be an option in the maps above...
|
|
182
|
+
*/
|
|
183
|
+
export const PROVISIONING_SETTINGS = [
|
|
184
|
+
SETTING.ENGINE_ISO_URL,
|
|
185
|
+
SETTING.RKE_METADATA_CONFIG,
|
|
186
|
+
SETTING.K3S_UPGRADER_UNINSTALL_CONCURRENCY,
|
|
187
|
+
SETTING.IMPORTED_CLUSTER_VERSION_MANAGEMENT,
|
|
188
|
+
SETTING.CLUSTER_AGENT_DEFAULT_PRIORITY_CLASS,
|
|
189
|
+
SETTING.CLUSTER_AGENT_DEFAULT_POD_DISTRIBUTION_BUDGET
|
|
190
|
+
];
|
|
191
|
+
|
|
174
192
|
/**
|
|
175
193
|
* Settings on how to handle warnings returning in api responses, specifically which to show as growls
|
|
176
194
|
*/
|
package/config/store.js
CHANGED
|
@@ -38,6 +38,7 @@ let store = {};
|
|
|
38
38
|
resolveStoreModules(require('../store/wm.js'), 'wm.js');
|
|
39
39
|
resolveStoreModules(require('../store/customisation.js'), 'customisation.js');
|
|
40
40
|
resolveStoreModules(require('../store/cru-resource.ts'), 'cru-resource.ts');
|
|
41
|
+
resolveStoreModules(require('../store/notifications.ts'), 'notifications.ts');
|
|
41
42
|
|
|
42
43
|
// If the environment supports hot reloading...
|
|
43
44
|
|
|
@@ -67,6 +68,7 @@ let store = {};
|
|
|
67
68
|
'../store/wm.js',
|
|
68
69
|
'../store/customisation.js',
|
|
69
70
|
'../store/cru-resource.ts',
|
|
71
|
+
'../store/notifications.ts',
|
|
70
72
|
], () => {
|
|
71
73
|
// Update `root.modules` with the latest definitions.
|
|
72
74
|
updateModules();
|
package/config/table-headers.js
CHANGED
|
@@ -784,7 +784,7 @@ export const FLEET_APPLICATION_TARGET = {
|
|
|
784
784
|
name: 'applicationTarget',
|
|
785
785
|
labelKey: 'fleet.tableHeaders.applicationTarget',
|
|
786
786
|
value: 'targetInfo.modeDisplay',
|
|
787
|
-
sort: ['targetInfo.modeDisplay'
|
|
787
|
+
sort: ['targetInfo.modeDisplay'],
|
|
788
788
|
};
|
|
789
789
|
|
|
790
790
|
export const FLEET_APPLICATION_CLUSTERS_READY = {
|
|
@@ -1102,7 +1102,7 @@ export const FLEET_REPO_TARGET = {
|
|
|
1102
1102
|
name: 'target',
|
|
1103
1103
|
labelKey: 'tableHeaders.target',
|
|
1104
1104
|
value: 'targetInfo.modeDisplay',
|
|
1105
|
-
sort: ['targetInfo.modeDisplay'
|
|
1105
|
+
sort: ['targetInfo.modeDisplay'],
|
|
1106
1106
|
};
|
|
1107
1107
|
|
|
1108
1108
|
export const FLEET_REPO = {
|
package/config/types.js
CHANGED
|
@@ -134,6 +134,14 @@ export const CATALOG = {
|
|
|
134
134
|
REPO: 'catalog.cattle.io.repo',
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
+
// Charts/Apps
|
|
138
|
+
export const CATALOG_SORT_OPTIONS = {
|
|
139
|
+
RECOMMENDED: 'recommended',
|
|
140
|
+
LAST_UPDATED_DESC: 'lastupdatedDescending',
|
|
141
|
+
ALPHABETICAL_ASC: 'alphaAscending',
|
|
142
|
+
ALPHABETICAL_DESC: 'alphaDescending'
|
|
143
|
+
};
|
|
144
|
+
|
|
137
145
|
// UI Plugin type
|
|
138
146
|
export const UI_PLUGIN = 'catalog.cattle.io.uiplugin';
|
|
139
147
|
|
|
@@ -211,7 +219,8 @@ export const MANAGEMENT = {
|
|
|
211
219
|
GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
|
|
212
220
|
RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
|
|
213
221
|
RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
|
|
214
|
-
CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig'
|
|
222
|
+
CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig',
|
|
223
|
+
OIDC_CLIENT: 'management.cattle.io.oidcclient'
|
|
215
224
|
};
|
|
216
225
|
|
|
217
226
|
export const CAPI = {
|
|
@@ -294,11 +303,11 @@ export const BACKUP_RESTORE = {
|
|
|
294
303
|
RESTORE: 'resources.cattle.io.restore',
|
|
295
304
|
};
|
|
296
305
|
|
|
297
|
-
export const
|
|
298
|
-
CLUSTER_SCAN: '
|
|
299
|
-
CLUSTER_SCAN_PROFILE: '
|
|
300
|
-
BENCHMARK: '
|
|
301
|
-
REPORT: '
|
|
306
|
+
export const COMPLIANCE = {
|
|
307
|
+
CLUSTER_SCAN: 'compliance.cattle.io.clusterscan',
|
|
308
|
+
CLUSTER_SCAN_PROFILE: 'compliance.cattle.io.clusterscanprofile',
|
|
309
|
+
BENCHMARK: 'compliance.cattle.io.clusterscanbenchmark',
|
|
310
|
+
REPORT: 'compliance.cattle.io.clusterscanreport'
|
|
302
311
|
};
|
|
303
312
|
|
|
304
313
|
export const UI = { NAV_LINK: 'ui.cattle.io.navlink' };
|
package/core/plugin.ts
CHANGED
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
ExtensionPoint,
|
|
15
15
|
TabLocation,
|
|
16
16
|
ModelExtensionConstructor,
|
|
17
|
-
PluginRouteRecordRaw, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig,
|
|
17
|
+
PluginRouteRecordRaw, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig,
|
|
18
|
+
NavHooks, OnNavToPackage, OnNavAwayFromPackage, OnLogIn, OnLogOut,
|
|
18
19
|
ExtensionEnvironment
|
|
19
20
|
} from './types';
|
|
20
21
|
import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
|
|
@@ -43,6 +44,7 @@ export class Plugin implements IPlugin {
|
|
|
43
44
|
public onEnter: OnNavToPackage = () => Promise.resolve();
|
|
44
45
|
public onLeave: OnNavAwayFromPackage = () => Promise.resolve();
|
|
45
46
|
public _onLogOut: OnLogOut = () => Promise.resolve();
|
|
47
|
+
public onLogIn: OnLogIn = () => Promise.resolve();
|
|
46
48
|
|
|
47
49
|
public uiConfig: { [key: string]: any } = {};
|
|
48
50
|
|
|
@@ -314,13 +316,36 @@ export class Plugin implements IPlugin {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
public addNavHooks(
|
|
317
|
-
onEnter
|
|
318
|
-
onLeave
|
|
319
|
-
onLogOut
|
|
319
|
+
onEnter?: OnNavToPackage | NavHooks,
|
|
320
|
+
onLeave?: OnNavAwayFromPackage,
|
|
321
|
+
onLogOut?: OnLogOut,
|
|
322
|
+
onLogIn?: OnLogIn,
|
|
320
323
|
): void {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
+
if (typeof onEnter === 'object') {
|
|
325
|
+
const hooks = onEnter as NavHooks;
|
|
326
|
+
|
|
327
|
+
if (hooks.onEnter) {
|
|
328
|
+
this.onEnter = hooks.onEnter;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (hooks.onLeave) {
|
|
332
|
+
this.onLeave = hooks.onLeave;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (hooks.onLogout) {
|
|
336
|
+
this._onLogOut = hooks.onLogout;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (hooks.onLogin) {
|
|
340
|
+
this.onLogIn = hooks.onLogin;
|
|
341
|
+
}
|
|
342
|
+
} else {
|
|
343
|
+
// No first arg, or first arg is not an object, so this is the legacy invocation
|
|
344
|
+
this.onEnter = (onEnter as OnNavToPackage) || (() => Promise.resolve());
|
|
345
|
+
this.onLeave = onLeave || (() => Promise.resolve());
|
|
346
|
+
this._onLogOut = onLogOut || (() => Promise.resolve());
|
|
347
|
+
this.onLogIn = onLogIn || (() => Promise.resolve());
|
|
348
|
+
}
|
|
324
349
|
}
|
|
325
350
|
|
|
326
351
|
public async onLogOut(store: any) {
|
package/core/types.ts
CHANGED
|
@@ -39,6 +39,17 @@ export type OnEnterLeavePackageConfig = {
|
|
|
39
39
|
export type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
40
40
|
export type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
41
41
|
export type OnLogOut = (store: any) => Promise<void>;
|
|
42
|
+
export type OnLogIn = (store: any) => Promise<void>;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Navigation hooks specified as an object
|
|
46
|
+
*/
|
|
47
|
+
export type NavHooks = {
|
|
48
|
+
onEnter?: OnNavToPackage,
|
|
49
|
+
onLeave?: OnNavAwayFromPackage,
|
|
50
|
+
onLogout?: OnLogOut,
|
|
51
|
+
onLogin?: OnLogIn,
|
|
52
|
+
}
|
|
42
53
|
|
|
43
54
|
/** Enum regarding the extensible areas/places of the UI */
|
|
44
55
|
export enum ExtensionPoint {
|
|
@@ -324,6 +335,10 @@ export interface HeaderOptions {
|
|
|
324
335
|
}
|
|
325
336
|
|
|
326
337
|
export interface ConfigureTypeOptions {
|
|
338
|
+
/**
|
|
339
|
+
* Override for the create button string on a list view
|
|
340
|
+
*/
|
|
341
|
+
listCreateButtonLabelKey?: boolean;
|
|
327
342
|
/**
|
|
328
343
|
* The resource can edit/show yaml
|
|
329
344
|
*/
|
|
@@ -644,8 +659,10 @@ export interface IPlugin {
|
|
|
644
659
|
addNavHooks(
|
|
645
660
|
onEnter?: OnNavToPackage,
|
|
646
661
|
onLeave?: OnNavAwayFromPackage,
|
|
647
|
-
onLogOut?: OnLogOut
|
|
662
|
+
onLogOut?: OnLogOut,
|
|
663
|
+
onLogIn?: OnLogIn,
|
|
648
664
|
): void;
|
|
665
|
+
addNavHooks(hooks: NavHooks): void;
|
|
649
666
|
|
|
650
667
|
/**
|
|
651
668
|
* Adds a model extension
|
|
@@ -7,11 +7,11 @@ import Loading from '@shell/components/Loading';
|
|
|
7
7
|
import day from 'dayjs';
|
|
8
8
|
import { DATE_FORMAT, TIME_FORMAT } from '@shell/store/prefs';
|
|
9
9
|
import { escapeHtml, randomStr } from '@shell/utils/string';
|
|
10
|
-
import {
|
|
10
|
+
import { COMPLIANCE } from '@shell/config/types';
|
|
11
11
|
import { STATE } from '@shell/config/table-headers';
|
|
12
12
|
import { get } from '@shell/utils/object';
|
|
13
13
|
import { allHash } from '@shell/utils/promise';
|
|
14
|
-
import { fetchSpecsScheduledScanConfig } from '@shell/models/
|
|
14
|
+
import { fetchSpecsScheduledScanConfig } from '@shell/models/compliance.cattle.io.clusterscan';
|
|
15
15
|
|
|
16
16
|
export default {
|
|
17
17
|
components: {
|
|
@@ -95,50 +95,50 @@ export default {
|
|
|
95
95
|
|
|
96
96
|
const out = [
|
|
97
97
|
{
|
|
98
|
-
label: this.t('
|
|
98
|
+
label: this.t('compliance.profile'),
|
|
99
99
|
value: this.value.status.lastRunScanProfileName,
|
|
100
100
|
to: {
|
|
101
101
|
name: 'c-cluster-product-resource-id',
|
|
102
102
|
params: {
|
|
103
103
|
...this.$route.params,
|
|
104
|
-
resource:
|
|
104
|
+
resource: COMPLIANCE.CLUSTER_SCAN_PROFILE,
|
|
105
105
|
id: this.value.status.lastRunScanProfileName
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
label: this.t('
|
|
110
|
+
label: this.t('compliance.scan.total'),
|
|
111
111
|
value: this.parsedReport.total
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
|
-
label: this.t('
|
|
114
|
+
label: this.t('compliance.scan.pass'),
|
|
115
115
|
value: this.parsedReport.pass
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
|
-
label: this.t('
|
|
118
|
+
label: this.t('compliance.scan.warn'),
|
|
119
119
|
value: this.parsedReport.warn
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
|
-
label: this.t('
|
|
122
|
+
label: this.t('compliance.scan.skip'),
|
|
123
123
|
value: this.parsedReport.skip
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
|
-
label: this.t('
|
|
126
|
+
label: this.t('compliance.scan.fail'),
|
|
127
127
|
value: this.parsedReport.fail
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
|
-
label: this.t('
|
|
130
|
+
label: this.t('compliance.scan.notApplicable'),
|
|
131
131
|
value: this.parsedReport.notApplicable
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
|
-
label: this.canBeScheduled ? this.t('
|
|
134
|
+
label: this.canBeScheduled ? this.t('compliance.scan.lastScanTime') : this.t('compliance.scan.scanDate'),
|
|
135
135
|
value: this.value.status.lastRunTimestamp,
|
|
136
136
|
component: 'Date'
|
|
137
137
|
},
|
|
138
138
|
];
|
|
139
139
|
|
|
140
140
|
if (!this.canBeScheduled) {
|
|
141
|
-
return out.filter((each) => each.label !== this.t('
|
|
141
|
+
return out.filter((each) => each.label !== this.t('compliance.scan.warn'));
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
return out;
|
|
@@ -154,14 +154,14 @@ export default {
|
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
name: 'number',
|
|
157
|
-
label: this.t('
|
|
157
|
+
label: this.t('compliance.scan.number'),
|
|
158
158
|
value: 'id',
|
|
159
159
|
sort: 'testIdSort',
|
|
160
160
|
width: 100
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
name: 'description',
|
|
164
|
-
label: this.t('
|
|
164
|
+
label: this.t('compliance.scan.description'),
|
|
165
165
|
value: 'description',
|
|
166
166
|
}
|
|
167
167
|
];
|
|
@@ -250,7 +250,7 @@ export default {
|
|
|
250
250
|
if (!remediation) {
|
|
251
251
|
|
|
252
252
|
} else {
|
|
253
|
-
return `${ this.t('
|
|
253
|
+
return `${ this.t('compliance.scan.remediation') }: ${ remediation }`;
|
|
254
254
|
}
|
|
255
255
|
},
|
|
256
256
|
get
|
|
@@ -287,13 +287,13 @@ export default {
|
|
|
287
287
|
>
|
|
288
288
|
<div class="col span-8">
|
|
289
289
|
<h3>
|
|
290
|
-
{{ t('
|
|
290
|
+
{{ t('compliance.scan.scanReport') }}
|
|
291
291
|
</h3>
|
|
292
292
|
</div>
|
|
293
293
|
<div class="col span-4">
|
|
294
294
|
<LabeledSelect
|
|
295
295
|
v-model:value="clusterReport"
|
|
296
|
-
:label="t('
|
|
296
|
+
:label="t('compliance.reports')"
|
|
297
297
|
:options="clusterReports"
|
|
298
298
|
:get-option-label="reportLabel"
|
|
299
299
|
:get-option-key="report=>report.id"
|
|
@@ -302,7 +302,7 @@ export default {
|
|
|
302
302
|
</div>
|
|
303
303
|
<div v-if="results && !!get(value, 'status.summary')">
|
|
304
304
|
<SortableTable
|
|
305
|
-
no-rows-key="
|
|
305
|
+
no-rows-key="compliance.noReportFound"
|
|
306
306
|
default-sort-by="state"
|
|
307
307
|
:search="false"
|
|
308
308
|
:row-actions="false"
|
|
@@ -328,6 +328,7 @@ export default {
|
|
|
328
328
|
color="warning"
|
|
329
329
|
/>
|
|
330
330
|
<SortableTable
|
|
331
|
+
v-if="row.nodeRows.length"
|
|
331
332
|
class="sub-table"
|
|
332
333
|
:rows="row.nodeRows"
|
|
333
334
|
:headers="nodeTableHeaders"
|
|
@@ -336,6 +337,9 @@ export default {
|
|
|
336
337
|
:table-actions="false"
|
|
337
338
|
key-field="id"
|
|
338
339
|
/>
|
|
340
|
+
<span v-else>
|
|
341
|
+
{{ t('compliance.detail.subRow.noNodes') }}
|
|
342
|
+
</span>
|
|
339
343
|
</td>
|
|
340
344
|
</tr>
|
|
341
345
|
</template>
|