@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.7

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 (361) 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/base/_variables.scss +17 -11
  5. package/assets/styles/global/_form.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -1
  7. package/assets/styles/themes/_dark.scss +5 -0
  8. package/assets/styles/themes/_light.scss +11 -2
  9. package/assets/styles/vendor/vue-select.scss +1 -1
  10. package/assets/translations/en-us.yaml +426 -64
  11. package/assets/translations/zh-hans.yaml +3 -4
  12. package/cloud-credential/gcp.vue +9 -1
  13. package/components/AppModal.vue +2 -0
  14. package/components/CodeMirror.vue +2 -2
  15. package/components/ConfigMapSettings/Settings.vue +377 -0
  16. package/components/ConfigMapSettings/index.vue +354 -0
  17. package/components/CruResource.vue +1 -2
  18. package/components/DetailText.vue +61 -11
  19. package/components/Drawer/Chrome.vue +115 -0
  20. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  21. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  25. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  26. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  27. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  28. package/components/Drawer/ResourceDetailDrawer/index.vue +111 -0
  29. package/components/GrowlManager.vue +16 -15
  30. package/components/IconOrSvg.vue +5 -0
  31. package/components/KeyValueView.vue +1 -1
  32. package/components/Loading.vue +1 -1
  33. package/components/LocaleSelector.vue +9 -1
  34. package/components/PaginatedResourceTable.vue +46 -1
  35. package/components/ProgressBarMulti.vue +1 -0
  36. package/components/PromptModal.vue +6 -1
  37. package/components/PromptRestore.vue +22 -44
  38. package/components/RelatedResources.vue +4 -12
  39. package/components/Resource/Detail/Additional.vue +46 -0
  40. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  41. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  42. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  43. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +47 -256
  44. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  45. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +34 -5
  46. package/components/Resource/Detail/Metadata/KeyValue.vue +32 -22
  47. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  48. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  49. package/components/Resource/Detail/Metadata/Rectangle.vue +3 -1
  50. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  51. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  52. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  53. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  54. package/components/Resource/Detail/Metadata/index.vue +12 -5
  55. package/components/Resource/Detail/Page.vue +15 -0
  56. package/components/Resource/Detail/ResourceRow.vue +37 -18
  57. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  58. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  59. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  60. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  61. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  62. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  63. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  76. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  77. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  78. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  79. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  80. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  81. package/components/Resource/Detail/SpacedRow.vue +1 -1
  82. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  83. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  84. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  85. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  86. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  87. package/components/Resource/Detail/TitleBar/composables.ts +45 -0
  88. package/components/Resource/Detail/TitleBar/index.vue +85 -13
  89. package/components/Resource/Detail/composables.ts +45 -0
  90. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  91. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  92. package/components/ResourceDetail/Masthead/index.vue +65 -0
  93. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  94. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +1 -1
  95. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  96. package/components/ResourceDetail/index.vue +33 -17
  97. package/components/ResourceDetail/legacy.vue +18 -1
  98. package/components/ResourceList/Masthead.vue +6 -0
  99. package/components/ResourceList/index.vue +1 -0
  100. package/components/ResourceTable.vue +6 -1
  101. package/components/ResourceYaml.vue +15 -2
  102. package/components/RichTranslation.vue +106 -0
  103. package/components/SlideInPanelManager.vue +46 -11
  104. package/components/SortableTable/index.vue +1 -1
  105. package/components/SortableTable/selection.js +0 -1
  106. package/components/StateDot/index.vue +28 -0
  107. package/components/Tabbed/index.vue +17 -16
  108. package/components/Wizard.vue +4 -2
  109. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  110. package/components/__tests__/GrowlManager.test.ts +0 -25
  111. package/components/__tests__/PromptRestore.test.ts +1 -65
  112. package/components/__tests__/RichTranslation.test.ts +115 -0
  113. package/components/auth/login/ldap.vue +1 -1
  114. package/components/fleet/FleetApplications.vue +0 -7
  115. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  116. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  117. package/components/fleet/FleetClusters.vue +25 -6
  118. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  119. package/components/fleet/FleetHelmOps.vue +8 -0
  120. package/components/fleet/FleetRepos.vue +1 -6
  121. package/components/fleet/FleetResources.vue +4 -5
  122. package/components/fleet/FleetValuesFrom.vue +295 -0
  123. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  124. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  125. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  126. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  127. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  128. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  129. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  130. package/components/fleet/dashboard/ResourcePanel.vue +17 -9
  131. package/components/form/ArrayList.vue +13 -2
  132. package/components/form/ChangePassword.vue +3 -1
  133. package/components/form/FileImageSelector.vue +1 -1
  134. package/components/form/Footer.vue +10 -4
  135. package/components/form/KeyValue.vue +81 -43
  136. package/components/form/LabeledSelect.vue +56 -16
  137. package/components/form/Labels.vue +90 -17
  138. package/components/form/MatchExpressions.vue +46 -5
  139. package/components/form/NameNsDescription.vue +2 -1
  140. package/components/form/Networking.vue +24 -19
  141. package/components/form/ResourceLabeledSelect.vue +4 -3
  142. package/components/form/ResourceSelector.vue +1 -0
  143. package/components/form/ResourceTabs/index.vue +5 -0
  144. package/components/form/SecretSelector.vue +9 -2
  145. package/components/form/Select.vue +57 -19
  146. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  147. package/components/form/SimpleSecretSelector.vue +9 -2
  148. package/components/form/Taints.vue +21 -2
  149. package/components/form/UnitInput.vue +8 -0
  150. package/components/form/ValueFromResource.vue +1 -1
  151. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  152. package/components/form/__tests__/Labels.test.ts +360 -0
  153. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  154. package/components/form/__tests__/Networking.test.ts +116 -0
  155. package/components/form/__tests__/Select.test.ts +5 -2
  156. package/components/formatter/FleetApplicationSource.vue +1 -1
  157. package/components/formatter/PodImages.vue +1 -1
  158. package/components/formatter/WorkloadHealthScale.vue +1 -1
  159. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  160. package/components/google/AccountAccess.vue +209 -0
  161. package/components/google/types/gcp.d.ts +136 -0
  162. package/components/google/types/index.d.ts +101 -0
  163. package/components/google/util/__mocks__/gcp.ts +465 -0
  164. package/components/google/util/formatter.ts +82 -0
  165. package/components/google/util/gcp.ts +134 -0
  166. package/components/google/util/index.d.ts +11 -0
  167. package/components/nav/Favorite.vue +1 -1
  168. package/components/nav/Group.vue +71 -45
  169. package/components/nav/Header.vue +5 -1
  170. package/components/nav/NamespaceFilter.vue +13 -1
  171. package/components/nav/NotificationCenter/Notification.vue +510 -0
  172. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  173. package/components/nav/NotificationCenter/index.vue +148 -0
  174. package/composables/drawer.ts +26 -0
  175. package/composables/resources.test.ts +63 -0
  176. package/composables/resources.ts +38 -0
  177. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  178. package/config/labels-annotations.js +8 -0
  179. package/config/pagination-table-headers.js +8 -1
  180. package/config/product/auth.js +16 -1
  181. package/config/product/{cis.js → compliance.js} +23 -26
  182. package/config/product/explorer.js +32 -3
  183. package/config/product/fleet.js +7 -0
  184. package/config/product/manager.js +0 -1
  185. package/config/product/settings.js +22 -11
  186. package/config/query-params.js +13 -0
  187. package/config/roles.ts +1 -1
  188. package/config/router/navigation-guards/authentication.js +51 -2
  189. package/config/router/routes.js +47 -31
  190. package/config/settings.ts +21 -3
  191. package/config/store.js +2 -0
  192. package/config/system-namespaces.js +1 -1
  193. package/config/table-headers.js +32 -3
  194. package/config/types.js +16 -7
  195. package/config/version.js +1 -1
  196. package/core/plugin.ts +32 -7
  197. package/core/types.ts +18 -1
  198. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  199. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  200. package/detail/management.cattle.io.oidcclient.vue +369 -0
  201. package/detail/node.vue +2 -2
  202. package/detail/pod.vue +2 -2
  203. package/detail/provisioning.cattle.io.cluster.vue +3 -47
  204. package/detail/service.vue +10 -1
  205. package/detail/workload/index.vue +8 -2
  206. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  207. package/dialog/GenericPrompt.vue +1 -1
  208. package/dialog/ImportDialog.vue +8 -8
  209. package/dialog/OidcClientSecretDialog.vue +117 -0
  210. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  211. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  212. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  213. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  214. package/edit/auth/ldap/config.vue +24 -0
  215. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  216. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  217. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  218. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  219. package/edit/configmap.vue +8 -2
  220. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  221. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  222. package/edit/fleet.cattle.io.helmop.vue +44 -269
  223. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  224. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  225. package/edit/logging-flow/index.vue +1 -0
  226. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  227. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  228. package/edit/management.cattle.io.oidcclient.vue +162 -0
  229. package/edit/management.cattle.io.project.vue +4 -1
  230. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  231. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  232. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  233. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  234. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  235. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  236. package/edit/monitoring.coreos.com.route.vue +1 -0
  237. package/edit/namespace.vue +1 -0
  238. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  239. package/edit/networking.k8s.io.ingress/Certificate.vue +12 -12
  240. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +165 -0
  241. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  242. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  243. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  244. package/edit/node.vue +1 -0
  245. package/edit/persistentvolume/index.vue +4 -1
  246. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +3 -2
  247. package/edit/provisioning.cattle.io.cluster/rke2.vue +516 -426
  248. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
  249. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  250. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  251. package/edit/resources.cattle.io.restore.vue +1 -1
  252. package/edit/secret/basic.vue +1 -0
  253. package/edit/secret/index.vue +127 -15
  254. package/edit/service.vue +4 -1
  255. package/edit/serviceaccount.vue +4 -1
  256. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  257. package/edit/workload/index.vue +5 -0
  258. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  259. package/list/management.cattle.io.oidcclient.vue +108 -0
  260. package/list/node.vue +2 -0
  261. package/list/projectsecret.vue +345 -0
  262. package/list/secret.vue +109 -0
  263. package/machine-config/amazonec2.vue +3 -24
  264. package/machine-config/components/GCEImage.vue +374 -0
  265. package/machine-config/google.vue +617 -0
  266. package/mixins/__tests__/brand.spec.ts +170 -0
  267. package/mixins/brand.js +16 -17
  268. package/mixins/create-edit-view/impl.js +10 -1
  269. package/mixins/create-edit-view/index.js +5 -0
  270. package/mixins/resource-fetch-api-pagination.js +24 -8
  271. package/mixins/resource-fetch.js +3 -1
  272. package/mixins/vue-select-overrides.js +1 -0
  273. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  274. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  275. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  276. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  277. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  278. package/models/fleet-application.js +8 -79
  279. package/models/fleet.cattle.io.cluster.js +13 -2
  280. package/models/fleet.cattle.io.gitrepo.js +2 -2
  281. package/models/fleet.cattle.io.helmop.js +9 -39
  282. package/models/management.cattle.io.fleetworkspace.js +2 -1
  283. package/models/management.cattle.io.oidcclient.js +18 -0
  284. package/models/management.cattle.io.registration.js +3 -0
  285. package/models/provisioning.cattle.io.cluster.js +29 -33
  286. package/models/secret.js +157 -2
  287. package/models/service.js +4 -0
  288. package/models/workload.js +5 -0
  289. package/package.json +2 -2
  290. package/pages/about.vue +4 -58
  291. package/pages/auth/login.vue +1 -1
  292. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  293. package/pages/c/_cluster/apps/charts/index.vue +296 -81
  294. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  295. package/pages/c/_cluster/explorer/index.vue +3 -3
  296. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  297. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  298. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  299. package/pages/c/_cluster/fleet/index.vue +94 -57
  300. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  301. package/pages/c/_cluster/longhorn/index.vue +5 -2
  302. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  303. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  304. package/pages/explorer/resource/detail/configmap.vue +30 -7
  305. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  306. package/pages/explorer/resource/detail/secret.vue +63 -0
  307. package/pages/home.vue +9 -55
  308. package/pages/support/index.vue +4 -6
  309. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  310. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  311. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  312. package/plugins/dashboard-store/actions.js +19 -5
  313. package/plugins/dashboard-store/getters.js +4 -0
  314. package/plugins/dashboard-store/normalize.js +29 -17
  315. package/plugins/dashboard-store/resource-class.js +68 -19
  316. package/plugins/steve/steve-pagination-utils.ts +38 -19
  317. package/plugins/steve/subscribe.js +6 -1
  318. package/rancher-components/Banner/Banner.vue +13 -0
  319. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  320. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  321. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  322. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  323. package/store/auth.js +2 -0
  324. package/store/catalog.js +23 -1
  325. package/store/growl.js +97 -8
  326. package/store/index.js +6 -0
  327. package/store/notifications.ts +426 -0
  328. package/store/prefs.js +0 -1
  329. package/store/type-map.js +19 -16
  330. package/store/uiplugins.ts +15 -1
  331. package/types/fleet.d.ts +24 -0
  332. package/types/kube/kube-api.ts +12 -0
  333. package/types/notifications/index.ts +74 -0
  334. package/types/shell/index.d.ts +661 -589
  335. package/types/store/dashboard-store.types.ts +16 -0
  336. package/types/store/pagination.types.ts +16 -6
  337. package/utils/__tests__/create-yaml.test.ts +235 -0
  338. package/utils/__tests__/fleet.test.ts +148 -0
  339. package/utils/__tests__/object.test.ts +54 -1
  340. package/utils/__tests__/string.test.ts +273 -1
  341. package/utils/__tests__/time.test.ts +31 -0
  342. package/utils/auth.js +9 -2
  343. package/utils/create-yaml.js +103 -9
  344. package/utils/crypto/encryption.ts +103 -0
  345. package/utils/cspAdaptor.ts +51 -0
  346. package/utils/fleet.ts +54 -65
  347. package/utils/object.js +36 -0
  348. package/utils/pagination-utils.ts +19 -1
  349. package/utils/release-notes.ts +48 -0
  350. package/utils/selector-typed.ts +7 -2
  351. package/utils/string.js +24 -0
  352. package/utils/{time.js → time.ts} +25 -6
  353. package/utils/uiplugins.ts +22 -0
  354. package/utils/validators/formRules/index.ts +3 -0
  355. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  356. package/config/product/legacy.js +0 -62
  357. package/models/etcdbackup.js +0 -45
  358. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  359. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  360. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  361. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
@@ -1,5 +1,5 @@
1
1
  import { DSL } from '@shell/store/type-map';
2
- import { MANAGEMENT, HELM } from '@shell/config/types';
2
+ import { FLEET, MANAGEMENT, HELM } from '@shell/config/types';
3
3
  import {
4
4
  STATE,
5
5
  FEATURE_DESCRIPTION,
@@ -35,7 +35,7 @@ export function init(store) {
35
35
  labelKey: 'advancedSettings.label',
36
36
  name: 'settings',
37
37
  namespaced: false,
38
- weight: 100,
38
+ weight: 101,
39
39
  icon: 'folder',
40
40
  route: {
41
41
  name: 'c-cluster-product-resource',
@@ -51,7 +51,7 @@ export function init(store) {
51
51
  labelKey: 'featureFlags.label',
52
52
  name: 'features',
53
53
  namespaced: false,
54
- weight: 99,
54
+ weight: 100,
55
55
  icon: 'folder',
56
56
  route: {
57
57
  name: 'c-cluster-product-resource',
@@ -64,22 +64,22 @@ export function init(store) {
64
64
 
65
65
  virtualType({
66
66
  ifHaveType: MANAGEMENT.SETTING,
67
- labelKey: 'branding.label',
68
- name: 'brand',
67
+ labelKey: 'banner.settingName',
68
+ name: 'banners',
69
69
  namespaced: false,
70
- weight: 98,
70
+ weight: 99,
71
71
  icon: 'folder',
72
- route: { name: 'c-cluster-settings-brand' }
72
+ route: { name: 'c-cluster-settings-banners' }
73
73
  });
74
74
 
75
75
  virtualType({
76
76
  ifHaveType: MANAGEMENT.SETTING,
77
- labelKey: 'banner.settingName',
78
- name: 'banners',
77
+ labelKey: 'branding.label',
78
+ name: 'brand',
79
79
  namespaced: false,
80
80
  weight: 98,
81
81
  icon: 'folder',
82
- route: { name: 'c-cluster-settings-banners' }
82
+ route: { name: 'c-cluster-settings-brand' }
83
83
  });
84
84
 
85
85
  virtualType({
@@ -102,13 +102,24 @@ export function init(store) {
102
102
  route: { name: 'c-cluster-settings-links' }
103
103
  });
104
104
 
105
+ virtualType({
106
+ ifHaveType: FLEET.GIT_REPO,
107
+ labelKey: 'fleet.settings.label',
108
+ name: 'fleet-settings',
109
+ namespaced: false,
110
+ weight: 95,
111
+ icon: 'folder',
112
+ route: { name: 'c-cluster-settings-fleet' }
113
+ });
114
+
105
115
  basicType([
106
116
  'settings',
107
117
  'features',
108
118
  'brand',
109
119
  'banners',
110
120
  'performance',
111
- 'links'
121
+ 'links',
122
+ 'fleet-settings'
112
123
  ]);
113
124
 
114
125
  configureType(MANAGEMENT.SETTING, {
@@ -79,3 +79,16 @@ export const CLOUD_CREDENTIAL = 'cloud';
79
79
  // NAMESPACE/PROJECT
80
80
  export const PROJECT_ID = 'projectId';
81
81
  export const FLAT_VIEW = 'flatView';
82
+
83
+ /**
84
+ * Used on the secret create/edit page to determine
85
+ * 1. if the user is creating a normal secret, or a project scoped secret
86
+ * 2. where to return the user on cancel/save
87
+ */
88
+ export const SECRET_QUERY_PARAMS = {
89
+ NAMESPACED: 'namespaced',
90
+ PROJECT_SCOPED: 'project-scoped'
91
+ };
92
+ export const SECRET_SCOPE = 'scope';
93
+ // RANCHER OIDC CLIENT
94
+ export const RANCHER_AS_OIDC_QUERY_PARAMS = ['scope', 'client_id', 'redirect_uri', 'response_type'];
package/config/roles.ts CHANGED
@@ -264,7 +264,7 @@ export const SCOPED_RESOURCES = {
264
264
  'Jobs',
265
265
  ]
266
266
  },
267
- 'cis.cattle.io': {
267
+ 'compliance.cattle.io': {
268
268
  resources: [
269
269
  'ClusterScans',
270
270
  'ClusterScanReports'
@@ -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,15 @@
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 {
5
+ CAPI, MANAGEMENT, BACKUP_RESTORE, COMPLIANCE, VIRTUAL_TYPES
6
+ } from '@shell/config/types';
5
7
  import { NAME as AUTH } from '@shell/config/product/auth';
6
8
 
7
9
  // All these imports are related to the install-redirect.js navigation guard.
8
10
  import { installRedirectRouteMeta } from '@shell/config/router/navigation-guards/install-redirect';
9
11
  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';
12
+ import { NAME as COMPLIANCE_NAME, CHART_NAME as COMPLIANCE_CHART_NAME } from '@shell/config/product/compliance';
11
13
  import { NAME as GATEKEEPER_NAME, CHART_NAME as GATEKEEPER_CHART_NAME } from '@shell/config/product/gatekeeper';
12
14
  import { NAME as ISTIO_NAME, CHART_NAME as ISTIO_CHART_NAME } from '@shell/config/product/istio';
13
15
  import { NAME as LOGGING_NAME, CHART_NAME as LOGGING_CHART_NAME } from '@shell/config/product/logging';
@@ -207,17 +209,25 @@ export default [
207
209
  name: 'c-cluster-backup',
208
210
  meta: { ...installRedirectRouteMeta(BACKUP_NAME, BACKUP_CHART_NAME, BACKUP_RESTORE.BACKUP) }
209
211
  }, {
210
- path: '/c/:cluster/cis',
211
- name: 'c-cluster-cis',
212
- meta: { ...installRedirectRouteMeta(CIS_NAME, CIS_CHART_NAME, CIS.CLUSTER_SCAN) }
212
+ path: '/c/:cluster/compliance',
213
+ name: 'c-cluster-compliance',
214
+ meta: { ...installRedirectRouteMeta(COMPLIANCE_NAME, COMPLIANCE_CHART_NAME, COMPLIANCE.CLUSTER_SCAN) }
213
215
  }, {
214
216
  path: '/c/:cluster/fleet',
215
217
  component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/index.vue')),
216
218
  name: 'c-cluster-fleet',
219
+ meta: {
220
+ detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
221
+ doneOverride: 'c-cluster-fleet',
222
+ },
217
223
  }, {
218
224
  path: '/c/:cluster/fleet/application',
219
225
  component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/index.vue')),
220
226
  name: 'c-cluster-fleet-application',
227
+ meta: {
228
+ detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
229
+ doneOverride: 'c-cluster-fleet-application',
230
+ },
221
231
  }, {
222
232
  path: '/c/:cluster/fleet/application/create',
223
233
  component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/create.vue')),
@@ -225,11 +235,19 @@ export default [
225
235
  }, {
226
236
  path: '/c/:cluster/fleet/application/:resource/create',
227
237
  component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/create.vue')),
228
- name: 'c-cluster-fleet-application-resource-create'
238
+ name: 'c-cluster-fleet-application-resource-create',
239
+ meta: {
240
+ detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
241
+ doneOverride: 'c-cluster-fleet-application',
242
+ },
229
243
  }, {
230
244
  path: '/c/:cluster/fleet/application/:resource/:namespace/:id?',
231
245
  component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/application/_resource/_id.vue')),
232
- name: 'c-cluster-fleet-application-resource-namespace-id'
246
+ name: 'c-cluster-fleet-application-resource-namespace-id',
247
+ meta: {
248
+ detailLocation: 'c-cluster-fleet-application-resource-namespace-id',
249
+ doneOverride: 'c-cluster-fleet-application'
250
+ },
233
251
  }, {
234
252
  path: '/c/:cluster/gatekeeper',
235
253
  component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/index.vue')),
@@ -240,18 +258,6 @@ export default [
240
258
  component: () => interopDefault(import('@shell/pages/c/_cluster/istio/index.vue')),
241
259
  name: 'c-cluster-istio',
242
260
  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
261
  }, {
256
262
  path: '/c/:cluster/logging',
257
263
  component: () => interopDefault(import('@shell/pages/c/_cluster/logging/index.vue')),
@@ -309,6 +315,20 @@ export default [
309
315
  component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/install.vue')),
310
316
  name: 'c-cluster-apps-charts-install',
311
317
  },
318
+ {
319
+ path: '/c/:cluster/apps/catalog.cattle.io.clusterrepo',
320
+ name: 'c-cluster-apps-catalog-repo',
321
+ redirect(to) {
322
+ return {
323
+ name: 'c-cluster-product-resource',
324
+ params: {
325
+ ...to.params,
326
+ product: APPS,
327
+ resource: 'catalog.cattle.io.clusterrepo',
328
+ }
329
+ };
330
+ },
331
+ },
312
332
  ]
313
333
  },
314
334
  {
@@ -331,10 +351,6 @@ export default [
331
351
  path: '/c/:cluster/gatekeeper/constraints',
332
352
  component: () => interopDefault(import('@shell/pages/c/_cluster/gatekeeper/constraints/index.vue')),
333
353
  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
354
  }, {
339
355
  path: '/c/:cluster/manager/cloudCredential',
340
356
  component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/index.vue')),
@@ -379,6 +395,10 @@ export default [
379
395
  path: '/c/:cluster/settings/performance',
380
396
  component: () => interopDefault(import('@shell/pages/c/_cluster/settings/performance.vue')),
381
397
  name: 'c-cluster-settings-performance'
398
+ }, {
399
+ path: '/c/:cluster/settings/fleet',
400
+ component: () => interopDefault(import('@shell/pages/c/_cluster/fleet/settings/index.vue')),
401
+ name: 'c-cluster-settings-fleet'
382
402
  }, {
383
403
  path: '/c/:cluster/auth/group.principal/assign-edit',
384
404
  component: () => interopDefault(import('@shell/pages/c/_cluster/auth/group.principal/assign-edit.vue')),
@@ -416,14 +436,6 @@ export default [
416
436
  path: '/c/:cluster/auth/config/:id',
417
437
  component: () => interopDefault(import('@shell/pages/c/_cluster/auth/config/_id.vue')),
418
438
  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
439
  }, {
428
440
  path: '/c/:cluster/manager/cloudCredential/:id',
429
441
  component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/_id.vue')),
@@ -497,6 +509,10 @@ export default [
497
509
  component: () => interopDefault(import('@shell/pages/c/_cluster/_product/_resource/_id.vue')),
498
510
  name: 'c-cluster-product-resource-id',
499
511
  meta: { asyncSetup: true }
512
+ }, {
513
+ path: `/c/:cluster/:product/${ VIRTUAL_TYPES.PROJECT_SECRETS }/:namespace/:id`,
514
+ component: () => interopDefault(import(`@shell/pages/c/_cluster/explorer/${ VIRTUAL_TYPES.PROJECT_SECRETS }.vue`)),
515
+ name: `c-cluster-product-${ VIRTUAL_TYPES.PROJECT_SECRETS }-namespace-id`,
500
516
  }, {
501
517
  path: '/c/:cluster/:product/:resource/:namespace/:id',
502
518
  component: () => interopDefault(import('@shell/pages/c/_cluster/_product/_resource/_namespace/_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
+ 'compliance-operator-system',
16
16
  'istio-system',
17
17
  'longhorn-system',
18
18
  ];
@@ -1,4 +1,4 @@
1
- import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
1
+ import { CATTLE_PUBLIC_ENDPOINTS, UI_PROJECT_SECRET_COPY } from '@shell/config/labels-annotations';
2
2
  import { NODE as NODE_TYPE } from '@shell/config/types';
3
3
  import { COLUMN_BREAKPOINTS } from '@shell/types/store/type-map';
4
4
 
@@ -383,6 +383,29 @@ export const SECRET_DATA = {
383
383
  formatter: 'SecretData'
384
384
  };
385
385
 
386
+ export const SECRET_CLONE = {
387
+ name: 'secret-clone',
388
+ labelKey: 'tableHeaders.secret.project-clone',
389
+ tooltip: 'tableHeaders.secret.project-clone-tooltip',
390
+ value: 'isProjectSecretCopy',
391
+ sort: `metadata.annotations."${ UI_PROJECT_SECRET_COPY }"`,
392
+ search: false,
393
+ formatter: 'Checked',
394
+ };
395
+
396
+ export const SECRET_PROJECT_SCOPED = {
397
+ name: 'secret-project-scoped',
398
+ labelKey: 'tableHeaders.secret.project-scoped',
399
+ tooltip: 'tableHeaders.secret.project-scoped-tooltip',
400
+ value: 'clusterAndProjectLabel',
401
+ // Cannot _sort_ upstream secrets by if they are cluster scoped
402
+ // https://github.com/rancher/rancher/issues/51001
403
+ // metadata.labels[management.cattle.io/project-scoped-secret] - covers both cluster scoped AND clones
404
+ // metadata.annotations[management.cattle.io/project-scoped-secret-copy]
405
+ // sort: [`metadata.labels[${ UI_PROJECT_SECRET }]`, `metadata.annotations[${ UI_PROJECT_SECRET_COPY }]`],
406
+ search: false,
407
+ };
408
+
386
409
  export const TARGET_KIND = {
387
410
  name: 'target-kind',
388
411
  labelKey: 'tableHeaders.targetKind',
@@ -784,7 +807,7 @@ export const FLEET_APPLICATION_TARGET = {
784
807
  name: 'applicationTarget',
785
808
  labelKey: 'fleet.tableHeaders.applicationTarget',
786
809
  value: 'targetInfo.modeDisplay',
787
- sort: ['targetInfo.modeDisplay', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
810
+ sort: ['targetInfo.modeDisplay'],
788
811
  };
789
812
 
790
813
  export const FLEET_APPLICATION_CLUSTERS_READY = {
@@ -1102,7 +1125,7 @@ export const FLEET_REPO_TARGET = {
1102
1125
  name: 'target',
1103
1126
  labelKey: 'tableHeaders.target',
1104
1127
  value: 'targetInfo.modeDisplay',
1105
- sort: ['targetInfo.modeDisplay', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
1128
+ sort: ['targetInfo.modeDisplay'],
1106
1129
  };
1107
1130
 
1108
1131
  export const FLEET_REPO = {
@@ -1145,3 +1168,9 @@ export const UI_PLUGIN_CATALOG = [
1145
1168
  value: 'repo.metadata.name'
1146
1169
  }
1147
1170
  ];
1171
+
1172
+ // SECRETS
1173
+ export const PROJECT = {
1174
+ name: 'project',
1175
+ labelKey: 'tableHeaders.project',
1176
+ };
package/config/types.js CHANGED
@@ -14,7 +14,6 @@ export const STEVE = {
14
14
  export const NORMAN = {
15
15
  APP: 'app',
16
16
  AUTH_CONFIG: 'authconfig',
17
- ETCD_BACKUP: 'etcdbackup',
18
17
  CLUSTER: 'cluster',
19
18
  CLUSTER_TOKEN: 'clusterregistrationtoken',
20
19
  CLUSTER_ROLE_TEMPLATE_BINDING: 'clusterroletemplatebinding',
@@ -134,6 +133,14 @@ export const CATALOG = {
134
133
  REPO: 'catalog.cattle.io.repo',
135
134
  };
136
135
 
136
+ // Charts/Apps
137
+ export const CATALOG_SORT_OPTIONS = {
138
+ RECOMMENDED: 'recommended',
139
+ LAST_UPDATED_DESC: 'lastupdatedDescending',
140
+ ALPHABETICAL_ASC: 'alphaAscending',
141
+ ALPHABETICAL_DESC: 'alphaDescending'
142
+ };
143
+
137
144
  // UI Plugin type
138
145
  export const UI_PLUGIN = 'catalog.cattle.io.uiplugin';
139
146
 
@@ -211,7 +218,8 @@ export const MANAGEMENT = {
211
218
  GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
212
219
  RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
213
220
  RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
214
- CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig'
221
+ CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig',
222
+ OIDC_CLIENT: 'management.cattle.io.oidcclient'
215
223
  };
216
224
 
217
225
  export const CAPI = {
@@ -294,11 +302,11 @@ export const BACKUP_RESTORE = {
294
302
  RESTORE: 'resources.cattle.io.restore',
295
303
  };
296
304
 
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'
305
+ export const COMPLIANCE = {
306
+ CLUSTER_SCAN: 'compliance.cattle.io.clusterscan',
307
+ CLUSTER_SCAN_PROFILE: 'compliance.cattle.io.clusterscanprofile',
308
+ BENCHMARK: 'compliance.cattle.io.clusterscanbenchmark',
309
+ REPORT: 'compliance.cattle.io.clusterscanreport'
302
310
  };
303
311
 
304
312
  export const UI = { NAV_LINK: 'ui.cattle.io.navlink' };
@@ -307,6 +315,7 @@ export const VIRTUAL_TYPES = {
307
315
  CLUSTER_MEMBERS: 'cluster-members',
308
316
  PROJECT_NAMESPACES: 'projects-namespaces',
309
317
  NAMESPACES: 'namespaces',
318
+ PROJECT_SECRETS: 'projectsecret',
310
319
  JWT_AUTHENTICATION: 'jwt.authentication'
311
320
  };
312
321
 
package/config/version.js CHANGED
@@ -30,4 +30,4 @@ export function setKubeVersionData(v) {
30
30
  _kubeVersionData = JSON.parse(JSON.stringify(v));
31
31
  }
32
32
 
33
- export const CURRENT_RANCHER_VERSION = '2.11';
33
+ export const CURRENT_RANCHER_VERSION = '2.12';
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