diff options
Diffstat (limited to 'src/helsinki.at/rhimportd/ctrlWeb.go')
-rw-r--r-- | src/helsinki.at/rhimportd/ctrlWeb.go | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/helsinki.at/rhimportd/ctrlWeb.go b/src/helsinki.at/rhimportd/ctrlWeb.go index 04180ae..275f095 100644 --- a/src/helsinki.at/rhimportd/ctrlWeb.go +++ b/src/helsinki.at/rhimportd/ctrlWeb.go @@ -32,12 +32,39 @@ import ( _ "net/http/pprof" ) -func StartControlWeb(addr_s string) { - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) - ctx := new(rhimport.ImportContext) - rhimport.ImportFile(ctx) - }) +type webHandler struct { + *rhimport.Config + H func(*rhimport.Config, http.ResponseWriter, *http.Request) (int, error) +} + +func (self webHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + status, err := self.H(self.Config, w, r) + if err != nil { + switch status { + case http.StatusNotFound: + http.NotFound(w, r) + default: + http.Error(w, fmt.Sprintf("%s: %s", http.StatusText(status), err), status) + } + } +} + +func IndexHandler(conf *rhimport.Config, w http.ResponseWriter, r *http.Request) (status int, err error) { + + ctx := rhimport.NewImportContext(conf, "hugo", "test", 17324) + ctx.SourceFile = html.EscapeString(r.URL.Path) + ctx.DeleteSourceFile = true + + if err = rhimport.ImportFile(ctx); err != nil { + status = http.StatusInternalServerError + } else { + status = http.StatusOK + } + return +} + +func StartControlWeb(addr_s string, conf *rhimport.Config) { + http.Handle("/", webHandler{conf, IndexHandler}) rhl.Println("listening on", addr_s) http.ListenAndServe(addr_s, nil) |