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>
34 lines
1 KiB
Go
34 lines
1 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"forge.lclr.dev/AI/mcp-framework/secretstore"
|
|
)
|
|
|
|
var loginBitwarden = secretstore.LoginBitwarden
|
|
|
|
// 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{
|
|
ServiceName: name,
|
|
Stdin: inv.Stdin,
|
|
Stdout: inv.Stdout,
|
|
Stderr: inv.Stderr,
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
_, err := fmt.Fprintf(inv.Stdout, "Session Bitwarden persistée pour %q.\n", name)
|
|
return err
|
|
}
|
|
}
|