From d8cf61be47ade088d4ffff7e3d501115c17578eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gremaud?= Date: Tue, 21 Oct 2025 14:18:17 +0200 Subject: [PATCH] peaufinage --- package.json | 1 + pnpm-lock.yaml | 8 + src/App.vue | 39 ++- src/components/Dashboard.vue | 213 +--------------- src/components/LoginForm.vue | 9 +- src/components/PathSearch.vue | 45 +++- src/components/PolicyModal.vue | 185 ++++++++++++++ src/components/SecretModal.vue | 404 ++++++++++++++++++++++-------- src/components/ServerSelector.vue | 8 +- src/components/Settings.vue | 22 +- src/composables/usePolicyModal.ts | 53 ++++ src/composables/useSweetAlert.ts | 87 +++++++ src/config.ts | 4 +- src/services/vaultApi.ts | 70 +++++- src/services/vaultClient.ts | 61 ++++- src/utils/cache.ts | 14 +- src/utils/vaultPolicyHelper.ts | 103 ++++++++ 17 files changed, 953 insertions(+), 373 deletions(-) create mode 100644 src/components/PolicyModal.vue create mode 100644 src/composables/usePolicyModal.ts create mode 100644 src/composables/useSweetAlert.ts create mode 100644 src/utils/vaultPolicyHelper.ts diff --git a/package.json b/package.json index fcb0cbb..05c379c 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "format:check": "prettier --check ." }, "dependencies": { + "sweetalert2": "^11.26.3", "vue": "^3.4.15" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67a30b1..6a95fb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + sweetalert2: + specifier: ^11.26.3 + version: 11.26.3 vue: specifier: ^3.4.15 version: 3.5.22(typescript@5.9.3) @@ -1249,6 +1252,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + sweetalert2@11.26.3: + resolution: {integrity: sha512-VU0hGw/WfI9h7Mh+SCsDlWgtxDwWZ6ccqS7QcO8zEeWnwplN1GptcLstq76OluUBSLUza6ldvKd3558OhjpJ9A==} + tailwindcss@3.4.18: resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} engines: {node: '>=14.0.0'} @@ -2524,6 +2530,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + sweetalert2@11.26.3: {} + tailwindcss@3.4.18: dependencies: '@alloc/quick-lru': 5.2.0 diff --git a/src/App.vue b/src/App.vue index 2f1322c..e4d3c59 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,11 +4,23 @@ import type { VaultServer, VaultCredentials, VaultConnection } from './types' import ServerSelector from './components/ServerSelector.vue' import LoginForm from './components/LoginForm.vue' import Dashboard from './components/Dashboard.vue' +import PolicyModal from './components/PolicyModal.vue' +import { useSweetAlert } from './composables/useSweetAlert' +import { usePolicyModal } from './composables/usePolicyModal' const servers = ref([]) const selectedServer = ref(null) const activeConnection = ref(null) +const { error } = useSweetAlert() +const { modalState, closePolicyModal, showPolicyModal } = usePolicyModal() + +// Test function for debugging +const testPolicyModal = () => { + console.log('🔍 Testing policy modal') + showPolicyModal('secret/myapp/config', 'write', 'permission denied', 'Test Policy Modal') +} + // Load servers from localStorage on mount onMounted(() => { const savedServers = localStorage.getItem('vaultServers') @@ -51,11 +63,11 @@ const handleLogin = async (credentials: VaultCredentials, shouldSaveCredentials: try { // Verify login and get mount points const { vaultApi } = await import('./services/vaultApi') - const mountPoints = await vaultApi.verifyLoginAndGetMounts(selectedServer.value, credentials) + const { mountPoints, updatedCredentials } = await vaultApi.verifyLoginAndGetMounts(selectedServer.value, credentials) activeConnection.value = { server: selectedServer.value, - credentials, + credentials: updatedCredentials, // Use the updated credentials with token isConnected: true, lastConnected: new Date(), mountPoints, @@ -65,7 +77,7 @@ const handleLogin = async (credentials: VaultCredentials, shouldSaveCredentials: if (shouldSaveCredentials) { const serverIndex = servers.value.findIndex(s => s.id === selectedServer.value!.id) if (serverIndex !== -1) { - servers.value[serverIndex].savedCredentials = credentials + servers.value[serverIndex].savedCredentials = updatedCredentials // Save the updated credentials with token console.log('⚠️ Credentials saved to localStorage (insecure!)') } } else { @@ -78,9 +90,9 @@ const handleLogin = async (credentials: VaultCredentials, shouldSaveCredentials: } console.log(`✓ Logged in successfully. Found ${mountPoints.length} KV mount point(s).`) - } catch (error) { - console.error('Login failed:', error) - alert(`Login failed: ${error instanceof Error ? error.message : 'Unknown error'}\n\n` + 'Please check your credentials and server configuration.') + } catch (err) { + console.error('Login failed:', err) + error(`Login failed: ${err instanceof Error ? err.message : 'Unknown error'}\n\nPlease check your credentials and server configuration.`) } } @@ -104,6 +116,11 @@ const handleLogout = () => {
+ +
+ +
+
@@ -130,5 +147,15 @@ const handleLogout = () => {
Browser Vault GUI - An alternative frontend for HashiCorp Vault
+ + +
diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index b3ced3e..a5db7dc 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -1,7 +1,6 @@