mirror of
https://github.com/containrrr/watchtower.git
synced 2026-02-11 01:44:20 +01:00
Make api URL dynamic in web app
This commit is contained in:
parent
ad12b483ff
commit
57b4862a5b
4 changed files with 76 additions and 26 deletions
|
|
@ -25,8 +25,7 @@ func New(token string) *API {
|
|||
|
||||
func (api *API) EnableCors(fn http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Add("Access-Control-Allow-Origin", "http://localhost:8001") // todo: configurable port
|
||||
w.Header().Add("Access-Control-Allow-Credentials", "true")
|
||||
w.Header().Add("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Add("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||
w.Header().Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,36 +1,82 @@
|
|||
package dashboard
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// Dashboard is the http server responsible for serving the static Dashboard files
|
||||
type Dashboard struct {
|
||||
port string
|
||||
rootDir string
|
||||
apiPort string
|
||||
apiScheme string
|
||||
apiVersion string
|
||||
}
|
||||
|
||||
// New is a factory function creating a new Dashboard instance
|
||||
func New() *Dashboard {
|
||||
return &Dashboard{}
|
||||
const webRootDir = "./web/static" // Todo: needs to work in containerized environment
|
||||
const webPort = "8001" // Todo: make configurable?
|
||||
const apiPort = "8080" // Todo: make configurable?
|
||||
|
||||
return &Dashboard{
|
||||
apiPort: apiPort,
|
||||
apiScheme: "http",
|
||||
apiVersion: "v1",
|
||||
rootDir: webRootDir,
|
||||
port: webPort,
|
||||
}
|
||||
}
|
||||
|
||||
// Start the Dashboard and serve over HTTP
|
||||
func (dashboard *Dashboard) Start() error {
|
||||
func (d *Dashboard) Start() error {
|
||||
go func() {
|
||||
runHTTPServer()
|
||||
d.runHTTPServer()
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func runHTTPServer() {
|
||||
func (d *Dashboard) templatedHttpHandler(h http.Handler) http.HandlerFunc {
|
||||
const apiUrlTemplate = "%s://%s:%s/%s/"
|
||||
indexTemplate, err := template.ParseFiles(d.rootDir + "/index.html")
|
||||
if err != nil {
|
||||
log.Error("Error when parsing index template")
|
||||
log.Error(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path == "/" {
|
||||
hostName := strings.Split(r.Host, ":")[0]
|
||||
apiUrl := fmt.Sprintf(apiUrlTemplate, d.apiScheme, hostName, d.apiPort, d.apiVersion)
|
||||
err = indexTemplate.Execute(w, struct{ ApiUrl string }{
|
||||
ApiUrl: apiUrl,
|
||||
})
|
||||
if err != nil {
|
||||
log.Error("Error when executing index template")
|
||||
log.Error(err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
h.ServeHTTP(w, r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Dashboard) getHandler() http.Handler {
|
||||
return d.templatedHttpHandler(http.FileServer(http.Dir(d.rootDir)))
|
||||
}
|
||||
|
||||
func (d *Dashboard) runHTTPServer() {
|
||||
serveMux := http.NewServeMux()
|
||||
serveMux.Handle("/", getHandler())
|
||||
serveMux.Handle("/", d.getHandler())
|
||||
|
||||
log.Debug("Starting http dashboard server")
|
||||
log.Fatal(http.ListenAndServe(":8001", serveMux))
|
||||
}
|
||||
|
||||
func getHandler() http.Handler {
|
||||
return http.FileServer(http.Dir("./web/static"))
|
||||
log.Fatal(http.ListenAndServe(":"+d.port, serveMux))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue