11package adaptation
22
33import (
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
1016var (
@@ -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+ }
0 commit comments