@@ -55,6 +55,7 @@ import (
5555 "github.com/spf13/cobra"
5656 "golang.org/x/oauth2"
5757 "google.golang.org/grpc"
58+ "google.golang.org/grpc/credentials"
5859 "google.golang.org/grpc/credentials/insecure"
5960 "google.golang.org/grpc/metadata"
6061 "google.golang.org/grpc/reflection"
@@ -98,6 +99,10 @@ func createServerCmd(execer fakeruntime.Execer, httpServer server.HTTPServer) (c
9899
99100 // gc related flags
100101 flags .IntVarP (& opt .gcPercent , "gc-percent" , "" , 100 , "The GC percent of Go" )
102+ //grpc_tls
103+ flags .BoolVarP (& opt .tls , "tls-grpc" , "" , false , "Enable TLS mode. Set to true to enable TLS. Alow SAN certificates" )
104+ flags .StringVarP (& opt .tlsCert , "cert-file" , "" , "" ,"The path to the certificate file, Alow SAN certificates" )
105+ flags .StringVarP (& opt .tlsKey , "key-file" , "" , "" , "The path to the key file, Alow SAN certificates" )
101106
102107 c .Flags ().MarkHidden ("dry-run" )
103108 c .Flags ().MarkHidden ("gc-percent" )
@@ -139,6 +144,9 @@ type serverOption struct {
139144
140145 // inner fields, not as command flags
141146 provider oauth.OAuthProvider
147+ tls bool
148+ tlsCert string
149+ tlsKey string
142150}
143151
144152func (o * serverOption ) preRunE (cmd * cobra.Command , args []string ) (err error ) {
@@ -170,7 +178,15 @@ func (o *serverOption) preRunE(cmd *cobra.Command, args []string) (err error) {
170178
171179 grpcOpts = append (grpcOpts , oauth .NewAuthInterceptor (o .oauthGroup ))
172180 }
173-
181+ if o .tls {
182+ if o .tlsCert != "" && o .tlsKey != "" {
183+ creds , err := credentials .NewServerTLSFromFile (o .tlsCert , o .tlsKey )
184+ if err != nil {
185+ return fmt .Errorf ("failed to load credentials: %v" , err )
186+ }
187+ grpcOpts = append (grpcOpts , grpc .Creds (creds ))
188+ }
189+ }
174190 if o .dryRun {
175191 o .gRPCServer = & fakeGRPCServer {}
176192 } else {
@@ -269,9 +285,19 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
269285 gRPCServerAddr := fmt .Sprintf ("127.0.0.1:%s" , gRPCServerPort )
270286
271287 mux := runtime .NewServeMux (runtime .WithMetadata (server .MetadataStoreFunc ))
272- err = errors .Join (
273- server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (insecure .NewCredentials ())}),
274- server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (insecure .NewCredentials ())}))
288+ if o .tls {
289+ creds ,err := credentials .NewClientTLSFromFile (o .tlsCert ,"localhost" )
290+ if err != nil {
291+ return fmt .Errorf ("failed to load credentials: %v" , err )
292+ }
293+ err = errors .Join (
294+ server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}),
295+ server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (creds )}))
296+ }else {
297+ err = errors .Join (
298+ server .RegisterRunnerHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (insecure .NewCredentials ())}),
299+ server .RegisterMockHandlerFromEndpoint (ctx , mux , gRPCServerAddr , []grpc.DialOption {grpc .WithTransportCredentials (insecure .NewCredentials ())}))
300+ }
275301 if err == nil {
276302 mux .HandlePath (http .MethodGet , "/" , frontEndHandlerWithLocation (o .consolePath ))
277303 mux .HandlePath (http .MethodGet , "/assets/{asset}" , frontEndHandlerWithLocation (o .consolePath ))
0 commit comments