Skip to content

Commit 3bd0aa0

Browse files
committed
feat: engine should not depend on client module
1 parent ee5802e commit 3bd0aa0

File tree

7 files changed

+75
-60
lines changed

7 files changed

+75
-60
lines changed

client/client.go

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import (
88
"time"
99

1010
"connectrpc.com/connect"
11-
"google.golang.org/protobuf/proto"
1211

1312
"github.com/docker/secrets-engine/x/api"
13+
"github.com/docker/secrets-engine/x/api/resolver"
1414
v1 "github.com/docker/secrets-engine/x/api/resolver/v1"
1515
"github.com/docker/secrets-engine/x/api/resolver/v1/resolverv1connect"
1616
"github.com/docker/secrets-engine/x/secrets"
@@ -74,10 +74,14 @@ type config struct {
7474
}
7575

7676
type client struct {
77-
resolverClient resolverv1connect.ResolverServiceClient
77+
resolverClient secrets.Resolver
7878
listClient resolverv1connect.ListServiceClient
7979
}
8080

81+
func (c client) GetSecrets(ctx context.Context, pattern secrets.Pattern) ([]secrets.Envelope, error) {
82+
return c.resolverClient.GetSecrets(ctx, pattern)
83+
}
84+
8185
type Client interface {
8286
secrets.Resolver
8387

@@ -118,43 +122,11 @@ func New(options ...Option) (Client, error) {
118122
Timeout: cfg.requestTimeout,
119123
}
120124
return &client{
121-
resolverClient: resolverv1connect.NewResolverServiceClient(c, "http://unix"),
125+
resolverClient: resolver.NewResolverClient(c),
122126
listClient: resolverv1connect.NewListServiceClient(c, "http://unix"),
123127
}, nil
124128
}
125129

126-
func (c client) GetSecrets(ctx context.Context, pattern secrets.Pattern) ([]secrets.Envelope, error) {
127-
req := connect.NewRequest(v1.GetSecretsRequest_builder{
128-
Pattern: proto.String(pattern.String()),
129-
}.Build())
130-
resp, err := c.resolverClient.GetSecrets(ctx, req)
131-
if err != nil {
132-
if connect.CodeOf(err) == connect.CodeNotFound {
133-
err = secrets.ErrNotFound
134-
}
135-
return nil, err
136-
}
137-
138-
var envelopes []secrets.Envelope
139-
for _, item := range resp.Msg.GetEnvelopes() {
140-
id, err := secrets.ParseID(item.GetId())
141-
if err != nil {
142-
continue
143-
}
144-
envelopes = append(envelopes, secrets.Envelope{
145-
ID: id,
146-
Value: item.GetValue(),
147-
Metadata: item.GetMetadata(),
148-
Provider: item.GetProvider(),
149-
Version: item.GetVersion(),
150-
CreatedAt: item.GetCreatedAt().AsTime(),
151-
ResolvedAt: item.GetResolvedAt().AsTime(),
152-
ExpiresAt: item.GetExpiresAt().AsTime(),
153-
})
154-
}
155-
return envelopes, nil
156-
}
157-
158130
func (c client) ListPlugins(ctx context.Context) ([]PluginInfo, error) {
159131
req := connect.NewRequest(v1.ListPluginsRequest_builder{}.Build())
160132
resp, err := c.listClient.ListPlugins(ctx, req)

cmd/engine/go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
1111
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1212
github.com/docker/docker-credential-helpers v0.9.4 h1:76ItO69/AP/V4yT9V4uuuItG0B1N8hvt0T0c0NN/DzI=
1313
github.com/docker/docker-credential-helpers v0.9.4/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c=
14-
github.com/docker/secrets-engine/client v0.0.16 h1:x6IeuuJXE7E9zfK0ZZzOBTJhtgli/abRX2qWUV6wLDc=
15-
github.com/docker/secrets-engine/client v0.0.16/go.mod h1:0/DJvZvZKVwxum7gGKbP44v3vHr4y03skTBrD0Asn2k=
1614
github.com/docker/secrets-engine/plugin v0.0.19 h1:MZpwFIpDJXdlb+jS7GMaH2FUTshxlSQ77XYyu/OVsyc=
1715
github.com/docker/secrets-engine/plugin v0.0.19/go.mod h1:5smOpW84QwwIcuXrIN4IfyI3QJ4T8gDErycstYWjHZE=
1816
github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE=

engine/.gomodguard.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
22
blocked:
33
modules:
4-
# - github.com/docker/secrets-engine/client:
5-
# reason: "Forbidden dependency"
4+
- github.com/docker/secrets-engine/client:
5+
reason: "Forbidden dependency"
66
- github.com/docker/secrets-engine/injector:
77
reason: "Forbidden dependency"
88
- github.com/docker/secrets-engine/plugins/pass:
99
reason: "Forbidden dependency"
10-
# - github.com/docker/secrets-engine/plugin:
11-
# reason: "Forbidden dependency"
10+
- github.com/docker/secrets-engine/plugin:
11+
reason: "Forbidden dependency"
1212
- github.com/docker/secrets-engine/store:
1313
reason: "Forbidden dependency"

engine/engine_test.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"github.com/stretchr/testify/assert"
1515
"github.com/stretchr/testify/require"
1616

17-
"github.com/docker/secrets-engine/client"
1817
"github.com/docker/secrets-engine/engine/internal/mocks"
1918
"github.com/docker/secrets-engine/engine/internal/plugin"
2019
"github.com/docker/secrets-engine/engine/internal/registry"
@@ -215,8 +214,7 @@ func Test_newEngine(t *testing.T) {
215214
e, err := newEngine(testhelper.TestLoggerCtx(t), cfg)
216215
require.NoError(t, err)
217216
t.Cleanup(func() { assert.NoError(t, e.Close()) })
218-
c, err := client.New(client.WithSocketPath(socketPath))
219-
require.NoError(t, err)
217+
c := newMockClient(socketPath)
220218
foo, err := c.GetSecrets(t.Context(), secrets.MustParsePattern("foo"))
221219
require.NoError(t, err)
222220
require.NotEmpty(t, foo)
@@ -240,8 +238,7 @@ func Test_newEngine(t *testing.T) {
240238
assert.EventuallyWithT(t, func(collect *assert.CollectT) {
241239
assert.ElementsMatch(collect, e.Plugins(), []string{"plugin-bar"})
242240
}, 2*time.Second, 100*time.Millisecond)
243-
c, err := client.New(client.WithSocketPath(socketPath))
244-
require.NoError(t, err)
241+
c := newMockClient(socketPath)
245242
bar, err := c.GetSecrets(t.Context(), secrets.MustParsePattern("bar"))
246243
require.NoError(t, err)
247244
require.NotEmpty(t, bar)
@@ -285,8 +282,7 @@ func Test_newEngine(t *testing.T) {
285282
assert.EventuallyWithT(t, func(collect *assert.CollectT) {
286283
assert.ElementsMatch(collect, e.Plugins(), []string{"my-builtin"})
287284
}, 2*time.Second, 100*time.Millisecond)
288-
c, err := client.New(client.WithSocketPath(socketPath))
289-
require.NoError(t, err)
285+
c := newMockClient(socketPath)
290286
mySecret, err := c.GetSecrets(t.Context(), secrets.MustParsePattern("my-secret"))
291287
require.NoError(t, err)
292288
require.NotEmpty(t, mySecret)
@@ -312,8 +308,7 @@ func Test_newEngine(t *testing.T) {
312308
e, err := newEngine(testhelper.TestLoggerCtx(t), cfg)
313309
require.NoError(t, err)
314310
t.Cleanup(func() { assert.NoError(t, e.Close()) })
315-
c, err := client.New(client.WithSocketPath(socketPath))
316-
require.NoError(t, err)
311+
c := newMockClient(socketPath)
317312
_, err = c.GetSecrets(t.Context(), secrets.MustParsePattern("bar"))
318313
require.NoError(t, err)
319314
killAllPlugins(t, getRegistry(t, e))
@@ -355,8 +350,7 @@ func Test_newEngine(t *testing.T) {
355350
e, err := newEngine(testhelper.TestLoggerCtx(t), cfg)
356351
require.NoError(t, err)
357352
t.Cleanup(func() { assert.NoError(t, e.Close()) })
358-
c, err := client.New(client.WithSocketPath(socketPath))
359-
require.NoError(t, err)
353+
c := newMockClient(socketPath)
360354
assert.EventuallyWithT(t, func(collect *assert.CollectT) {
361355
assert.ElementsMatch(collect, e.Plugins(), []string{"my-builtin"})
362356
}, 2*time.Second, 100*time.Millisecond)

engine/go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ replace github.com/docker/secrets-engine/x => ../x
1616
require (
1717
connectrpc.com/connect v1.18.1
1818
github.com/cenkalti/backoff/v5 v5.0.3
19-
github.com/docker/secrets-engine/client v0.0.16
2019
github.com/docker/secrets-engine/plugin v0.0.19
2120
github.com/docker/secrets-engine/x v0.0.12-do.not.use
2221
github.com/go-chi/chi/v5 v5.2.3

engine/integration_runtimes_test.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"net"
7+
"net/http"
78
"path/filepath"
89
"syscall"
910
"testing"
@@ -15,12 +16,12 @@ import (
1516
"go.opentelemetry.io/otel/codes"
1617
"go.opentelemetry.io/otel/sdk/trace"
1718

18-
"github.com/docker/secrets-engine/client"
1919
"github.com/docker/secrets-engine/engine/internal/mocks"
2020
"github.com/docker/secrets-engine/engine/internal/plugin"
2121
"github.com/docker/secrets-engine/engine/internal/testdummy"
2222
p "github.com/docker/secrets-engine/plugin"
2323
"github.com/docker/secrets-engine/x/api"
24+
"github.com/docker/secrets-engine/x/api/resolver"
2425
"github.com/docker/secrets-engine/x/secrets"
2526
"github.com/docker/secrets-engine/x/testhelper"
2627
)
@@ -51,9 +52,19 @@ func testEngine(t *testing.T) (secrets.Resolver, string) {
5152
{"my-builtin", mockValidVersion, mockPatternAny}: &mocks.MockInternalPlugin{Secrets: map[secrets.ID]string{secrets.MustParseID("my-secret"): "some-value"}},
5253
}),
5354
)
54-
c, err := client.New(client.WithSocketPath(socketPath))
55-
require.NoError(t, err)
56-
return c, socketPath
55+
return newMockClient(socketPath), socketPath
56+
}
57+
58+
func newMockClient(socketPath string) secrets.Resolver {
59+
c := &http.Client{
60+
Transport: &http.Transport{
61+
DialContext: func(ctx context.Context, _, _ string) (net.Conn, error) {
62+
d := &net.Dialer{}
63+
return d.DialContext(ctx, "unix", socketPath)
64+
},
65+
},
66+
}
67+
return resolver.NewResolverClient(c)
5768
}
5869

5970
func Test_SecretsEngine(t *testing.T) {
@@ -190,9 +201,8 @@ func TestWithEnginePluginsDisabled(t *testing.T) {
190201
options = append(options, test.extraOption)
191202
}
192203
runEngineAsync(t, "test-engine", "test-version", options...)
193-
c, err := client.New(client.WithSocketPath(socketPath))
194-
require.NoError(t, err)
195-
_, err = c.GetSecrets(t.Context(), secrets.MustParsePattern("foo"))
204+
c := newMockClient(socketPath)
205+
_, err := c.GetSecrets(t.Context(), secrets.MustParsePattern("foo"))
196206
if test.shouldGetSecretFromExternalPlugin {
197207
assert.NoError(t, err)
198208
} else {

x/api/resolver/resolver.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,45 @@ func (r resolverService) GetSecrets(ctx context.Context, c *connect.Request[reso
5959
Envelopes: items,
6060
}.Build()), nil
6161
}
62+
63+
var _ secrets.Resolver = &resolverClient{}
64+
65+
type resolverClient struct {
66+
resolverClient resolverv1connect.ResolverServiceClient
67+
}
68+
69+
func NewResolverClient(httpClient connect.HTTPClient) secrets.Resolver {
70+
return &resolverClient{resolverClient: resolverv1connect.NewResolverServiceClient(httpClient, "http://unix")}
71+
}
72+
73+
func (r resolverClient) GetSecrets(ctx context.Context, pattern secrets.Pattern) ([]secrets.Envelope, error) {
74+
req := connect.NewRequest(resolverv1.GetSecretsRequest_builder{
75+
Pattern: proto.String(pattern.String()),
76+
}.Build())
77+
resp, err := r.resolverClient.GetSecrets(ctx, req)
78+
if err != nil {
79+
if connect.CodeOf(err) == connect.CodeNotFound {
80+
err = secrets.ErrNotFound
81+
}
82+
return nil, err
83+
}
84+
85+
var envelopes []secrets.Envelope
86+
for _, item := range resp.Msg.GetEnvelopes() {
87+
id, err := secrets.ParseID(item.GetId())
88+
if err != nil {
89+
continue
90+
}
91+
envelopes = append(envelopes, secrets.Envelope{
92+
ID: id,
93+
Value: item.GetValue(),
94+
Metadata: item.GetMetadata(),
95+
Provider: item.GetProvider(),
96+
Version: item.GetVersion(),
97+
CreatedAt: item.GetCreatedAt().AsTime(),
98+
ResolvedAt: item.GetResolvedAt().AsTime(),
99+
ExpiresAt: item.GetExpiresAt().AsTime(),
100+
})
101+
}
102+
return envelopes, nil
103+
}

0 commit comments

Comments
 (0)