feat: add update endpoint to free the API port

feature/http-overhaul
nils måsén 3 years ago
parent f508c92ae0
commit f1665246f6

@ -3,6 +3,7 @@ package api
import (
"fmt"
log "github.com/sirupsen/logrus"
"golang.org/x/net/context"
"net/http"
)
@ -10,16 +11,31 @@ const tokenMissingMsg = "api token is empty or has not been set. exiting"
// API is the http server responsible for serving the HTTP API endpoints
type API struct {
Token string
hasHandlers bool
Token string
hasHandlers bool
Server *http.Server
ShutdownContext *context.Context
}
// New is a factory function creating a new API instance
func New(token string) *API {
return &API{
api := &API{
Token: token,
hasHandlers: false,
}
http.Handle("/v1/prepare-self-update", api.RequireToken(api.handlePrepareUpdate))
return api
}
func (api *API) handlePrepareUpdate(writer http.ResponseWriter, _ *http.Request) {
err := api.Server.Shutdown(context.Background())
if err != http.ErrServerClosed && err != nil {
writer.WriteHeader(500)
_, _ = writer.Write([]byte(err.Error()))
} else {
writer.WriteHeader(201)
}
}
// RequireToken is wrapper around http.HandleFunc that checks token validity
@ -61,16 +77,19 @@ func (api *API) Start(block bool) error {
log.Info("Watchtower HTTP API started.")
if block {
runHTTPServer()
api.runHTTPServer()
} else {
go func() {
runHTTPServer()
api.runHTTPServer()
}()
}
return nil
}
func runHTTPServer() {
func (api *API) runHTTPServer() {
log.Info("Serving HTTP")
log.Fatal(http.ListenAndServe(":8080", nil))
api.Server = &http.Server{Addr: ":8080", Handler: nil}
if err := api.Server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal(err)
}
}

Loading…
Cancel
Save