Skip to content

Commit cbdce82

Browse files
committed
feat(sdk): external plugins
1 parent a5405c5 commit cbdce82

3 files changed

Lines changed: 51 additions & 3 deletions

File tree

pkg/adaptation/plugin.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package adaptation
22

33
import (
4+
"context"
5+
"net"
6+
"net/http"
7+
"os/exec"
48
"sync"
59
"time"
610

711
"github.com/docker/secrets-engine/pkg/api"
12+
"github.com/docker/secrets-engine/pkg/api/resolver/v1/resolverv1connect"
13+
"github.com/docker/secrets-engine/pkg/secrets"
814
)
915

1016
var (
@@ -24,3 +30,44 @@ func getPluginRegistrationTimeout() time.Duration {
2430
defer timeoutCfgLock.RUnlock()
2531
return pluginRegistrationTimeout
2632
}
33+
34+
//var (
35+
// _ = (secrets.Resolver)((*plugin)(nil))
36+
//)
37+
38+
type plugin struct {
39+
sync.Mutex
40+
base string
41+
pattern secrets.Pattern
42+
version string
43+
cmd *exec.Cmd
44+
pluginClient resolverv1connect.PluginServiceClient
45+
resolverClient resolverv1connect.ResolverServiceClient
46+
close func() error
47+
}
48+
49+
// Create a plugin (stub) for an accepted external plugin connection.
50+
func newExternalPlugin(conn net.Conn, v setupValidator) (*plugin, error) {
51+
r, err := setup(conn, v)
52+
if err != nil {
53+
return nil, err
54+
}
55+
return &plugin{
56+
base: r.cfg.name,
57+
pattern: r.cfg.pattern,
58+
version: r.cfg.version,
59+
pluginClient: resolverv1connect.NewPluginServiceClient(newSocketClient(r.conn), "http://unix"),
60+
resolverClient: resolverv1connect.NewResolverServiceClient(newSocketClient(r.conn), "http://unix"),
61+
close: r.close,
62+
}, nil
63+
}
64+
65+
func newSocketClient(conn net.Conn) *http.Client {
66+
return &http.Client{
67+
Transport: &http.Transport{
68+
DialContext: func(ctx context.Context, _, _ string) (net.Conn, error) {
69+
return conn, nil
70+
},
71+
},
72+
}
73+
}

pkg/adaptation/plugin_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package adaptation

pkg/adaptation/setup.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/docker/secrets-engine/pkg/secrets"
1414
)
1515

16-
type SetupResult struct {
16+
type setupResult struct {
1717
conn net.Conn
1818
cfg pluginCfgIn
1919
close func() error
@@ -27,7 +27,7 @@ type setupValidator struct {
2727
acceptPattern func(secrets.Pattern) error
2828
}
2929

30-
func Setup(conn net.Conn, v setupValidator) (*SetupResult, error) {
30+
func setup(conn net.Conn, v setupValidator) (*setupResult, error) {
3131
chRegistrationResult := make(chan registrationResult, 1)
3232
httpMux := http.NewServeMux()
3333
httpMux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
@@ -62,7 +62,7 @@ func Setup(conn net.Conn, v setupValidator) (*SetupResult, error) {
6262
i.Close()
6363
return nil, errors.New("plugin registration timed out")
6464
}
65-
return &SetupResult{
65+
return &setupResult{
6666
conn: conn,
6767
cfg: out,
6868
close: i.Close,

0 commit comments

Comments
 (0)