refactor(bootstrap): renommer DefaultLoginHandler en BitwardenLoginHandler

Le handler est spécifique au backend Bitwarden CLI. Le nom "Default"
suggérait à tort qu'il s'applique à tous les MCPs.

Les MCPs sans backend Bitwarden ne définissent pas de hook Login :
autoDisabledCommands masque automatiquement la commande.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
thibaud-lclr 2026-05-13 10:50:28 +02:00
parent d23d79b6c1
commit e6c372bffc
2 changed files with 14 additions and 10 deletions

View file

@ -10,10 +10,14 @@ import (
var loginBitwarden = secretstore.LoginBitwarden var loginBitwarden = secretstore.LoginBitwarden
// DefaultLoginHandler retourne un Handler qui authentifie et déverrouille // BitwardenLoginHandler retourne un Handler pour la commande login des MCPs
// Bitwarden, persiste la session BW_SESSION, et confirme le résultat. // qui utilisent le backend Bitwarden. Il authentifie et déverrouille le vault,
// Utiliser comme hook Login lorsqu'aucune logique personnalisée n'est requise. // persiste BW_SESSION, et confirme le résultat.
func DefaultLoginHandler(binaryName string) Handler { //
// N'utiliser que si le MCP déclare secret_store.backend_policy = "bitwarden-cli"
// dans son manifest. Pour les backends env-only ou keyring, ne pas définir de
// hook Login : la commande sera automatiquement masquée.
func BitwardenLoginHandler(binaryName string) Handler {
name := strings.TrimSpace(binaryName) name := strings.TrimSpace(binaryName)
return func(_ context.Context, inv Invocation) error { return func(_ context.Context, inv Invocation) error {
if _, err := loginBitwarden(secretstore.BitwardenLoginOptions{ if _, err := loginBitwarden(secretstore.BitwardenLoginOptions{

View file

@ -17,7 +17,7 @@ func withLoginBitwarden(t *testing.T, fn func(secretstore.BitwardenLoginOptions)
t.Cleanup(func() { loginBitwarden = previous }) t.Cleanup(func() { loginBitwarden = previous })
} }
func TestDefaultLoginHandlerPrintsConfirmation(t *testing.T) { func TestBitwardenLoginHandlerPrintsConfirmation(t *testing.T) {
var stdout bytes.Buffer var stdout bytes.Buffer
withLoginBitwarden(t, func(opts secretstore.BitwardenLoginOptions) (string, error) { withLoginBitwarden(t, func(opts secretstore.BitwardenLoginOptions) (string, error) {
@ -27,7 +27,7 @@ func TestDefaultLoginHandlerPrintsConfirmation(t *testing.T) {
return "session-token", nil return "session-token", nil
}) })
handler := DefaultLoginHandler("my-mcp") handler := BitwardenLoginHandler("my-mcp")
err := handler(context.Background(), Invocation{ err := handler(context.Background(), Invocation{
Command: CommandLogin, Command: CommandLogin,
Stdout: &stdout, Stdout: &stdout,
@ -45,7 +45,7 @@ func TestDefaultLoginHandlerPrintsConfirmation(t *testing.T) {
} }
} }
func TestDefaultLoginHandlerPropagatesError(t *testing.T) { func TestBitwardenLoginHandlerPropagatesError(t *testing.T) {
var stdout bytes.Buffer var stdout bytes.Buffer
loginErr := errors.New("vault locked") loginErr := errors.New("vault locked")
@ -53,7 +53,7 @@ func TestDefaultLoginHandlerPropagatesError(t *testing.T) {
return "", loginErr return "", loginErr
}) })
handler := DefaultLoginHandler("my-mcp") handler := BitwardenLoginHandler("my-mcp")
err := handler(context.Background(), Invocation{ err := handler(context.Background(), Invocation{
Command: CommandLogin, Command: CommandLogin,
Stdout: &stdout, Stdout: &stdout,
@ -66,7 +66,7 @@ func TestDefaultLoginHandlerPropagatesError(t *testing.T) {
} }
} }
func TestRunUsesDefaultLoginHandlerWhenHookSet(t *testing.T) { func TestRunUsesBitwardenLoginHandlerWhenHookSet(t *testing.T) {
var stdout bytes.Buffer var stdout bytes.Buffer
withLoginBitwarden(t, func(_ secretstore.BitwardenLoginOptions) (string, error) { withLoginBitwarden(t, func(_ secretstore.BitwardenLoginOptions) (string, error) {
@ -78,7 +78,7 @@ func TestRunUsesDefaultLoginHandlerWhenHookSet(t *testing.T) {
Args: []string{"login"}, Args: []string{"login"},
Stdout: &stdout, Stdout: &stdout,
Hooks: Hooks{ Hooks: Hooks{
Login: DefaultLoginHandler("my-mcp"), Login: BitwardenLoginHandler("my-mcp"),
}, },
}) })
if err != nil { if err != nil {