diff options
Diffstat (limited to 'server/rest.go')
| -rw-r--r-- | server/rest.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/server/rest.go b/server/rest.go new file mode 100644 index 0000000..3dd0f0c --- /dev/null +++ b/server/rest.go @@ -0,0 +1,40 @@ +package server + +import ( + "fmt" + "git.rodere.systems/stream-service/api" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "log" + "net/http" +) + +// Start the REST HTTP API server +func startRESTServer(address, grpcAddress, certFile string) error { + ctx := context.Background() + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(credMatcher)) + + creds, err := credentials.NewClientTLSFromFile(certFile, "") + if err != nil { + return fmt.Errorf("could not load TLS certificate: %s", err) + } + + // Setup the client gRPC options + opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)} + + // Register ping + err = api.RegisterPingHandlerFromEndpoint(ctx, mux, grpcAddress, opts) + if err != nil { + return fmt.Errorf("could not register service Ping: %s", err) + } + + log.Printf("starting HTTP/1.1 REST server on %s", address) + http.ListenAndServe(address, mux) + + return nil +} |
