From a02d4a3b1c54f6da1e50d88e9a22cb0360d85f31 Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Sun, 12 Apr 2026 06:48:12 -0700 Subject: [PATCH] Unify browser bridge request normalization --- cmd/keepassgo-browser-bridge/main.go | 6 +----- internal/browserbridge/bridge.go | 13 +++++++++---- internal/browserbridge/client.go | 23 ++++++++++++++--------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/cmd/keepassgo-browser-bridge/main.go b/cmd/keepassgo-browser-bridge/main.go index ab78aed..2934a83 100644 --- a/cmd/keepassgo-browser-bridge/main.go +++ b/cmd/keepassgo-browser-bridge/main.go @@ -117,11 +117,7 @@ func runNativeMessage() error { } func dialBridge(ctx context.Context, req browserbridge.Request) (*grpc.ClientConn, *browserbridge.GRPCClient, context.Context, error) { - connCfg, err := req.Connection() - if err != nil { - return nil, nil, nil, err - } - return browserbridge.Dial(ctx, connCfg) + return browserbridge.DialRequest(ctx, req) } func defaultBinaryPath() (string, error) { diff --git a/internal/browserbridge/bridge.go b/internal/browserbridge/bridge.go index d223c90..4f18fcc 100644 --- a/internal/browserbridge/bridge.go +++ b/internal/browserbridge/bridge.go @@ -140,16 +140,21 @@ func WriteResponse(w io.Writer, resp Response) error { } func (r Request) Connection() (Connection, error) { - conn := Connection{ + return normalizeConnection(Connection{ GRPCAddress: strings.TrimSpace(r.GRPCAddress), BearerToken: strings.TrimSpace(r.BearerToken), - } - if conn.GRPCAddress == "" { + }) +} + +func normalizeConnection(conn Connection) (Connection, error) { + if strings.TrimSpace(conn.GRPCAddress) == "" { conn.GRPCAddress = grpcaddr.Default(runtime.GOOS) } - if conn.BearerToken == "" { + if strings.TrimSpace(conn.BearerToken) == "" { return Connection{}, fmt.Errorf("browser bridge bearer token is required") } + conn.GRPCAddress = strings.TrimSpace(conn.GRPCAddress) + conn.BearerToken = strings.TrimSpace(conn.BearerToken) return conn, nil } diff --git a/internal/browserbridge/client.go b/internal/browserbridge/client.go index 8a6f49f..e5ef206 100644 --- a/internal/browserbridge/client.go +++ b/internal/browserbridge/client.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "net" - "runtime" "strings" "git.julianfamily.org/keepassgo/internal/grpcaddr" @@ -18,14 +17,20 @@ type GRPCClient struct { client keepassgov1.VaultServiceClient } +func DialRequest(ctx context.Context, req Request) (*grpc.ClientConn, *GRPCClient, context.Context, error) { + conn, err := req.Connection() + if err != nil { + return nil, nil, nil, err + } + return Dial(ctx, conn) +} + func Dial(ctx context.Context, conn Connection) (*grpc.ClientConn, *GRPCClient, context.Context, error) { - if strings.TrimSpace(conn.GRPCAddress) == "" { - conn.GRPCAddress = grpcaddr.Default(runtime.GOOS) + normalized, err := normalizeConnection(conn) + if err != nil { + return nil, nil, nil, err } - if strings.TrimSpace(conn.BearerToken) == "" { - return nil, nil, nil, fmt.Errorf("browser bridge bearer token is required") - } - network, endpoint, err := grpcaddr.Parse(conn.GRPCAddress) + network, endpoint, err := grpcaddr.Parse(normalized.GRPCAddress) if err != nil { return nil, nil, nil, err } @@ -40,9 +45,9 @@ func Dial(ctx context.Context, conn Connection) (*grpc.ClientConn, *GRPCClient, }), ) if err != nil { - return nil, nil, nil, fmt.Errorf("dial gRPC host %s: %w", strings.TrimSpace(conn.GRPCAddress), err) + return nil, nil, nil, fmt.Errorf("dial gRPC host %s: %w", normalized.GRPCAddress, err) } - ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+strings.TrimSpace(conn.BearerToken)) + ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+normalized.BearerToken) return grpcConn, &GRPCClient{client: keepassgov1.NewVaultServiceClient(grpcConn)}, ctx, nil }