You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.2 KiB
80 lines
2.2 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
auth_api "git.vdhsn.com/barretthousen/barretthousen/src/auth/api/grpc"
|
|
api "git.vdhsn.com/barretthousen/barretthousen/src/catalog/api/grpc"
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/lib/kernel"
|
|
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/backoff"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
)
|
|
|
|
type ProxyClientApp struct {
|
|
LogLevel kernel.LogLevel `yaml:"log_level" yaml-default:"0"`
|
|
Port int `yaml:"port"`
|
|
Endpoints struct {
|
|
Catalog string `yaml:"catalog"`
|
|
Auth string `yaml:"auth"`
|
|
} `yaml:"endpoints" env:"PROXY_CLIENT_SERVICES"`
|
|
}
|
|
|
|
func (app *ProxyClientApp) Start(ctx context.Context) error {
|
|
grpcMux := runtime.NewServeMux()
|
|
grpcOpts := []grpc.DialOption{
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
grpc.WithConnectParams(grpc.ConnectParams{
|
|
Backoff: backoff.Config{
|
|
MaxDelay: time.Second * 3,
|
|
},
|
|
MinConnectTimeout: time.Second,
|
|
}),
|
|
}
|
|
|
|
if err := api.RegisterCatalogHandlerFromEndpoint(ctx, grpcMux, app.Endpoints.Catalog, grpcOpts); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := auth_api.RegisterAuthHandlerFromEndpoint(ctx, grpcMux, app.Endpoints.Auth, grpcOpts); err != nil {
|
|
return err
|
|
}
|
|
|
|
kernel.TraceLog.Printf("%+v", app)
|
|
|
|
httpServer := &http.Server{
|
|
Addr: fmt.Sprintf("0.0.0.0:%d", app.Port),
|
|
ReadHeaderTimeout: time.Second,
|
|
Handler: http.StripPrefix("/api", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
kernel.TraceLog.Printf("{ \"Client\": \"%s\", \"Path\":\"%s\", \"User-Agent\":\"%s\", \"Host\":\"%s\", \"Origin\":\"%s\"} ", r.RemoteAddr, r.URL, r.UserAgent(), r.Host, r.Header.Get("Origin"))
|
|
|
|
if strings.HasPrefix(r.Host, "proxy-") {
|
|
w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin"))
|
|
}
|
|
|
|
grpcMux.ServeHTTP(w, r)
|
|
})),
|
|
}
|
|
|
|
kernel.InfoLog.Printf("Starting HTTP proxy @ %q", httpServer.Addr)
|
|
|
|
return httpServer.ListenAndServe()
|
|
}
|
|
|
|
func (app *ProxyClientApp) OnStop(ctx context.Context) {
|
|
}
|
|
|
|
func (app *ProxyClientApp) GetLogLevel() kernel.LogLevel { return app.LogLevel }
|
|
|
|
func main() {
|
|
kernel.Run(context.Background(), &ProxyClientApp{
|
|
LogLevel: kernel.LevelTrace,
|
|
Port: 80,
|
|
})
|
|
}
|