storj/pkg/satellite/satelliteweb/gateway.go
2018-11-15 14:00:08 +02:00

45 lines
1.1 KiB
Go

// Copyright (C) 2018 Storj Labs, Inc.
// See LICENSE for copying information.
package satelliteweb
import (
"net/http"
"path/filepath"
"go.uber.org/zap"
"github.com/graphql-go/graphql"
)
// GatewayConfig contains configuration for gateway
type GatewayConfig struct {
Address string `help:"server address of the graphql api gateway and frontend app" default:"127.0.0.1:8081"`
StaticPath string `help:"path to static resources" default:""`
}
type gateway struct {
schema graphql.Schema
config GatewayConfig
logger *zap.SugaredLogger
}
func (gw *gateway) run() {
mux := http.NewServeMux()
fs := http.FileServer(http.Dir(gw.config.StaticPath))
mux.Handle("/api/graphql/v0", http.HandlerFunc(gw.grapqlHandler))
if gw.config.StaticPath != "" {
mux.Handle("/", http.HandlerFunc(gw.appHandler))
mux.Handle("/static/", http.StripPrefix("/static", fs))
}
err := http.ListenAndServe(gw.config.Address, mux)
gw.logger.Errorf("unexpected exit of satellite gateway server: ", err)
}
func (gw *gateway) appHandler(w http.ResponseWriter, req *http.Request) {
http.ServeFile(w, req, filepath.Join(gw.config.StaticPath, "dist", "public", "index.html"))
}