From 29795c074cc0a912fd93e03b07d7752f819bbc45 Mon Sep 17 00:00:00 2001 From: jarek Date: Wed, 19 Aug 2026 14:26:45 +0200 Subject: [PATCH] Bitwarden Secrets Manager as a secret provider via an operator-installed bws client --- .../components/SecretProviderPicker.svelte | 14 +++- .../provider-icons/ProtonPass.svelte | 84 +++---------------- .../settings/secrets/ProviderModal.svelte | 41 +++++---- 3 files changed, 48 insertions(+), 91 deletions(-) diff --git a/src/lib/components/SecretProviderPicker.svelte b/src/lib/components/SecretProviderPicker.svelte index 4699422..5ed2f6e 100644 --- a/src/lib/components/SecretProviderPicker.svelte +++ b/src/lib/components/SecretProviderPicker.svelte @@ -2,6 +2,7 @@ import { Label } from '$lib/components/ui/label'; import { Input } from '$lib/components/ui/input'; import * as Select from '$lib/components/ui/select'; + import { getProviderIcon } from '$lib/components/provider-icons'; import { BULK_SELECTOR_FIELDS } from '../../routes/settings/secrets/ProviderModal.svelte'; import { SELECTOR_VARS, BULK_SELECTOR_VAR } from '$lib/utils/bulk-selector'; import type { EnvVar } from '$lib/components/StackEnvVarsEditor.svelte'; @@ -58,7 +59,12 @@ > {#if secretProviderId !== null} - {providers.find((p) => p.id === secretProviderId)?.name ?? 'Unknown provider'} + {@const sel = providers.find((p) => p.id === secretProviderId)} + {@const SelIcon = sel ? getProviderIcon(sel.type) : null} + + {#if SelIcon}{/if} + {sel?.name ?? 'Unknown provider'} + {:else} None — disabled {/if} @@ -68,8 +74,12 @@ None — disabled {#each providers as provider (provider.id)} + {@const ProviderIcon = getProviderIcon(provider.type)} - {provider.name} + + {#if ProviderIcon}{/if} + {provider.name} + {/each} diff --git a/src/lib/components/provider-icons/ProtonPass.svelte b/src/lib/components/provider-icons/ProtonPass.svelte index 2e79755..d96def2 100644 --- a/src/lib/components/provider-icons/ProtonPass.svelte +++ b/src/lib/components/provider-icons/ProtonPass.svelte @@ -5,80 +5,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/src/routes/settings/secrets/ProviderModal.svelte b/src/routes/settings/secrets/ProviderModal.svelte index 7bc179f..0c93868 100644 --- a/src/routes/settings/secrets/ProviderModal.svelte +++ b/src/routes/settings/secrets/ProviderModal.svelte @@ -117,7 +117,7 @@ import * as Select from '$lib/components/ui/select'; import { FieldLabel } from '$lib/components/ui/field-label'; import { Input } from '$lib/components/ui/input'; - import { Plus, Check, RefreshCw, PlugZap, KeyRound } from 'lucide-svelte'; + import { Plus, Check, RefreshCw, PlugZap, KeyRound, Info } from 'lucide-svelte'; import { scale } from 'svelte/transition'; import { backOut, cubicIn } from 'svelte/easing'; import { getProviderIcon } from '$lib/components/provider-icons'; @@ -429,20 +429,31 @@ {/each} - {#if formType === 'bitwarden'} -

- Bitwarden Secrets Manager requires an externally installed or mounted official - bws client at /usr/local/bin/bws (or an absolute - DOCKHAND_BWS_PATH process override). -

- {/if} - {#if formType === 'proton'} -

- Proton Pass requires an externally installed or mounted official - pass-cli client at /usr/local/bin/pass-cli (or an absolute - DOCKHAND_PASS_CLI_PATH process override). Supports both a bulk vault pull - and inline pass:// references. -

+ {#if formType === 'bitwarden' || formType === 'proton'} + +
+ {#if formType === 'bitwarden'} +

+ + + Bitwarden Secrets Manager requires an externally installed or mounted official + bws client at /usr/local/bin/bws (or an absolute + DOCKHAND_BWS_PATH process override). + +

+ {:else} +

+ + + Proton Pass requires an externally installed or mounted official + pass-cli client at /usr/local/bin/pass-cli (or an absolute + DOCKHAND_PASS_CLI_PATH process override). Supports both a bulk vault pull + and inline pass:// references. + +

+ {/if} +
{/if}

Configuration is stored encrypted.{#if isEditing}