From c79e605b60040c4c0e5c792fa447487c2b8ae246 Mon Sep 17 00:00:00 2001 From: horus_arch Date: Mon, 15 Jun 2015 13:38:47 +0200 Subject: Use flex to extract html. Icono-font used for icons. --- intercept.go | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 intercept.go (limited to 'intercept.go') diff --git a/intercept.go b/intercept.go new file mode 100644 index 0000000..8201f3e --- /dev/null +++ b/intercept.go @@ -0,0 +1,107 @@ +package main + +import ( + "html/template" + "log" + "net/http" + "sort" + "strings" +) + +type TemplateHandler struct { + handler http.Handler +} + +func (t *TemplateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + + w.Header().Set("Server", "uhttpd") + + // We use our custom handler to prettify directories. Files are served via default. + if !strings.HasSuffix(r.URL.Path, "/") { + t.handler.ServeHTTP(w, r) + return + } + + rec := NewRecorder() + + defer rec.Body.Reset() + + // passing the recorder instead of the real ResponseWriter + t.handler.ServeHTTP(rec, r) + + // let the standard lib handle all the caching + if rec.Code > 300 && rec.Code < 400 { + log.Println("Code: ", rec.Code) + t.handler.ServeHTTP(w, r) + return + } + + // we copy the original headers first + for k, v := range rec.Header() { + w.Header()[k] = v + } + + // not found + if rec.Code == 404 { + w.Header().Set("Content-Type", "text/html") + w.WriteHeader(404) + tmpl := template.New("404") + tmpl, err := tmpl.Parse(get404()) + if err != nil { + log.Println(err.Error()) + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + err = tmpl.Execute(w, struct{ URL string }{URL: r.URL.Path}) + if err != nil { + log.Println(err.Error()) + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + return + } + + // we serve a file instead of a html page + if !strings.Contains(w.Header().Get("Content-Type"), "text/html") { + w.Write(rec.Body.Bytes()) + return + } + + data := rec.Body.String() + + // we serve the directoy page + if strings.HasPrefix(data, "
") {
+		execTemplate(w, r, data)
+	} else {
+		w.Write(rec.Body.Bytes())
+	}
+}
+
+func execTemplate(w http.ResponseWriter, r *http.Request, data string) {
+
+	links := getToken(data)
+	sort.Sort(LinksAsSlice(links)) // see sort.go
+
+	tmpl := template.New("page")
+	tmpl, err := tmpl.Parse(getTemplate())
+	if err != nil {
+		log.Println(err.Error())
+		w.WriteHeader(500)
+		w.Write([]byte(err.Error()))
+		return
+	}
+
+	err = tmpl.Execute(w, struct {
+		Links       []Link
+		URL         string
+		Favicon     template.HTML
+		AllowUpload bool
+	}{Links: links, URL: r.URL.Path, Favicon: getFavicon(), AllowUpload: _allow_upload})
+	if err != nil {
+		log.Println(err)
+	}
+
+}
-- 
cgit v1.2.3