grpc/service/web.go

50 lines
1.1 KiB
Go
Raw Normal View History

package service
import (
"net/http"
"time"
"github.com/improbable-eng/grpc-web/go/grpcweb"
"go.linka.cloud/grpc-toolkit/react"
)
var defaultWebOptions = []grpcweb.Option{
grpcweb.WithWebsockets(true),
grpcweb.WithWebsocketOriginFunc(func(req *http.Request) bool {
return true
}),
grpcweb.WithCorsForRegisteredEndpointsOnly(false),
grpcweb.WithOriginFunc(func(origin string) bool {
return true
}),
grpcweb.WithWebsocketPingInterval(time.Second),
}
func (s *service) grpcWeb(opts ...grpcweb.Option) error {
if !s.opts.grpcWeb {
return nil
}
2021-09-30 16:10:12 +00:00
h := grpcweb.WrapServer(s.server, append(defaultWebOptions, opts...)...)
for _, v := range grpcweb.ListGRPCResources(s.server) {
if s.opts.grpcWebPrefix != "" {
s.lazyMux().Handle(s.opts.grpcWebPrefix+v, http.StripPrefix(s.opts.grpcWebPrefix, h))
} else {
s.lazyMux().Handle(v, h)
}
}
return nil
}
func (s *service) reactApp() error {
if !s.opts.hasReactUI {
return nil
}
h, err := react.NewHandler(s.opts.reactUI, s.opts.reactUISubPath)
if err != nil {
return err
}
s.lazyMux().Handle("/", h)
return nil
}