@rancher/shell 0.5.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +2 -0
  7. package/assets/styles/themes/_csp.scss +2 -2
  8. package/assets/styles/themes/_dark.scss +8 -2
  9. package/assets/styles/themes/_light.scss +2 -1
  10. package/assets/styles/themes/_suse.scss +1 -1
  11. package/assets/styles/vendor/vue-select.scss +5 -0
  12. package/assets/translations/en-us.yaml +296 -58
  13. package/assets/translations/zh-hans.yaml +5 -27
  14. package/babel.config.js +1 -1
  15. package/chart/__tests__/S3.test.ts +9 -2
  16. package/chart/monitoring/grafana/index.vue +6 -2
  17. package/chart/monitoring/prometheus/index.vue +2 -2
  18. package/chart/rancher-backup/S3.vue +11 -9
  19. package/chart/rancher-backup/index.vue +15 -5
  20. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  21. package/cloud-credential/generic.vue +18 -9
  22. package/cloud-credential/harvester.vue +11 -3
  23. package/components/AppModal.vue +167 -0
  24. package/components/AssignTo.vue +7 -4
  25. package/components/AsyncButton.vue +18 -5
  26. package/components/BackLink.vue +4 -4
  27. package/components/BannerGraphic.vue +1 -0
  28. package/components/BrandImage.vue +47 -1
  29. package/components/Carousel.vue +14 -8
  30. package/components/Certificates.vue +8 -11
  31. package/components/ClusterBadge.vue +12 -3
  32. package/components/ClusterIconMenu.vue +44 -16
  33. package/components/ClusterProviderIcon.vue +14 -3
  34. package/components/CodeMirror.vue +73 -38
  35. package/components/CommunityLinks.vue +12 -8
  36. package/components/CreateDriver.vue +81 -0
  37. package/components/CruResource.vue +51 -27
  38. package/components/DetailTop.vue +2 -2
  39. package/components/Dialog.vue +6 -5
  40. package/components/DisableAuthProviderModal.vue +14 -8
  41. package/components/DraggableZone.vue +2 -2
  42. package/components/ExplorerMembers.vue +3 -3
  43. package/components/ExplorerProjectsNamespaces.vue +6 -6
  44. package/components/FixedBanner.vue +47 -36
  45. package/components/GlobalRoleBindings.vue +26 -0
  46. package/components/Import.vue +10 -6
  47. package/components/Inactivity.vue +1 -5
  48. package/components/KeyValueView.vue +14 -10
  49. package/components/MessageLink.vue +2 -2
  50. package/components/ModalWithCard.vue +5 -8
  51. package/components/MoveModal.vue +35 -33
  52. package/components/PodSecurityAdmission.vue +3 -3
  53. package/components/PromptChangePassword.vue +33 -33
  54. package/components/PromptModal.vue +11 -21
  55. package/components/PromptRemove.vue +11 -17
  56. package/components/PromptRestore.vue +18 -16
  57. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  58. package/components/Questions/__tests__/Float.test.ts +9 -19
  59. package/components/Questions/__tests__/Int.test.ts +9 -19
  60. package/components/Questions/__tests__/String.test.ts +9 -19
  61. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  62. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  63. package/components/Questions/index.vue +18 -2
  64. package/components/ResourceCancelModal.vue +34 -29
  65. package/components/ResourceDetail/Masthead.vue +23 -7
  66. package/components/ResourceDetail/index.vue +5 -0
  67. package/components/ResourceList/Masthead.vue +28 -10
  68. package/components/ResourceList/index.vue +65 -14
  69. package/components/ResourceTable.vue +73 -19
  70. package/components/ResourceYaml.vue +1 -0
  71. package/components/SelectIconGrid.vue +3 -3
  72. package/components/SideNav.vue +15 -37
  73. package/components/SingleClusterInfo.vue +4 -4
  74. package/components/SortableTable/THead.vue +26 -12
  75. package/components/SortableTable/filtering.js +9 -1
  76. package/components/SortableTable/grouping.js +8 -1
  77. package/components/SortableTable/index.vue +142 -42
  78. package/components/SortableTable/paging.js +36 -7
  79. package/components/SortableTable/selection.js +2 -1
  80. package/components/SortableTable/sorting.js +24 -7
  81. package/components/TabTitle.vue +84 -0
  82. package/components/Tabbed/index.vue +6 -1
  83. package/components/TableDataUserIcon.vue +47 -0
  84. package/components/TypeDescription.vue +1 -0
  85. package/components/Wizard.vue +1 -0
  86. package/components/__tests__/AppModal.test.ts +98 -0
  87. package/components/__tests__/AsyncButton.test.ts +1 -3
  88. package/components/__tests__/BackLink.test.ts +1 -1
  89. package/components/__tests__/ButtonGroup.test.ts +3 -6
  90. package/components/__tests__/Carousel.test.ts +43 -0
  91. package/components/__tests__/Certificates.test.ts +29 -0
  92. package/components/__tests__/{CodeMirror.spec.ts → CodeMirror.test.ts} +5 -17
  93. package/components/__tests__/CruResource.test.ts +10 -9
  94. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  95. package/components/__tests__/FixedBanner.test.ts +5 -20
  96. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  97. package/components/__tests__/TabTitle.test.ts +129 -0
  98. package/components/auth/AzureWarning.vue +2 -2
  99. package/components/auth/RoleDetailEdit.vue +10 -0
  100. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  101. package/components/auth/login/oidc.vue +7 -1
  102. package/components/fleet/FleetClusters.vue +9 -9
  103. package/components/fleet/FleetIntro.vue +11 -17
  104. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  105. package/components/fleet/FleetRepos.vue +1 -0
  106. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  107. package/components/form/ArrayList.vue +30 -19
  108. package/components/form/ArrayListSelect.vue +9 -4
  109. package/components/form/ClusterAppearance.vue +132 -0
  110. package/components/form/ColorInput.vue +1 -0
  111. package/components/form/Error.vue +3 -3
  112. package/components/form/Footer.vue +2 -2
  113. package/components/form/GitPicker.vue +83 -38
  114. package/components/form/KeyValue.vue +67 -48
  115. package/components/form/LabeledSelect.vue +143 -43
  116. package/components/form/Labels.vue +3 -1
  117. package/components/form/NameNsDescription.vue +26 -9
  118. package/components/form/ResourceLabeledSelect.vue +187 -0
  119. package/components/form/ResourceTabs/index.vue +31 -15
  120. package/components/form/SecretSelector.vue +93 -18
  121. package/components/form/Select.vue +1 -1
  122. package/components/form/SelectOrCreateAuthSecret.vue +135 -62
  123. package/components/form/SimpleSecretSelector.vue +88 -28
  124. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  125. package/components/form/__tests__/KeyValue.test.ts +121 -12
  126. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  127. package/components/form/__tests__/NameNsDescription.test.ts +25 -15
  128. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  129. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  130. package/components/formatter/AppSummaryGraph.vue +2 -2
  131. package/components/formatter/CloudCredPublicData.vue +30 -0
  132. package/components/formatter/ClusterLink.vue +2 -2
  133. package/components/formatter/FleetSummaryGraph.vue +2 -1
  134. package/components/formatter/ImagePercentageBar.vue +0 -4
  135. package/components/formatter/IngressTarget.vue +18 -7
  136. package/components/formatter/Link.vue +2 -2
  137. package/components/formatter/LinkDetail.vue +2 -2
  138. package/components/formatter/LinkDetailImage.vue +2 -2
  139. package/components/formatter/LinkName.vue +2 -2
  140. package/components/formatter/LiveDate.vue +16 -0
  141. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  142. package/components/formatter/SecretType.vue +2 -2
  143. package/components/formatter/VirtualServiceGateways.vue +2 -2
  144. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  145. package/components/nav/Group.vue +7 -5
  146. package/components/nav/Header.vue +82 -43
  147. package/components/nav/NamespaceFilter.vue +8 -1
  148. package/components/nav/TopLevelMenu.vue +336 -125
  149. package/components/nav/Type.vue +58 -102
  150. package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
  151. package/components/nav/__tests__/Type.test.ts +321 -126
  152. package/components/nuxt/nuxt-child.js +0 -5
  153. package/components/nuxt/nuxt-error.vue +1 -1
  154. package/components/nuxt/nuxt-link.client.js +13 -95
  155. package/components/templates/default.vue +3 -3
  156. package/components/templates/error.vue +6 -10
  157. package/components/templates/standalone.vue +0 -4
  158. package/components/templates/unauthenticated.vue +1 -2
  159. package/components/user.retention/user-retention-header.vue +34 -0
  160. package/composables/useCompactInput.test.ts +36 -0
  161. package/composables/useCompactInput.ts +2 -2
  162. package/composables/useI18n.ts +26 -0
  163. package/composables/useLabeledFormElement.test.ts +135 -0
  164. package/composables/useStore.ts +16 -0
  165. package/config/home-links.js +32 -1
  166. package/config/labels-annotations.js +2 -1
  167. package/config/middleware.js +0 -6
  168. package/config/pagination-table-headers.js +57 -0
  169. package/config/pod-security-admission.ts +1 -1
  170. package/config/private-label.js +1 -3
  171. package/config/product/auth.js +1 -0
  172. package/config/product/explorer.js +167 -46
  173. package/config/product/legacy.js +3 -95
  174. package/config/product/manager.js +44 -11
  175. package/config/query-params.js +1 -0
  176. package/config/roles.ts +23 -0
  177. package/config/router/index.js +23 -0
  178. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  179. package/config/router/navigation-guards/authentication.js +63 -0
  180. package/config/router/navigation-guards/index.js +15 -0
  181. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  182. package/config/router/routes.js +487 -0
  183. package/config/settings.ts +38 -2
  184. package/config/store.js +7 -3
  185. package/config/table-headers.js +46 -1
  186. package/config/types.js +36 -16
  187. package/config/uiplugins.js +10 -5
  188. package/core/plugin-helpers.js +1 -1
  189. package/core/plugin.ts +2 -1
  190. package/core/plugins.js +289 -282
  191. package/creators/app/files/.eslintignore +0 -2
  192. package/creators/app/files/.vscode/settings.json +0 -1
  193. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  194. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  195. package/creators/pkg/init +32 -0
  196. package/detail/__tests__/service.test.ts +62 -0
  197. package/detail/catalog.cattle.io.app.vue +1 -1
  198. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  199. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  200. package/detail/namespace.vue +2 -2
  201. package/detail/networking.k8s.io.ingress.vue +52 -19
  202. package/detail/node.vue +20 -43
  203. package/detail/pod.vue +1 -68
  204. package/detail/provisioning.cattle.io.cluster.vue +2 -1
  205. package/detail/service.vue +1 -1
  206. package/detail/workload/index.vue +2 -15
  207. package/dialog/AddCustomBadgeDialog.vue +318 -161
  208. package/dialog/DeactivateDriverDialog.vue +118 -0
  209. package/dialog/RollbackWorkloadDialog.vue +2 -2
  210. package/dialog/RotateCertificatesDialog.vue +0 -21
  211. package/directives/clean-html.js +15 -0
  212. package/directives/clean-tooltip.js +32 -0
  213. package/directives/focus.js +41 -0
  214. package/directives/int-number.js +21 -0
  215. package/directives/positive-int-number.js +19 -0
  216. package/directives/trim-whitespace.js +19 -0
  217. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  218. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  219. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  220. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  221. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  222. package/edit/__tests__/nodeDriver.test.ts +107 -0
  223. package/edit/__tests__/service.test.ts +1 -5
  224. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  225. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  226. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  227. package/edit/auth/__tests__/azuread.test.ts +241 -0
  228. package/edit/auth/__tests__/oidc.test.ts +137 -0
  229. package/edit/auth/azuread.vue +133 -31
  230. package/edit/auth/github.vue +5 -17
  231. package/edit/auth/googleoauth.vue +5 -18
  232. package/edit/auth/ldap/index.vue +5 -17
  233. package/edit/auth/oidc.vue +143 -42
  234. package/edit/auth/saml.vue +5 -14
  235. package/edit/catalog.cattle.io.clusterrepo.vue +175 -20
  236. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  237. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  238. package/edit/cloudcredential.vue +26 -4
  239. package/edit/configmap.vue +10 -4
  240. package/edit/fleet.cattle.io.gitrepo.vue +7 -4
  241. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  242. package/edit/kontainerDriver.vue +65 -0
  243. package/edit/logging-flow/Match.vue +10 -9
  244. package/edit/logging-flow/index.vue +4 -19
  245. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  246. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  247. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  248. package/edit/management.cattle.io.project.vue +2 -1
  249. package/edit/management.cattle.io.setting.vue +20 -0
  250. package/edit/management.cattle.io.user.vue +2 -1
  251. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  252. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  253. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +1 -0
  254. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
  255. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
  256. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  257. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  258. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  259. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  260. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  261. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  262. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +45 -6
  263. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +1 -1
  264. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  265. package/edit/nodeDriver.vue +65 -0
  266. package/edit/persistentvolume/index.vue +2 -2
  267. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +18 -9
  268. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
  269. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
  270. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
  271. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  272. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
  273. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
  274. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  275. package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
  276. package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
  277. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
  278. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
  279. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  280. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
  281. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
  282. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
  283. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
  284. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
  285. package/edit/resources.cattle.io.backup.vue +139 -124
  286. package/edit/resources.cattle.io.restore.vue +146 -126
  287. package/edit/service.vue +1 -0
  288. package/edit/serviceaccount.vue +46 -4
  289. package/edit/workload/__tests__/Job.test.ts +1 -3
  290. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  291. package/edit/workload/mixins/workload.js +34 -1
  292. package/edit/workload/storage/emptyDir.vue +2 -2
  293. package/initialize/App.vue +75 -0
  294. package/initialize/app-extended.js +128 -0
  295. package/initialize/entry-helpers.js +549 -0
  296. package/initialize/entry.js +32 -0
  297. package/initialize/install-components.js +23 -0
  298. package/initialize/install-directives.js +59 -0
  299. package/initialize/install-plugins.js +123 -0
  300. package/list/__tests__/workload.test.ts +1 -1
  301. package/list/cis.cattle.io.clusterscan.vue +16 -10
  302. package/list/group.principal.vue +2 -2
  303. package/list/management.cattle.io.feature.vue +11 -7
  304. package/list/management.cattle.io.user.vue +36 -3
  305. package/list/networking.k8s.io.ingress.vue +36 -0
  306. package/list/node.vue +211 -73
  307. package/list/provisioning.cattle.io.cluster.vue +17 -4
  308. package/list/ui.cattle.io.navlink.vue +2 -2
  309. package/list/workload.vue +22 -0
  310. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  311. package/machine-config/__tests__/vmwarevsphere.test.ts +162 -59
  312. package/machine-config/amazonec2.vue +1 -1
  313. package/machine-config/azure.vue +38 -21
  314. package/machine-config/generic.vue +11 -15
  315. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  316. package/machine-config/vmwarevsphere.vue +20 -11
  317. package/middleware/authenticated.js +9 -361
  318. package/mixins/__tests__/chart.test.ts +48 -6
  319. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  320. package/mixins/auth-config.js +3 -2
  321. package/mixins/brand.js +75 -57
  322. package/mixins/chart.js +27 -13
  323. package/mixins/create-edit-view/index.js +2 -2
  324. package/mixins/fetch.client.js +42 -48
  325. package/mixins/labeled-form-element.ts +21 -1
  326. package/mixins/page-actions.js +7 -5
  327. package/mixins/resource-fetch-api-pagination.js +304 -0
  328. package/mixins/resource-fetch-namespaced.js +1 -1
  329. package/mixins/resource-fetch.js +46 -5
  330. package/models/__tests__/cluster.test.ts +44 -0
  331. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  332. package/models/__tests__/schema.tests.ts +24 -0
  333. package/models/__tests__/steve-schema.test.ts +73 -0
  334. package/models/__tests__/workload.test.ts +1 -1
  335. package/models/catalog.cattle.io.app.js +8 -0
  336. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  337. package/models/catalog.cattle.io.uiplugin.js +7 -8
  338. package/models/cis.cattle.io.clusterscan.js +29 -8
  339. package/models/cloudcredential.js +9 -1
  340. package/models/cluster/node.js +4 -0
  341. package/models/cluster/schema.js +6 -0
  342. package/models/cluster.js +33 -0
  343. package/models/driver.js +62 -0
  344. package/models/fleet.cattle.io.cluster.js +23 -11
  345. package/models/fleet.cattle.io.gitrepo.js +10 -0
  346. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  347. package/models/kontainerdriver.js +68 -0
  348. package/models/management/schema.js +6 -0
  349. package/models/management.cattle.io.authconfig.js +3 -2
  350. package/models/management.cattle.io.cluster.js +5 -4
  351. package/models/management.cattle.io.globalrole.js +2 -0
  352. package/models/management.cattle.io.user.js +67 -2
  353. package/models/monitoring.coreos.com.receiver.js +3 -1
  354. package/models/monitoring.coreos.com.route.js +1 -1
  355. package/models/networking.k8s.io.ingress.js +2 -1
  356. package/models/nodedriver.js +68 -0
  357. package/models/provisioning.cattle.io.cluster.js +34 -1
  358. package/models/schema.js +28 -7
  359. package/models/service.js +2 -0
  360. package/models/steve-schema.ts +254 -0
  361. package/models/workload.js +1 -0
  362. package/package.json +6 -5
  363. package/pages/about.vue +12 -5
  364. package/pages/account/index.vue +7 -2
  365. package/pages/auth/login.vue +106 -102
  366. package/pages/auth/logout.vue +2 -2
  367. package/pages/auth/setup.vue +57 -64
  368. package/pages/auth/verify.vue +17 -17
  369. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  370. package/pages/c/_cluster/apps/charts/index.vue +37 -13
  371. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  372. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  373. package/pages/c/_cluster/auth/config/index.vue +15 -9
  374. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  375. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  376. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  377. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  378. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  379. package/pages/c/_cluster/explorer/index.vue +231 -72
  380. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  381. package/pages/c/_cluster/explorer/tools/index.vue +12 -176
  382. package/pages/c/_cluster/fleet/index.vue +88 -93
  383. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  384. package/pages/c/_cluster/longhorn/index.vue +52 -17
  385. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  386. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  387. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  388. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
  389. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  390. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  391. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
  392. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  393. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  394. package/pages/c/_cluster/monitoring/index.vue +1 -17
  395. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  396. package/pages/c/_cluster/neuvector/index.vue +1 -0
  397. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  398. package/pages/c/_cluster/settings/banners.vue +86 -8
  399. package/pages/c/_cluster/settings/brand.vue +258 -36
  400. package/pages/c/_cluster/settings/index.vue +4 -4
  401. package/pages/c/_cluster/settings/links.vue +5 -3
  402. package/pages/c/_cluster/settings/performance.vue +71 -2
  403. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  404. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
  405. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  406. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  407. package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
  408. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  409. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  410. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  411. package/pages/c/_cluster/uiplugins/index.vue +38 -52
  412. package/pages/diagnostic.vue +1 -0
  413. package/pages/fail-whale.vue +103 -41
  414. package/pages/home.vue +81 -24
  415. package/pages/prefs.vue +8 -3
  416. package/pages/support/index.vue +12 -2
  417. package/plugins/clean-html-directive.js +5 -12
  418. package/plugins/clean-tooltip-directive.js +6 -31
  419. package/plugins/codemirror.js +0 -9
  420. package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
  421. package/plugins/dashboard-store/actions.js +140 -32
  422. package/plugins/dashboard-store/getters.js +86 -39
  423. package/plugins/dashboard-store/index.js +0 -99
  424. package/plugins/dashboard-store/mutations.js +150 -48
  425. package/plugins/dashboard-store/resource-class.js +14 -109
  426. package/plugins/directives.js +6 -39
  427. package/plugins/ember-cookie.js +13 -0
  428. package/plugins/global-formatters.js +26 -5
  429. package/plugins/i18n.js +90 -56
  430. package/plugins/int-number.js +6 -20
  431. package/plugins/plugin.js +3 -3
  432. package/plugins/positive-int-number.js +6 -17
  433. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +124 -31
  434. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  435. package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
  436. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  437. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  438. package/plugins/steve/actions.js +0 -1
  439. package/plugins/steve/getters.js +183 -63
  440. package/plugins/steve/hybrid-class.js +5 -1
  441. package/plugins/steve/mutations.js +29 -5
  442. package/plugins/steve/norman-class.js +123 -2
  443. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  444. package/plugins/steve/schema.d.ts +22 -0
  445. package/plugins/steve/steve-pagination-utils.ts +368 -0
  446. package/plugins/steve/subscribe.js +37 -75
  447. package/plugins/trim-whitespace.js +6 -34
  448. package/plugins/vue-js-modal.js +1 -1
  449. package/public/index.html +1 -0
  450. package/rancher-components/Accordion/Accordion.vue +3 -2
  451. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  452. package/rancher-components/Banner/Banner.test.ts +1 -5
  453. package/rancher-components/Banner/Banner.vue +2 -2
  454. package/rancher-components/Card/Card.vue +4 -4
  455. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  456. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  457. package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
  458. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  459. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  460. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  461. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  462. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  463. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  464. package/rancher-components/StringList/StringList.vue +8 -8
  465. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  466. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  467. package/rancher-components/components/Banner/Banner.test.ts +1 -5
  468. package/rancher-components/components/Banner/Banner.vue +2 -2
  469. package/rancher-components/components/Card/Card.vue +4 -4
  470. package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
  471. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  472. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
  473. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
  474. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  475. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  476. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  477. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  478. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  479. package/rancher-components/components/StringList/StringList.vue +8 -8
  480. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
  481. package/scripts/clean +1 -1
  482. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  483. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  484. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  485. package/scripts/extension/helm/package/Dockerfile +1 -1
  486. package/scripts/extension/helm/scripts/patch +27 -0
  487. package/scripts/extension/publish +6 -6
  488. package/scripts/serve-pkgs +0 -2
  489. package/scripts/test-plugins-build.sh +6 -6
  490. package/scripts/vue-migrate.js +683 -0
  491. package/store/__tests__/catalog.test.ts +224 -0
  492. package/store/auth.js +23 -4
  493. package/store/aws.js +53 -6
  494. package/store/catalog.js +21 -5
  495. package/store/cru-resource.ts +26 -0
  496. package/store/customisation.js +35 -0
  497. package/store/features.js +6 -4
  498. package/store/index.js +132 -39
  499. package/store/plugins.js +8 -4
  500. package/store/type-map.js +143 -143
  501. package/store/type-map.utils.ts +226 -0
  502. package/tsconfig.json +0 -1
  503. package/tsconfig.paths.json +4 -1
  504. package/types/components/labeledSelect.ts +50 -0
  505. package/types/resources/settings.d.ts +32 -0
  506. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  507. package/types/shell/index.d.ts +996 -782
  508. package/types/store/dashboard-store.types.ts +42 -0
  509. package/types/store/pagination.types.ts +457 -0
  510. package/types/store/type-map.ts +30 -0
  511. package/types/store/vuex.d.ts +9 -0
  512. package/types/vue-shim.d.ts +51 -0
  513. package/utils/__tests__/cluster.test.ts +20 -18
  514. package/utils/__tests__/create-yaml.test.ts +359 -2
  515. package/utils/__tests__/kontainer.test.ts +92 -0
  516. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  517. package/utils/alertmanagerconfig.js +19 -0
  518. package/utils/array.ts +40 -1
  519. package/utils/async.ts +2 -0
  520. package/utils/auth.js +152 -4
  521. package/utils/axios.js +2 -2
  522. package/utils/banners.js +103 -0
  523. package/utils/cluster.js +1 -1
  524. package/utils/config.js +4 -0
  525. package/utils/create-yaml.js +54 -27
  526. package/utils/error.js +25 -0
  527. package/utils/formatter.js +5 -3
  528. package/utils/git.ts +1 -1
  529. package/utils/install-redirect.js +1 -1
  530. package/utils/kontainer.ts +186 -0
  531. package/utils/monitoring.js +2 -37
  532. package/utils/pagination-utils.ts +154 -0
  533. package/utils/pod-security-admission.ts +1 -1
  534. package/utils/router.js +86 -0
  535. package/utils/settings.ts +46 -0
  536. package/utils/socket.js +1 -0
  537. package/utils/time.js +1 -0
  538. package/utils/title.ts +3 -0
  539. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  540. package/utils/validators/formRules/__tests__/index.test.ts +21 -0
  541. package/utils/validators/formRules/index.ts +3 -0
  542. package/utils/validators/index.js +1 -0
  543. package/vue.config.js +376 -421
  544. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  545. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  546. package/components/EventsTable.vue +0 -67
  547. package/components/TabbedLinks/index.vue +0 -94
  548. package/components/nuxt/nuxt-link.server.js +0 -16
  549. package/components/nuxt/nuxt.js +0 -101
  550. package/config/router.js +0 -425
  551. package/initialize/App.js +0 -152
  552. package/initialize/client.js +0 -734
  553. package/initialize/index.js +0 -287
  554. package/middleware/i18n.js +0 -10
  555. package/middleware/unauthenticated.js +0 -22
  556. package/mixins/v1-workload-metrics.js +0 -43
  557. package/pages/c/_cluster/apps/index.vue +0 -15
  558. package/pages/c/_cluster/auth/index.vue +0 -17
  559. package/pages/c/_cluster/index.vue +0 -15
  560. package/pages/c/_cluster/legacy/index.vue +0 -22
  561. package/pages/c/_cluster/manager/index.vue +0 -22
  562. package/pages/c/_cluster/mcapps/index.vue +0 -21
  563. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  564. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  565. package/plugins/index.js +0 -11
  566. package/plugins/portal-vue.js +0 -4
  567. package/plugins/portal.js +0 -4
  568. package/plugins/resize.js +0 -5
  569. package/plugins/shortkey.js +0 -4
  570. package/plugins/tooltip.js +0 -4
  571. package/plugins/v-select.js +0 -4
  572. package/utils/group.js +0 -70
  573. package/utils/nuxt.js +0 -638
  574. package/utils/router.scrollBehavior.js +0 -78
  575. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  576. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  577. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  578. /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
  579. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  580. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  581. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -1,318 +1,21 @@
1
- import { REDIRECTED } from '@shell/config/cookies';
2
- import { NAME as EXPLORER } from '@shell/config/product/explorer';
3
- import {
4
- SETUP, TIMED_OUT, UPGRADED, _FLAGGED, _UNFLAG
5
- } from '@shell/config/query-params';
6
- import { SETTING } from '@shell/config/settings';
7
- import { MANAGEMENT, NORMAN, DEFAULT_WORKSPACE } from '@shell/config/types';
8
- import { _ALL_IF_AUTHED } from '@shell/plugins/dashboard-store/actions';
1
+ import { DEFAULT_WORKSPACE } from '@shell/config/types';
9
2
  import { applyProducts } from '@shell/store/type-map';
10
- import { findBy } from '@shell/utils/array';
11
3
  import { ClusterNotFoundError, RedirectToError } from '@shell/utils/error';
12
4
  import { get } from '@shell/utils/object';
13
- import { setFavIcon, haveSetFavIcon } from '@shell/utils/favicon';
14
5
  import dynamicPluginLoader from '@shell/pkg/dynamic-plugin-loader';
15
6
  import { AFTER_LOGIN_ROUTE, WORKSPACE } from '@shell/store/prefs';
16
7
  import { BACK_TO } from '@shell/config/local-storage';
17
8
  import { NAME as FLEET_NAME } from '@shell/config/product/fleet.js';
18
- import { canViewResource } from '@shell/utils/auth';
19
-
20
- const getPackageFromRoute = (route) => {
21
- if (!route?.meta) {
22
- return;
23
- }
24
- // Sometimes meta is an array... sometimes not
25
- const arraySafe = Array.isArray(route.meta) ? route.meta : [route.meta];
26
-
27
- return arraySafe.find((m) => !!m.pkg)?.pkg;
28
- };
29
-
30
- const getResourceFromRoute = (to) => {
31
- let resource = to.params?.resource;
32
-
33
- if (!resource) {
34
- resource = findMeta(to, 'resource');
35
- }
36
-
37
- return resource;
38
- };
9
+ import { validateResource, setProduct } from '@shell/utils/auth';
10
+ import { getClusterFromRoute, getProductFromRoute, getPackageFromRoute } from '@shell/utils/router';
39
11
 
40
12
  let beforeEachSetup = false;
41
13
 
42
- function findMeta(route, key) {
43
- if (route?.meta) {
44
- const meta = Array.isArray(route.meta) ? route.meta : [route.meta];
45
-
46
- for (let i = 0; i < meta.length; i++) {
47
- if (meta[i][key]) {
48
- return meta[i][key];
49
- }
50
- }
51
- }
52
-
53
- return undefined;
54
- }
55
-
56
- export function getClusterFromRoute(to) {
57
- let cluster = to.params?.cluster;
58
-
59
- if (!cluster) {
60
- cluster = findMeta(to, 'cluster');
61
- }
62
-
63
- return cluster;
64
- }
65
-
66
- export function getProductFromRoute(to) {
67
- let product = to.params?.product;
68
-
69
- if ( !product ) {
70
- const match = to.name?.match(/^c-cluster-([^-]+)/);
71
-
72
- if ( match ) {
73
- product = match[1];
74
- }
75
- }
76
-
77
- // If still no product, see if the route indicates the product via route metadata
78
- if (!product) {
79
- product = findMeta(to, 'product');
80
- }
81
-
82
- return product;
83
- }
84
-
85
- function setProduct(store, to, redirect) {
86
- let product = getProductFromRoute(to);
87
-
88
- // since all products are hardcoded as routes (ex: c-local-explorer), if we match the wildcard route it means that the product does not exist
89
- if ((product && (!to.matched.length || (to.matched.length && to.matched[0].path === '/c/:cluster/:product'))) ||
90
- // if the product grabbed from the route is not registered, then we don't have it!
91
- (product && !store.getters['type-map/isProductRegistered'](product))) {
92
- store.dispatch('loadingError', new Error(store.getters['i18n/t']('nav.failWhale.productNotFound', { productNotFound: product }, true)));
93
-
94
- return () => redirect(302, '/fail-whale');
95
- }
96
-
97
- if ( !product ) {
98
- product = EXPLORER;
99
- }
100
-
101
- const oldProduct = store.getters['productId'];
102
- const oldStore = store.getters['currentProduct']?.inStore;
103
-
104
- if ( product !== oldProduct ) {
105
- store.commit('setProduct', product);
106
- }
107
-
108
- const neuStore = store.getters['currentProduct']?.inStore;
109
-
110
- if ( neuStore !== oldStore ) {
111
- // If the product store changes, clear the catalog.
112
- // There might be management catalog items in it vs cluster.
113
- store.commit('catalog/reset');
114
- }
115
-
116
- return false;
117
- }
118
-
119
- /**
120
- * Check that the resource is valid, if not redirect to fail whale
121
- *
122
- * This requires that
123
- * - product is set
124
- * - product's store is set and setup (so we can check schema's within it)
125
- * - product's store has the schemaFor getter (extension stores might not have it)
126
- * - there's a resource associated with route (meta or param)
127
- */
128
- function invalidResource(store, to, redirect) {
129
- const product = store.getters['currentProduct'];
130
- const resource = getResourceFromRoute(to);
131
-
132
- // In order to check a resource is valid we need these
133
- if (!product || !resource) {
134
- return false;
135
- }
136
-
137
- if (canViewResource(store, resource)) {
138
- return false;
139
- }
140
-
141
- // Unknown resource, redirect to fail whale
142
-
143
- store.dispatch('loadingError', new Error(store.getters['i18n/t']('nav.failWhale.resourceNotFound', { resource }, true)));
144
-
145
- return () => redirect(302, '/fail-whale');
146
- }
147
-
148
14
  export default async function({
149
- route, app, store, redirect, $cookies, req, isDev, from, $plugin, next
15
+ route, store, redirect, from, $plugin, next
150
16
  }) {
151
- if ( route.path && typeof route.path === 'string') {
152
- // Ignore webpack hot module reload requests
153
- if ( route.path.startsWith('/__webpack_hmr/') ) {
154
- return;
155
- }
156
-
157
- // Ignore the error page
158
- if ( route.path.startsWith('/fail-whale') ) {
159
- return;
160
- }
161
- }
162
-
163
- // This tells Ember not to redirect back to us once you've already been to dashboard once.
164
- if ( !$cookies.get(REDIRECTED) ) {
165
- $cookies.set(REDIRECTED, 'true', {
166
- path: '/',
167
- sameSite: true,
168
- secure: true,
169
- });
170
- }
171
-
172
- const upgraded = route.query[UPGRADED] === _FLAGGED;
173
-
174
- if ( upgraded ) {
175
- app.router.applyQuery({ [UPGRADED]: _UNFLAG });
176
-
177
- store.dispatch('growl/success', {
178
- title: store.getters['i18n/t']('serverUpgrade.title'),
179
- message: store.getters['i18n/t']('serverUpgrade.message'),
180
- timeout: 0,
181
- });
182
- }
183
-
184
- // Initial ?setup=admin-password can technically be on any route
185
- let initialPass = route.query[SETUP];
186
- let firstLogin = null;
187
-
188
- try {
189
- // Load settings, which will either be just the public ones if not logged in, or all if you are
190
- await store.dispatch('management/findAll', {
191
- type: MANAGEMENT.SETTING,
192
- opt: {
193
- load: _ALL_IF_AUTHED, url: `/v1/${ MANAGEMENT.SETTING }`, redirectUnauthorized: false
194
- }
195
- });
196
-
197
- // Set the favicon - use custom one from store if set
198
- if (!haveSetFavIcon()) {
199
- setFavIcon(store);
200
- }
201
-
202
- const res = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FIRST_LOGIN);
203
- const plSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.PL);
204
-
205
- firstLogin = res?.value === 'true';
206
-
207
- if (!initialPass && plSetting?.value === 'Harvester') {
208
- initialPass = 'admin';
209
- }
210
- } catch (e) {
211
- }
212
-
213
- if ( firstLogin === null ) {
214
- try {
215
- const res = await store.dispatch('rancher/find', {
216
- type: 'setting',
217
- id: SETTING.FIRST_LOGIN,
218
- opt: { url: `/v3/settings/${ SETTING.FIRST_LOGIN }` }
219
- });
220
-
221
- firstLogin = res?.value === 'true';
222
-
223
- const plSetting = await store.dispatch('rancher/find', {
224
- type: 'setting',
225
- id: SETTING.PL,
226
- opt: { url: `/v3/settings/${ SETTING.PL }` }
227
- });
228
-
229
- if (!initialPass && plSetting?.value === 'Harvester') {
230
- initialPass = 'admin';
231
- }
232
- } catch (e) {
233
- }
234
- }
235
-
236
- // TODO show error if firstLogin and default pass doesn't work
237
- if ( firstLogin ) {
238
- const ok = await tryInitialSetup(store, initialPass);
239
-
240
- if (ok) {
241
- if (initialPass) {
242
- store.dispatch('auth/setInitialPass', initialPass);
243
- }
244
-
245
- return redirect({ name: 'auth-setup' });
246
- } else {
247
- return redirect({ name: 'auth-login' });
248
- }
249
- }
250
-
251
- // Make sure you're actually logged in
252
- function isLoggedIn(me) {
253
- store.commit('auth/hasAuth', true);
254
- store.commit('auth/loggedInAs', me.id);
255
- }
256
-
257
- function notLoggedIn() {
258
- store.commit('auth/hasAuth', true);
259
-
260
- if ( route.name === 'index' ) {
261
- return redirect(302, '/auth/login');
262
- } else {
263
- return redirect(302, `/auth/login?${ TIMED_OUT }`);
264
- }
265
- }
266
-
267
- function noAuth() {
268
- store.commit('auth/hasAuth', false);
269
- }
270
-
271
17
  if ( store.getters['auth/enabled'] !== false && !store.getters['auth/loggedIn'] ) {
272
- // `await` so we have one successfully request whilst possibly logged in (ensures fromHeader is populated from `x-api-cattle-auth`)
273
- await store.dispatch('auth/getUser');
274
-
275
- const v3User = store.getters['auth/v3User'] || {};
276
-
277
- if (v3User?.mustChangePassword) {
278
- return redirect({ name: 'auth-setup' });
279
- }
280
-
281
- // In newer versions the API calls return the auth state instead of having to make a new call all the time.
282
- const fromHeader = store.getters['auth/fromHeader'];
283
-
284
- if ( fromHeader === 'none' ) {
285
- noAuth();
286
- } else if ( fromHeader === 'true' ) {
287
- const me = await findMe(store);
288
-
289
- isLoggedIn(me);
290
- } else if ( fromHeader === 'false' ) {
291
- notLoggedIn();
292
- } else {
293
- // Older versions look at principals and see what happens
294
- try {
295
- const me = await findMe(store);
296
-
297
- isLoggedIn(me);
298
- } catch (e) {
299
- const status = e?._status;
300
-
301
- if ( status === 404 ) {
302
- noAuth();
303
- } else {
304
- if ( status === 401 ) {
305
- notLoggedIn();
306
- } else {
307
- store.commit('setError', { error: e, locationError: new Error('Auth Middleware') });
308
- }
309
-
310
- return;
311
- }
312
- }
313
- }
314
-
315
- store.dispatch('gcStartIntervals');
18
+ return;
316
19
  }
317
20
 
318
21
  const backTo = window.localStorage.getItem(BACK_TO);
@@ -339,27 +42,13 @@ export default async function({
339
42
 
340
43
  store.app.router.beforeEach((to, from, next) => {
341
44
  // NOTE - This beforeEach runs AFTER this middleware. So anything in this middleware that requires it must set it manually
342
- let redirected = setProduct(store, to, redirect);
343
-
344
- if (redirected) {
345
- return redirected();
346
- }
347
-
348
- redirected = invalidResource(store, to, redirect);
349
-
350
- if (redirected) {
351
- return redirected();
352
- }
45
+ setProduct(store, to);
353
46
 
354
47
  next();
355
48
  });
356
49
 
357
50
  // Call it for the initial pageload
358
- const redirected = setProduct(store, route, redirect);
359
-
360
- if (redirected) {
361
- return redirected();
362
- }
51
+ setProduct(store, route);
363
52
 
364
53
  store.app.router.afterEach((to, from) => {
365
54
  // Clear state used to record if back button was used for navigation
@@ -440,11 +129,7 @@ export default async function({
440
129
  // When fleet moves to it's own package this should be moved to pkg onEnter/onLeave
441
130
  if ((oldProduct === FLEET_NAME || product === FLEET_NAME) && oldProduct !== product) {
442
131
  // See note above for store.app.router.beforeEach, need to setProduct manually, for the moment do this in a targeted way
443
- const redirected = setProduct(store, route, redirect);
444
-
445
- if (redirected) {
446
- return redirected();
447
- }
132
+ setProduct(store, route);
448
133
 
449
134
  store.commit('updateWorkspace', {
450
135
  value: store.getters['prefs/get'](WORKSPACE) || DEFAULT_WORKSPACE,
@@ -467,11 +152,7 @@ export default async function({
467
152
  ]);
468
153
 
469
154
  if (localCheckResource) {
470
- const redirected = invalidResource(store, route, redirect);
471
-
472
- if (redirected) {
473
- return redirected();
474
- }
155
+ validateResource(store, route, redirect);
475
156
  }
476
157
 
477
158
  if (!clusterId) {
@@ -507,36 +188,3 @@ export default async function({
507
188
  }
508
189
  }
509
190
  }
510
-
511
- async function findMe(store) {
512
- // First thing we do in loadManagement is fetch principals anyway.... so don't ?me=true here
513
- const principals = await store.dispatch('rancher/findAll', {
514
- type: NORMAN.PRINCIPAL,
515
- opt: {
516
- url: '/v3/principals',
517
- redirectUnauthorized: false,
518
- }
519
- });
520
-
521
- const me = findBy(principals, 'me', true);
522
-
523
- return me;
524
- }
525
-
526
- async function tryInitialSetup(store, password = 'admin') {
527
- try {
528
- const res = await store.dispatch('auth/login', {
529
- provider: 'local',
530
- body: {
531
- username: 'admin',
532
- password
533
- },
534
- });
535
-
536
- return res._status === 200;
537
- } catch (e) {
538
- console.error('Error trying initial setup', e); // eslint-disable-line no-console
539
-
540
- return false;
541
- }
542
- }
@@ -4,15 +4,27 @@ import ChartMixin from '@shell/mixins/chart';
4
4
  import { OPA_GATE_KEEPER_ID } from '@shell/pages/c/_cluster/gatekeeper/index.vue';
5
5
 
6
6
  describe('chartMixin', () => {
7
- const testCases = [[null, 0], [OPA_GATE_KEEPER_ID, 1], ['any_other_id', 0]];
7
+ const testCases = {
8
+ opa: [
9
+ [null, 0],
10
+ [OPA_GATE_KEEPER_ID, 1],
11
+ ['any_other_id', 0]
12
+ ],
13
+ managedApps: [
14
+ [false, false, 0],
15
+ [true, null, 0],
16
+ [true, true, 0],
17
+ [true, false, 1],
18
+ ],
19
+ };
8
20
 
9
- it.each(testCases)(
10
- 'should add OPA deprecation warning properly', (chartId, expected) => {
11
- const localVue = createLocalVue();
21
+ const localVue = createLocalVue();
12
22
 
13
- localVue.use(Vuex);
14
- localVue.mixin(ChartMixin);
23
+ localVue.use(Vuex);
24
+ localVue.mixin(ChartMixin);
15
25
 
26
+ it.each(testCases.opa)(
27
+ 'should add OPA deprecation warning properly', (chartId, expected) => {
16
28
  const store = new Vuex.Store({
17
29
  getters: {
18
30
  currentCluster: () => {},
@@ -37,4 +49,34 @@ describe('chartMixin', () => {
37
49
  expect(warnings).toHaveLength(expected);
38
50
  }
39
51
  );
52
+
53
+ it.each(testCases.managedApps)(
54
+ 'should add managed apps warning properly', (isEdit, upgradeAvailable, expected) => {
55
+ const id = 'cattle-fleet-local-system/fleet-agent-local';
56
+ const data = isEdit ? { existing: { id, upgradeAvailable } } : undefined;
57
+
58
+ const store = new Vuex.Store({
59
+ getters: {
60
+ currentCluster: () => {},
61
+ isRancher: () => true,
62
+ 'catalog/repo': () => {
63
+ return () => 'repo';
64
+ },
65
+ 'catalog/chart': () => {
66
+ return () => ({ id });
67
+ },
68
+ 'i18n/t': () => jest.fn()
69
+ }
70
+ });
71
+
72
+ const vm = localVue.extend({});
73
+ const instance = new vm({ store, data });
74
+
75
+ instance.$route = { query: { chart: 'chart_name' } };
76
+
77
+ const warnings = instance.warnings;
78
+
79
+ expect(warnings).toHaveLength(expected as number);
80
+ }
81
+ );
40
82
  });
@@ -1,6 +1,5 @@
1
1
  import { _EDIT } from '@shell/config/query-params';
2
- import Vue from 'vue';
3
- import { mount, VueClass } from '@vue/test-utils';
2
+ import { mount } from '@vue/test-utils';
4
3
  import CreateEditView from '@shell/mixins/create-edit-view';
5
4
 
6
5
  describe('createEditView should', () => {
@@ -12,7 +11,7 @@ describe('createEditView should', () => {
12
11
  };
13
12
 
14
13
  // TODO: Investigate type to be used for the .vm property to access the component instance instead of using any
15
- const instance = mount(Component as unknown as VueClass<Vue>).vm as any;
14
+ const instance = mount(Component).vm as any;
16
15
 
17
16
  expect(instance.mode).toContain(_EDIT);
18
17
  });
@@ -55,6 +55,7 @@ export default {
55
55
  },
56
56
 
57
57
  displayName() {
58
+ // i18n-uses model.authConfig.provider.*
58
59
  return this.t(`model.authConfig.provider.${ this.NAME }`);
59
60
  },
60
61
 
@@ -191,7 +192,7 @@ export default {
191
192
  }
192
193
  }
193
194
  if (wasEnabled && configType === 'oauth') {
194
- await this.model.save({ ignoreFields: ['oauthCredential', 'serviceAccountCredential'] });
195
+ await this.model.save({ ignoreFields: ['oauthCredential', 'serviceAccountCredential'] } );
195
196
  } else {
196
197
  await this.model.save();
197
198
  }
@@ -272,7 +273,7 @@ export default {
272
273
 
273
274
  // KeyCloakOIDCConfig --> OIDCConfig
274
275
  set(this.model, 'rancherUrl', `${ serverUrl }/verify-auth`);
275
- set(this.model, 'scope', BASE_SCOPES.keycloakoidc[0]);
276
+ set(this.model, 'scope', BASE_SCOPES.oidc[0]);
276
277
  break;
277
278
  }
278
279