@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.
Files changed (312) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/key.svg +17 -0
  3. package/assets/styles/base/_spacing.scss +2 -2
  4. package/assets/styles/global/_form.scss +1 -1
  5. package/assets/styles/global/_labeled-input.scss +1 -1
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/vendor/vue-select.scss +1 -1
  9. package/assets/translations/en-us.yaml +404 -64
  10. package/assets/translations/zh-hans.yaml +3 -4
  11. package/cloud-credential/gcp.vue +9 -1
  12. package/components/AppModal.vue +2 -0
  13. package/components/CodeMirror.vue +1 -1
  14. package/components/ConfigMapSettings/Settings.vue +377 -0
  15. package/components/ConfigMapSettings/index.vue +354 -0
  16. package/components/CruResource.vue +1 -2
  17. package/components/DetailText.vue +61 -11
  18. package/components/Drawer/Chrome.vue +116 -0
  19. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  20. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  21. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  25. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  26. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  28. package/components/GrowlManager.vue +16 -15
  29. package/components/IconOrSvg.vue +5 -0
  30. package/components/KeyValueView.vue +1 -1
  31. package/components/LocaleSelector.vue +9 -1
  32. package/components/ProgressBarMulti.vue +1 -0
  33. package/components/PromptModal.vue +6 -1
  34. package/components/RelatedResources.vue +4 -12
  35. package/components/Resource/Detail/Additional.vue +46 -0
  36. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  37. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  38. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  39. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
  40. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  41. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
  42. package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
  43. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  44. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  45. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  46. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  47. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  48. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  49. package/components/Resource/Detail/Metadata/index.vue +12 -5
  50. package/components/Resource/Detail/Page.vue +15 -0
  51. package/components/Resource/Detail/ResourceRow.vue +37 -18
  52. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  53. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  54. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  55. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  56. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  57. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  58. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  59. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  60. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  61. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  62. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  63. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  76. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  77. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  78. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  79. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  80. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  81. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  82. package/components/Resource/Detail/TitleBar/index.vue +83 -11
  83. package/components/Resource/Detail/composables.ts +45 -0
  84. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  85. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  86. package/components/ResourceDetail/Masthead/index.vue +65 -0
  87. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  88. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  89. package/components/ResourceDetail/index.vue +30 -16
  90. package/components/ResourceDetail/legacy.vue +18 -1
  91. package/components/ResourceList/Masthead.vue +6 -0
  92. package/components/ResourceYaml.vue +14 -1
  93. package/components/SlideInPanelManager.vue +46 -7
  94. package/components/StateDot/index.vue +28 -0
  95. package/components/Tabbed/index.vue +11 -15
  96. package/components/Wizard.vue +4 -2
  97. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  98. package/components/__tests__/GrowlManager.test.ts +0 -25
  99. package/components/auth/login/ldap.vue +1 -1
  100. package/components/fleet/FleetApplications.vue +0 -7
  101. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  102. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  103. package/components/fleet/FleetClusters.vue +25 -6
  104. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  105. package/components/fleet/FleetHelmOps.vue +8 -0
  106. package/components/fleet/FleetRepos.vue +1 -6
  107. package/components/fleet/FleetResources.vue +4 -5
  108. package/components/fleet/FleetValuesFrom.vue +295 -0
  109. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  110. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  111. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  112. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  113. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  114. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  115. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  116. package/components/fleet/dashboard/ResourcePanel.vue +15 -8
  117. package/components/form/ArrayList.vue +13 -2
  118. package/components/form/ChangePassword.vue +3 -1
  119. package/components/form/Footer.vue +10 -4
  120. package/components/form/KeyValue.vue +81 -43
  121. package/components/form/LabeledSelect.vue +56 -16
  122. package/components/form/Labels.vue +90 -17
  123. package/components/form/MatchExpressions.vue +46 -5
  124. package/components/form/NameNsDescription.vue +1 -1
  125. package/components/form/ResourceSelector.vue +1 -0
  126. package/components/form/ResourceTabs/index.vue +5 -0
  127. package/components/form/SecretSelector.vue +9 -2
  128. package/components/form/Select.vue +57 -19
  129. package/components/form/SimpleSecretSelector.vue +9 -2
  130. package/components/form/Taints.vue +21 -2
  131. package/components/form/UnitInput.vue +8 -0
  132. package/components/form/ValueFromResource.vue +1 -1
  133. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  134. package/components/form/__tests__/Labels.test.ts +360 -0
  135. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  136. package/components/form/__tests__/Select.test.ts +5 -2
  137. package/components/formatter/FleetApplicationSource.vue +1 -1
  138. package/components/formatter/WorkloadHealthScale.vue +1 -1
  139. package/components/google/AccountAccess.vue +211 -0
  140. package/components/google/types/gcp.d.ts +136 -0
  141. package/components/google/types/index.d.ts +101 -0
  142. package/components/google/util/__mocks__/gcp.ts +465 -0
  143. package/components/google/util/formatter.ts +82 -0
  144. package/components/google/util/gcp.ts +134 -0
  145. package/components/google/util/index.d.ts +11 -0
  146. package/components/nav/Favorite.vue +1 -1
  147. package/components/nav/Group.vue +70 -47
  148. package/components/nav/Header.vue +5 -1
  149. package/components/nav/NamespaceFilter.vue +13 -1
  150. package/components/nav/NotificationCenter/Notification.vue +510 -0
  151. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  152. package/components/nav/NotificationCenter/index.vue +148 -0
  153. package/composables/drawer.ts +26 -0
  154. package/composables/resources.test.ts +63 -0
  155. package/composables/resources.ts +38 -0
  156. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  157. package/config/labels-annotations.js +6 -0
  158. package/config/product/auth.js +16 -1
  159. package/config/product/{cis.js → compliance.js} +23 -26
  160. package/config/product/explorer.js +5 -1
  161. package/config/product/fleet.js +7 -0
  162. package/config/product/settings.js +22 -11
  163. package/config/query-params.js +3 -0
  164. package/config/roles.ts +1 -1
  165. package/config/router/navigation-guards/authentication.js +51 -2
  166. package/config/router/routes.js +27 -31
  167. package/config/settings.ts +21 -3
  168. package/config/store.js +2 -0
  169. package/config/system-namespaces.js +1 -1
  170. package/config/table-headers.js +2 -2
  171. package/config/types.js +15 -6
  172. package/core/plugin.ts +32 -7
  173. package/core/types.ts +18 -1
  174. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  175. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  176. package/detail/management.cattle.io.oidcclient.vue +369 -0
  177. package/detail/node.vue +2 -2
  178. package/detail/pod.vue +2 -2
  179. package/detail/service.vue +10 -1
  180. package/detail/workload/index.vue +8 -2
  181. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  182. package/dialog/GenericPrompt.vue +1 -1
  183. package/dialog/ImportDialog.vue +8 -8
  184. package/dialog/OidcClientSecretDialog.vue +117 -0
  185. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  186. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  187. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  188. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  189. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  190. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  191. package/edit/configmap.vue +4 -1
  192. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  193. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  194. package/edit/fleet.cattle.io.helmop.vue +44 -269
  195. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  196. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  197. package/edit/logging-flow/index.vue +1 -0
  198. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  199. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  200. package/edit/management.cattle.io.oidcclient.vue +162 -0
  201. package/edit/management.cattle.io.project.vue +4 -1
  202. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  203. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  204. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  205. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  206. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  207. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  208. package/edit/monitoring.coreos.com.route.vue +1 -0
  209. package/edit/namespace.vue +1 -0
  210. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  211. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  212. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  213. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  214. package/edit/node.vue +1 -0
  215. package/edit/persistentvolume/index.vue +4 -1
  216. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  217. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  218. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  219. package/edit/resources.cattle.io.restore.vue +1 -1
  220. package/edit/secret/index.vue +1 -0
  221. package/edit/service.vue +4 -1
  222. package/edit/serviceaccount.vue +4 -1
  223. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  224. package/edit/workload/index.vue +5 -0
  225. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  226. package/list/management.cattle.io.oidcclient.vue +108 -0
  227. package/list/node.vue +2 -0
  228. package/machine-config/amazonec2.vue +3 -24
  229. package/machine-config/components/GCEImage.vue +374 -0
  230. package/machine-config/google.vue +617 -0
  231. package/mixins/__tests__/brand.spec.ts +170 -0
  232. package/mixins/brand.js +16 -17
  233. package/mixins/create-edit-view/index.js +5 -0
  234. package/mixins/resource-fetch-api-pagination.js +16 -0
  235. package/mixins/vue-select-overrides.js +1 -0
  236. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  237. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  238. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  239. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  240. package/models/fleet-application.js +8 -79
  241. package/models/fleet.cattle.io.cluster.js +11 -0
  242. package/models/fleet.cattle.io.gitrepo.js +2 -2
  243. package/models/fleet.cattle.io.helmop.js +9 -39
  244. package/models/management.cattle.io.fleetworkspace.js +2 -1
  245. package/models/management.cattle.io.oidcclient.js +18 -0
  246. package/models/management.cattle.io.registration.js +3 -0
  247. package/models/provisioning.cattle.io.cluster.js +5 -5
  248. package/models/service.js +4 -0
  249. package/models/workload.js +5 -0
  250. package/package.json +1 -1
  251. package/pages/about.vue +4 -58
  252. package/pages/auth/login.vue +1 -1
  253. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  254. package/pages/c/_cluster/apps/charts/index.vue +285 -81
  255. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  256. package/pages/c/_cluster/explorer/index.vue +3 -3
  257. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  258. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  259. package/pages/c/_cluster/fleet/index.vue +94 -56
  260. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  261. package/pages/c/_cluster/longhorn/index.vue +5 -2
  262. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  263. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  264. package/pages/explorer/resource/detail/configmap.vue +30 -7
  265. package/pages/explorer/resource/detail/secret.vue +50 -0
  266. package/pages/home.vue +9 -55
  267. package/pages/support/index.vue +4 -6
  268. package/plugins/dashboard-store/actions.js +19 -5
  269. package/plugins/dashboard-store/getters.js +4 -0
  270. package/plugins/dashboard-store/resource-class.js +16 -2
  271. package/plugins/steve/steve-pagination-utils.ts +26 -18
  272. package/plugins/steve/subscribe.js +6 -1
  273. package/rancher-components/Banner/Banner.vue +13 -0
  274. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  275. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  276. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  277. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  278. package/store/auth.js +2 -0
  279. package/store/catalog.js +23 -1
  280. package/store/growl.js +97 -8
  281. package/store/index.js +6 -0
  282. package/store/notifications.ts +426 -0
  283. package/store/prefs.js +0 -1
  284. package/store/type-map.js +19 -16
  285. package/store/uiplugins.ts +15 -1
  286. package/types/fleet.d.ts +24 -0
  287. package/types/notifications/index.ts +74 -0
  288. package/types/shell/index.d.ts +46 -32
  289. package/types/store/dashboard-store.types.ts +16 -0
  290. package/utils/__tests__/fleet.test.ts +148 -0
  291. package/utils/__tests__/object.test.ts +54 -1
  292. package/utils/__tests__/string.test.ts +273 -1
  293. package/utils/__tests__/time.test.ts +31 -0
  294. package/utils/auth.js +9 -2
  295. package/utils/crypto/encryption.ts +103 -0
  296. package/utils/cspAdaptor.ts +51 -0
  297. package/utils/fleet.ts +54 -65
  298. package/utils/object.js +36 -0
  299. package/utils/pagination-utils.ts +1 -1
  300. package/utils/release-notes.ts +48 -0
  301. package/utils/selector-typed.ts +7 -2
  302. package/utils/string.js +24 -0
  303. package/utils/{time.js → time.ts} +25 -6
  304. package/utils/uiplugins.ts +22 -0
  305. package/utils/validators/formRules/index.ts +3 -0
  306. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  307. package/config/product/legacy.js +0 -62
  308. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  309. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  310. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  311. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  312. /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
 
@@ -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, CIS } from '@shell/config/types';
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 CIS_NAME, CHART_NAME as CIS_CHART_NAME } from '@shell/config/product/cis';
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/cis',
211
- name: 'c-cluster-cis',
212
- meta: { ...installRedirectRouteMeta(CIS_NAME, CIS_CHART_NAME, CIS.CLUSTER_SCAN) }
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')),
@@ -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
- export const PROVISIONING_SETTINGS = ['engine-iso-url', 'engine-install-url', 'imported-cluster-version-management', 'cluster-agent-default-priority-class', 'cluster-agent-default-pod-disruption-budget'];
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();
@@ -12,7 +12,7 @@ export default [
12
12
  'linkerd',
13
13
  'security-scan',
14
14
  'tekton-pipelines',
15
- 'cis-operator-system',
15
+ 'rancher-compliance-system',
16
16
  'istio-system',
17
17
  'longhorn-system',
18
18
  ];
@@ -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', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
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', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
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 CIS = {
298
- CLUSTER_SCAN: 'cis.cattle.io.clusterscan',
299
- CLUSTER_SCAN_PROFILE: 'cis.cattle.io.clusterscanprofile',
300
- BENCHMARK: 'cis.cattle.io.clusterscanbenchmark',
301
- REPORT: 'cis.cattle.io.clusterscanreport'
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, OnNavToPackage, OnNavAwayFromPackage, OnLogOut,
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: OnNavToPackage = () => Promise.resolve(),
318
- onLeave: OnNavAwayFromPackage = () => Promise.resolve(),
319
- onLogOut: OnLogOut = () => Promise.resolve(),
319
+ onEnter?: OnNavToPackage | NavHooks,
320
+ onLeave?: OnNavAwayFromPackage,
321
+ onLogOut?: OnLogOut,
322
+ onLogIn?: OnLogIn,
320
323
  ): void {
321
- this.onEnter = onEnter;
322
- this.onLeave = onLeave;
323
- this._onLogOut = onLogOut;
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 { CIS } from '@shell/config/types';
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/cis.cattle.io.clusterscan';
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('cis.profile'),
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: CIS.CLUSTER_SCAN_PROFILE,
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('cis.scan.total'),
110
+ label: this.t('compliance.scan.total'),
111
111
  value: this.parsedReport.total
112
112
  },
113
113
  {
114
- label: this.t('cis.scan.pass'),
114
+ label: this.t('compliance.scan.pass'),
115
115
  value: this.parsedReport.pass
116
116
  },
117
117
  {
118
- label: this.t('cis.scan.warn'),
118
+ label: this.t('compliance.scan.warn'),
119
119
  value: this.parsedReport.warn
120
120
  },
121
121
  {
122
- label: this.t('cis.scan.skip'),
122
+ label: this.t('compliance.scan.skip'),
123
123
  value: this.parsedReport.skip
124
124
  },
125
125
  {
126
- label: this.t('cis.scan.fail'),
126
+ label: this.t('compliance.scan.fail'),
127
127
  value: this.parsedReport.fail
128
128
  },
129
129
  {
130
- label: this.t('cis.scan.notApplicable'),
130
+ label: this.t('compliance.scan.notApplicable'),
131
131
  value: this.parsedReport.notApplicable
132
132
  },
133
133
  {
134
- label: this.canBeScheduled ? this.t('cis.scan.lastScanTime') : this.t('cis.scan.scanDate'),
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('cis.scan.warn'));
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('cis.scan.number'),
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('cis.scan.description'),
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('cis.scan.remediation') }: ${ remediation }`;
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('cis.scan.scanReport') }}
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('cis.reports')"
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="cis.noReportFound"
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>