@@ -109,8 +109,8 @@ func createServerCmd(execer fakeruntime.Execer, httpServer server.HTTPServer) (c
109109
110110 // gc related flags
111111 flags .IntVarP (& opt .gcPercent , "gc-percent" , "" , 100 , "The GC percent of Go" )
112- //grpc_tls
113- flags .BoolVarP (& opt .tls , "tls-grpc " , "" , false , "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates" )
112+
113+ flags .BoolVarP (& opt .tls , "tls" , "" , false , "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates" )
114114 flags .StringVarP (& opt .tlsCert , "cert-file" , "" , "" , "The path to the certificate file, Alow SAN certificates" )
115115 flags .StringVarP (& opt .tlsKey , "key-file" , "" , "" , "The path to the key file, Alow SAN certificates" )
116116
@@ -124,8 +124,12 @@ type serverOption struct {
124124 httpServer server.HTTPServer
125125 execer fakeruntime.Execer
126126
127- port int
128- httpPort int
127+ port int
128+ httpPort int
129+ tls bool
130+ tlsCert string
131+ tlsKey string
132+
129133 printProto bool
130134 localStorage []string
131135 consolePath string
@@ -148,17 +152,12 @@ type serverOption struct {
148152 mockConfig []string
149153 mockPrefix string
150154
151- gcPercent int
152-
153- dryRun bool
154-
155+ gcPercent int
156+ dryRun bool
155157 grpcMaxRecvMsgSize int
156158
157159 // inner fields, not as command flags
158160 provider oauth.OAuthProvider
159- tls bool
160- tlsCert string
161- tlsKey string
162161}
163162
164163func (o * serverOption ) preRunE (cmd * cobra.Command , args []string ) (err error ) {
@@ -190,15 +189,20 @@ func (o *serverOption) preRunE(cmd *cobra.Command, args []string) (err error) {
190189
191190 grpcOpts = append (grpcOpts , atestoauth .NewAuthInterceptor (o .oauthGroup ))
192191 }
192+
193193 if o .tls {
194194 if o .tlsCert != "" && o .tlsKey != "" {
195195 creds , err := credentials .NewServerTLSFromFile (o .tlsCert , o .tlsKey )
196196 if err != nil {
197197 return fmt .Errorf ("failed to load credentials: %v" , err )
198198 }
199199 grpcOpts = append (grpcOpts , grpc .Creds (creds ))
200+ } else {
201+ err = fmt .Errorf ("both --cert-file and --key-file flags are required when --tls is enabled" )
202+ return
200203 }
201204 }
205+
202206 if o .dryRun {
203207 o .gRPCServer = & fakeGRPCServer {}
204208 } else {
@@ -260,13 +264,12 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
260264 storeExtMgr := server .NewStoreExtManager (o .execer )
261265 storeExtMgr .WithDownloader (extDownloader )
262266 remoteServer := server .NewRemoteServer (loader , remote .NewGRPCloaderFromStore (), secretServer , storeExtMgr , o .configDir , o .grpcMaxRecvMsgSize )
263- kinds , storeKindsErr := remoteServer .GetStoreKinds (ctx , nil )
264- if storeKindsErr != nil {
265- cmd .PrintErrf ("failed to get store kinds, error: %v\n " , storeKindsErr )
266- } else {
267- if runPluginErr := startPlugins (storeExtMgr , kinds ); runPluginErr != nil {
267+ if stores , storeErr := remoteServer .GetStores (ctx , nil ); storeErr == nil {
268+ if runPluginErr := startPlugins (storeExtMgr , stores ); runPluginErr != nil {
268269 cmd .PrintErrf ("error occurred during starting plugins, error: %v\n " , runPluginErr )
269270 }
271+ } else {
272+ cmd .PrintErrf ("error occurred during getting stores, error: %v\n " , storeErr )
270273 }
271274
272275 // create mock server controller
@@ -278,7 +281,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
278281 mockWriter = mock .NewInMemoryReader ("" )
279282 }
280283
281- dynamicMockServer := mock .NewInMemoryServer (cmd .Context (), 0 )
284+ dynamicMockServer := mock .NewInMemoryServer (cmd .Context (), 0 ). WithTLS ( o . tlsCert , o . tlsKey )
282285 mockServerController := server .NewMockServerController (mockWriter , dynamicMockServer , o .httpPort )
283286
284287 clean := make (chan os.Signal , 1 )
@@ -293,6 +296,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
293296 server .RegisterMockServer (s , mockServerController )
294297 server .RegisterDataServerServer (s , remoteServer .(server.DataServerServer ))
295298 server .RegisterThemeExtensionServer (s , remoteServer .(server.ThemeExtensionServer ))
299+ server .RegisterUIExtensionServer (s , remoteServer .(server.UIExtensionServer ))
296300 serverLogger .Info ("gRPC server listening at" , "addr" , lis .Addr ())
297301 s .Serve (lis )
298302 }()
@@ -330,23 +334,30 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
330334 gRPCServerAddr := fmt .Sprintf ("127.0.0.1:%s" , gRPCServerPort )
331335
332336 if o .tls {
333- creds , err := credentials .NewClientTLSFromFile (o .tlsCert , "localhost" )
337+ var creds credentials.TransportCredentials
338+ creds , err = credentials .NewClientTLSFromFile (o .tlsCert , "127.0.0.1" )
334339 if err != nil {
335340 return fmt .Errorf ("failed to load credentials: %v" , err )
336341 }
342+
343+ opts := []grpc.DialOption {grpc .WithTransportCredentials (creds )}
337344 err = errors .Join (
338- server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}),
339- server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}),
340- server .RegisterThemeExtensionHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}),
341- server .RegisterDataServerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}))
345+ server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , opts ),
346+ server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , opts ),
347+ server .RegisterThemeExtensionHandlerFromEndpoint (ctx , mux , gRPCServerAddr , opts ),
348+ server .RegisterDataServerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , opts ),
349+ server .RegisterUIExtensionHandlerFromEndpoint (ctx , mux , gRPCServerAddr , opts ),
350+ )
342351 } else {
343352 dialOption := []grpc.DialOption {grpc .WithTransportCredentials (insecure .NewCredentials ()),
344353 grpc .WithDefaultCallOptions (grpc .MaxCallRecvMsgSize (math .MaxInt ))}
345354 err = errors .Join (
346355 server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ),
347356 server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ),
348357 server .RegisterThemeExtensionHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ),
349- server .RegisterDataServerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ))
358+ server .RegisterDataServerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ),
359+ server .RegisterUIExtensionHandlerFromEndpoint (ctx , mux , gRPCServerAddr , dialOption ),
360+ )
350361 }
351362
352363 if err == nil {
@@ -426,13 +437,14 @@ func postRequestProxy(proxy string) func(w http.ResponseWriter, r *http.Request,
426437 }
427438}
428439
429- func startPlugins (storeExtMgr server.ExtManager , kinds * server.StoreKinds ) (err error ) {
430- const socketPrefix = "unix://"
431-
432- for _ , kind := range kinds .Data {
433- if kind .Enabled && (strings .HasPrefix (kind .Url , socketPrefix ) || strings .Contains (kind .Url , ":" )) {
434- err = errors .Join (err , storeExtMgr .Start (kind .Name , kind .Url ))
440+ func startPlugins (storeExtMgr server.ExtManager , stores * server.Stores ) (err error ) {
441+ for _ , store := range stores .Data {
442+ if store .Disabled || store .Kind == nil {
443+ continue
435444 }
445+
446+ kind := store .Kind
447+ err = errors .Join (err , storeExtMgr .Start (kind .Name , kind .Url ))
436448 }
437449 return
438450}
0 commit comments