From ef22b1aa8a351d61835581a14a9ec896fe1ad93a Mon Sep 17 00:00:00 2001 From: thibaud-lclr Date: Mon, 20 Apr 2026 17:52:50 +0200 Subject: [PATCH] fix: prompt login in red when bitwarden session is missing --- scaffold/scaffold.go | 40 ++++++++++++++++++++++++++++++++++++--- scaffold/scaffold_test.go | 2 ++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/scaffold/scaffold.go b/scaffold/scaffold.go index 9723a58..ca72024 100644 --- a/scaffold/scaffold.go +++ b/scaffold/scaffold.go @@ -1596,6 +1596,11 @@ type Runtime struct { SecretName string } +const ( + ansiRedColor = "\033[31m" + ansiResetColor = "\033[0m" +) + func Run(ctx context.Context, args []string, version string) error { runtime, err := NewRuntime(version) if err != nil { @@ -1917,9 +1922,7 @@ func (r Runtime) runUpdate(ctx context.Context, inv bootstrap.Invocation) error func (r Runtime) openSecretStore() (secretstore.Store, error) { policy := r.activeBackendPolicy() if policy == secretstore.BackendBitwardenCLI { - if _, err := secretstore.EnsureBitwardenSessionEnv(secretstore.BitwardenSessionOptions{ - ServiceName: r.BinaryName, - }); err != nil { + if err := r.ensureBitwardenSession(); err != nil { return nil, err } } @@ -1936,6 +1939,37 @@ func (r Runtime) openSecretStore() (secretstore.Store, error) { }) } +func (r Runtime) ensureBitwardenSession() error { + if hasBitwardenSessionInEnv() { + return nil + } + + loaded, err := secretstore.EnsureBitwardenSessionEnv(secretstore.BitwardenSessionOptions{ + ServiceName: r.BinaryName, + }) + if err != nil { + return err + } + + if loaded || hasBitwardenSessionInEnv() { + return nil + } + + return errors.New(colorizeRed(fmt.Sprintf( + "Session Bitwarden introuvable. Lance %s login puis relance la commande.", + r.BinaryName, + ))) +} + +func hasBitwardenSessionInEnv() bool { + session, ok := os.LookupEnv("BW_SESSION") + return ok && strings.TrimSpace(session) != "" +} + +func colorizeRed(message string) string { + return ansiRedColor + strings.TrimSpace(message) + ansiResetColor +} + func (r Runtime) activeBackendPolicy() secretstore.BackendPolicy { policy := secretstore.BackendPolicy(strings.TrimSpace(r.Manifest.SecretStore.BackendPolicy)) if policy == "" { diff --git a/scaffold/scaffold_test.go b/scaffold/scaffold_test.go index d67353f..bd32a49 100644 --- a/scaffold/scaffold_test.go +++ b/scaffold/scaffold_test.go @@ -68,6 +68,8 @@ func TestGenerateCreatesRecommendedSkeleton(t *testing.T) { "config.NewStore[Profile]", "secretstore.Open(secretstore.Options", "secretstore.EnsureBitwardenSessionEnv", + "func (r Runtime) ensureBitwardenSession() error {", + "\\033[31m", "secretstore.LoginBitwarden", "update.Run", "manifest.LoadDefaultOrEmbedded",