From e29d79e5f9785d039175da43704d02907b54ab47 Mon Sep 17 00:00:00 2001 From: KatolaZ Date: Sat, 1 Jul 2017 00:45:51 +0100 Subject: basic templating added (only for paste visualisation) --- html/footer.html | 2 ++ html/header.html | 11 ++++++++ html/templ.html | 7 +++++ main.go | 12 +++++++- templ.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 html/footer.html create mode 100644 html/header.html create mode 100644 html/templ.html create mode 100644 templ.go diff --git a/html/footer.html b/html/footer.html new file mode 100644 index 0000000..9743df7 --- /dev/null +++ b/html/footer.html @@ -0,0 +1,2 @@ + + diff --git a/html/header.html b/html/header.html new file mode 100644 index 0000000..0cdb721 --- /dev/null +++ b/html/header.html @@ -0,0 +1,11 @@ + + + binit + + + + + diff --git a/html/templ.html b/html/templ.html new file mode 100644 index 0000000..2e86f38 --- /dev/null +++ b/html/templ.html @@ -0,0 +1,7 @@ + + +
+{{CONTENT}}
+
+ + diff --git a/main.go b/main.go index 2ab4a81..76bc4a0 100644 --- a/main.go +++ b/main.go @@ -52,7 +52,15 @@ func handle_get_paste(w http.ResponseWriter, r *http.Request) { } else { // otherwise, if the requested paste exists, we serve it... if _, err = os.Stat(paste_name); err == nil && orig_name != "./" { - http.ServeFile(w, r, paste_name) + //http.ServeFile(w, r, paste_name) + s, err := prepare_paste_page(&p_conf, orig_name) + if err == nil { + fmt.Fprintf(w, "%s", s) + return + } else { + fmt.Fprintf(w, "Error recovering paste '%s'\n", orig_name) + return + } } else { // otherwise, we give say we didn't find it fmt.Fprintf(w, "Paste '%s' not found\n", orig_name) @@ -142,6 +150,8 @@ func main() { fmt.Fprintf(os.Stderr, "Error opening logfile: %s. Exiting\n", p_conf.log_fname) os.Exit(1) } + defer f.Close() + log.SetOutput(io.Writer(f)) log.SetPrefix("[binit]: ") diff --git a/templ.go b/templ.go new file mode 100644 index 0000000..72656bd --- /dev/null +++ b/templ.go @@ -0,0 +1,84 @@ +/* +* +* Templating support for binit +* +*/ + +package main + + +import ( + "os" + "io/ioutil" + "regexp" + "errors" +) + + +func prepare_paste_page(c *Config, paste_ID string) (string, error) { + + s:= "" + + // insert header + + head_file := c.templ_dir + "/header.html" + + f_head, err := os.Open(head_file) + defer f_head.Close() + + if err == nil { + cont, err := ioutil.ReadFile(head_file) + if err == nil{ + s += string(cont) + } + } + + // insert content + + cont_file := c.paste_dir + "/" + paste_ID + f_cont, err := os.Open(cont_file) + defer f_cont.Close() + + if err == nil { + // Let's read the content of the paste + + cont, err := ioutil.ReadFile(cont_file) + if err == nil { + paste_buf := string(cont) + + // ...Let's read the template + templ_file := c.templ_dir + "/templ.html" + f_templ, err := os.Open(templ_file) + defer f_templ.Close() + + cont, err := ioutil.ReadFile(templ_file) + if err == nil { + tmpl := string(cont) + // ...and replace {{CONTENT}} with the paste itself! + re,_ := regexp.Compile("{{CONTENT}}") + tmpl = string(re.ReplaceAll([]byte(tmpl), []byte(paste_buf))) + + s += tmpl + + } else { + return "", errors.New("Error opening template file") + } + + } else { + return "", errors.New("Error opening paste") + } + } + // insert footer + foot_file := c.templ_dir + "/footer.html" + f_foot, err := os.Open(foot_file) + defer f_foot.Close() + + if err == nil { + cont, err := ioutil.ReadFile(foot_file) + if err == nil{ + s += string(cont) + } + } + + return s, nil +} -- cgit v1.2.3