diff --git a/cmd/dkl-local-server/http.go b/cmd/dkl-local-server/http.go deleted file mode 100644 index b11645e..0000000 --- a/cmd/dkl-local-server/http.go +++ /dev/null @@ -1,76 +0,0 @@ -package main - -import ( - "flag" - "log" - "net/http" - "regexp" - - "novit.nc/direktil/pkg/localconfig" -) - -var ( - reHost = regexp.MustCompile("^/hosts/([^/]+)/([^/]+)$") - - trustXFF = flag.Bool("trust-xff", true, "Trust the X-Forwarded-For header") -) - -func renderHost(w http.ResponseWriter, r *http.Request, what string, host *localconfig.Host, cfg *localconfig.Config) { - ctx, err := newRenderContext(host, cfg) - if err != nil { - log.Printf("host %s: %s: failed to render: %v", what, host.Name, err) - http.Error(w, "", http.StatusServiceUnavailable) - return - } - - switch what { - case "ipxe": - w.Header().Set("Content-Type", "text/x-ipxe") - case "config": - w.Header().Set("Content-Type", "text/vnd.yaml") - default: - w.Header().Set("Content-Type", "application/octet-stream") - } - - switch what { - case "ipxe": - err = renderIPXE(w, ctx) - - case "kernel": - err = renderKernel(w, r, ctx) - - case "initrd": - err = renderCtx(w, r, ctx, what, buildInitrd) - - case "boot.iso": - err = renderCtx(w, r, ctx, what, buildBootISO) - - case "boot.tar": - err = renderCtx(w, r, ctx, what, buildBootTar) - - case "boot.img": - err = renderCtx(w, r, ctx, what, buildBootImg) - - case "boot.img.gz": - err = renderCtx(w, r, ctx, what, buildBootImgGZ) - - case "boot.img.lz4": - err = renderCtx(w, r, ctx, what, buildBootImgLZ4) - - case "config": - err = renderConfig(w, r, ctx) - - default: - http.NotFound(w, r) - } - - if err != nil { - if isNotFound(err) { - log.Printf("host %s: %s: %v", what, host.Name, err) - http.NotFound(w, r) - } else { - log.Printf("host %s: %s: failed to render: %v", what, host.Name, err) - http.Error(w, "", http.StatusServiceUnavailable) - } - } -} diff --git a/cmd/dkl-local-server/ws-host.go b/cmd/dkl-local-server/ws-host.go index 7eebc99..5d2279f 100644 --- a/cmd/dkl-local-server/ws-host.go +++ b/cmd/dkl-local-server/ws-host.go @@ -1,14 +1,19 @@ package main import ( + "flag" "log" + "net/http" "path" restful "github.com/emicklei/go-restful" "novit.nc/direktil/local-server/pkg/mime" + "novit.nc/direktil/pkg/localconfig" ) +var trustXFF = flag.Bool("trust-xff", true, "Trust the X-Forwarded-For header") + type wsHost struct { prefix string getHost func(req *restful.Request) string @@ -90,3 +95,63 @@ func (ws *wsHost) render(req *restful.Request, resp *restful.Response) { renderHost(resp.ResponseWriter, req.Request, what, host, cfg) } + +func renderHost(w http.ResponseWriter, r *http.Request, what string, host *localconfig.Host, cfg *localconfig.Config) { + ctx, err := newRenderContext(host, cfg) + if err != nil { + log.Printf("host %s: %s: failed to render: %v", what, host.Name, err) + http.Error(w, "", http.StatusServiceUnavailable) + return + } + + switch what { + case "ipxe": + w.Header().Set("Content-Type", "text/x-ipxe") + case "config": + w.Header().Set("Content-Type", "text/vnd.yaml") + default: + w.Header().Set("Content-Type", "application/octet-stream") + } + + switch what { + case "ipxe": + err = renderIPXE(w, ctx) + + case "kernel": + err = renderKernel(w, r, ctx) + + case "initrd": + err = renderCtx(w, r, ctx, what, buildInitrd) + + case "boot.iso": + err = renderCtx(w, r, ctx, what, buildBootISO) + + case "boot.tar": + err = renderCtx(w, r, ctx, what, buildBootTar) + + case "boot.img": + err = renderCtx(w, r, ctx, what, buildBootImg) + + case "boot.img.gz": + err = renderCtx(w, r, ctx, what, buildBootImgGZ) + + case "boot.img.lz4": + err = renderCtx(w, r, ctx, what, buildBootImgLZ4) + + case "config": + err = renderConfig(w, r, ctx) + + default: + http.NotFound(w, r) + } + + if err != nil { + if isNotFound(err) { + log.Printf("host %s: %s: %v", what, host.Name, err) + http.NotFound(w, r) + } else { + log.Printf("host %s: %s: failed to render: %v", what, host.Name, err) + http.Error(w, "", http.StatusServiceUnavailable) + } + } +}