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
// DefaultLoginHandler retourne un Handler qui authentifie et déverrouille
// Bitwarden, persiste la session BW_SESSION, et confirme le résultat.
// Utiliser comme hook Login lorsqu'aucune logique personnalisée n'est requise.
func DefaultLoginHandler(binaryName string) Handler {
// BitwardenLoginHandler retourne un Handler pour la commande login des MCPs
// qui utilisent le backend Bitwarden. Il authentifie et déverrouille le vault,
// persiste BW_SESSION, et confirme le résultat.
//
// 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)
return func(_ context.Context, inv Invocation) error {
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 })
}
func TestDefaultLoginHandlerPrintsConfirmation(t *testing.T) {
func TestBitwardenLoginHandlerPrintsConfirmation(t *testing.T) {
var stdout bytes.Buffer
withLoginBitwarden(t, func(opts secretstore.BitwardenLoginOptions) (string, error) {
@ -27,7 +27,7 @@ func TestDefaultLoginHandlerPrintsConfirmation(t *testing.T) {
return "session-token", nil
})
handler := DefaultLoginHandler("my-mcp")
handler := BitwardenLoginHandler("my-mcp")
err := handler(context.Background(), Invocation{
Command: CommandLogin,
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
loginErr := errors.New("vault locked")
@ -53,7 +53,7 @@ func TestDefaultLoginHandlerPropagatesError(t *testing.T) {
return "", loginErr
})
handler := DefaultLoginHandler("my-mcp")
handler := BitwardenLoginHandler("my-mcp")
err := handler(context.Background(), Invocation{
Command: CommandLogin,
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
withLoginBitwarden(t, func(_ secretstore.BitwardenLoginOptions) (string, error) {
@ -78,7 +78,7 @@ func TestRunUsesDefaultLoginHandlerWhenHookSet(t *testing.T) {
Args: []string{"login"},
Stdout: &stdout,
Hooks: Hooks{
Login: DefaultLoginHandler("my-mcp"),
Login: BitwardenLoginHandler("my-mcp"),
},
})
if err != nil {