-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+ -
+
+
+
+
+
-
+
+
+ -
+
+
+
+
+
+
-
+
+
+ -
+
+
+
+
+
+
-
+
+
+ -
+
+
+
+
+
+
-
-
-
-
-
-
-
Loading...
-
+
+
+
+
diff --git a/packages/sshecret-frontend/src/main.ts b/packages/sshecret-frontend/src/main.ts
index c526723..9f8480b 100644
--- a/packages/sshecret-frontend/src/main.ts
+++ b/packages/sshecret-frontend/src/main.ts
@@ -30,6 +30,8 @@ import '@shoelace-style/shoelace/dist/components/option/option.js'
import '@shoelace-style/shoelace/dist/components/range/range.js'
import '@shoelace-style/shoelace/dist/components/select/select.js'
import '@shoelace-style/shoelace/dist/components/skeleton/skeleton.js'
+import '@shoelace-style/shoelace/dist/components/spinner/spinner.js'
+
import '@shoelace-style/shoelace/dist/components/tab-group/tab-group.js'
import '@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js'
import '@shoelace-style/shoelace/dist/components/tab/tab.js'
diff --git a/packages/sshecret-frontend/src/router/index.ts b/packages/sshecret-frontend/src/router/index.ts
index ccefc05..7588a14 100644
--- a/packages/sshecret-frontend/src/router/index.ts
+++ b/packages/sshecret-frontend/src/router/index.ts
@@ -2,8 +2,15 @@ import { createRouter, createWebHistory } from 'vue-router'
import LoginPage from '@/views/LoginPage.vue'
import WorkspaceView from '@/views/WorkspaceView.vue'
-import AuditView from '@/views/audit/AuditView.vue'
+import AuditPage from '@/views/audit/AuditPage.vue'
+import ClientPage from '@/views/clients/ClientPage.vue'
+import SecretPage from '@/views/secrets/SecretPage.vue'
+import ClientDetailPage from '@/views/clients/ClientDetailPage.vue'
+import SecretDetailView from '@/views/secrets/SecretDetailView.vue'
+import SecretGroupDetailView from '@/views/secrets/SecretGroupDetailView.vue'
+import GenericDetail from '@/components/common/GenericDetail.vue'
import { useAuthTokenStore } from '@/store/auth'
+import { reassemblePath } from '@/api/paths'
const routes = [
@@ -15,7 +22,55 @@ const routes = [
meta: { requiresAuth: true },
},
{
- path: '/audit', name: 'audit', component: AuditView, meta: { requiresAuth: true },
+ path: '/audit', name: 'audit', component: AuditPage, meta: { requiresAuth: true }
+ },
+ {
+ path: '/clients', component: ClientPage, meta: { requiresAuth: true }, children: [
+ {
+ path: '', component: GenericDetail, name: 'clients', meta: { requiresAuth: true },
+ },
+ {
+ name: 'Client',
+ path: ':id',
+ component: ClientDetailPage,
+ props: true,
+ meta: { requiresAuth: true },
+
+ },
+ {
+ name: 'ClientSecret',
+ path: ':parentId/:id',
+ component: SecretDetailView,
+ props: true,
+ meta: { requiresAuth: true },
+ },
+ ]
+ },
+ {
+ path: '/secrets', component: SecretPage, meta: { requiresAuth: true }, children: [
+ {
+ path: '', component: GenericDetail, name: 'secrets',
+ meta: { requiresAuth: true },
+
+ },
+ {
+ name: 'Secret',
+ path: ':id',
+ component: SecretDetailView,
+ props: true,
+ meta: { requiresAuth: true },
+
+ },
+ {
+ name: 'Group',
+ path: '/group/:groupPath(.*)*',
+ component: SecretGroupDetailView,
+ props: route => ({
+ groupPath: Array.isArray(route.params.groupPath) ? reassemblePath(route.params.groupPath) : route.params.groupPath || ''
+ }),
+ meta: { requiresAuth: true },
+ }
+ ],
}
]
diff --git a/packages/sshecret-frontend/src/store/useTreeState.ts b/packages/sshecret-frontend/src/store/useTreeState.ts
index 1ffc4c3..0325ff7 100644
--- a/packages/sshecret-frontend/src/store/useTreeState.ts
+++ b/packages/sshecret-frontend/src/store/useTreeState.ts
@@ -20,6 +20,22 @@ export const useTreeState = defineStore('treeState', {
selectClient(id: string) {
this.selected = { objectType: SshecretObjectType.Client, id: id }
},
+ /*
+ * Fetch and select a specific client.
+ */
+ async loadClientName(name: string) {
+ const existing = this.clients?.clients.find(c => c.name === name)
+ if (existing) {
+ this.selected = { objectType: SshecretObjectType.Client, id: existing.id, param: name }
+ } else {
+ const result = await this.queryClients(name, 0, 1)
+ if (result === 1 && this.clients) {
+ this.selected = { objectType: SshecretObjectType.Client, id: this.clients.clients[0].id, param: name }
+ } else {
+ throw new Error("The selected client could not be found.")
+ }
+ }
+ },
selectSecret(name: string, parent?: string) {
this.selected = { objectType: SshecretObjectType.ClientSecret, id: name }
if (parent) {
diff --git a/packages/sshecret-frontend/src/views/WorkspaceView.vue b/packages/sshecret-frontend/src/views/WorkspaceView.vue
index 2e0816c..600a53d 100644
--- a/packages/sshecret-frontend/src/views/WorkspaceView.vue
+++ b/packages/sshecret-frontend/src/views/WorkspaceView.vue
@@ -1,93 +1,6 @@
-
-
-
- Clients
- Secrets
- Audit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
diff --git a/packages/sshecret-frontend/src/views/audit/AuditPage.vue b/packages/sshecret-frontend/src/views/audit/AuditPage.vue
new file mode 100644
index 0000000..9ec6b6d
--- /dev/null
+++ b/packages/sshecret-frontend/src/views/audit/AuditPage.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/sshecret-frontend/src/views/audit/AuditView.vue b/packages/sshecret-frontend/src/views/audit/AuditView.vue
index a16dea3..d4922d6 100644
--- a/packages/sshecret-frontend/src/views/audit/AuditView.vue
+++ b/packages/sshecret-frontend/src/views/audit/AuditView.vue
@@ -2,10 +2,14 @@
+
+
+
diff --git a/packages/sshecret-frontend/src/views/clients/ClientDetailPage.vue b/packages/sshecret-frontend/src/views/clients/ClientDetailPage.vue
new file mode 100644
index 0000000..cb3b393
--- /dev/null
+++ b/packages/sshecret-frontend/src/views/clients/ClientDetailPage.vue
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/packages/sshecret-frontend/src/views/clients/ClientDetailView.vue b/packages/sshecret-frontend/src/views/clients/ClientDetailView.vue
index a840df8..cc325ed 100644
--- a/packages/sshecret-frontend/src/views/clients/ClientDetailView.vue
+++ b/packages/sshecret-frontend/src/views/clients/ClientDetailView.vue
@@ -1,44 +1,54 @@
-
+
diff --git a/packages/sshecret-frontend/src/views/clients/ClientTreeList.vue b/packages/sshecret-frontend/src/views/clients/ClientTreeList.vue
index 51ec41a..758f2be 100644
--- a/packages/sshecret-frontend/src/views/clients/ClientTreeList.vue
+++ b/packages/sshecret-frontend/src/views/clients/ClientTreeList.vue
@@ -44,6 +44,11 @@
+
+
+
+
+