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:
parent
d23d79b6c1
commit
e6c372bffc
2 changed files with 14 additions and 10 deletions
|
|
@ -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{
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue