From 13c5a2ab438f2496370ef10e7df8096e30962b66 Mon Sep 17 00:00:00 2001 From: KatolaZ Date: Mon, 3 Jul 2017 13:41:00 +0100 Subject: paste.Retrieve(). Small changes to the template --- binnit.go | 11 +++---- html/templ.html | 7 +++++ paste/paste.go | 25 ++++++++++++++-- templ.go | 89 +++++++++++++++++++++++++-------------------------------- 4 files changed, 75 insertions(+), 57 deletions(-) diff --git a/binnit.go b/binnit.go index 0c4c49d..1b11f03 100644 --- a/binnit.go +++ b/binnit.go @@ -61,7 +61,6 @@ func min (a, b int) int { func handle_get_paste(w http.ResponseWriter, r *http.Request) { var paste_name, orig_name string - var err error orig_name = filepath.Clean(r.URL.Path) paste_name = p_conf.paste_dir + "/" + orig_name @@ -75,9 +74,11 @@ func handle_get_paste(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, p_conf.templ_dir + "/index.html") } 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) - s, err := prepare_paste_page(&p_conf, orig_name) + + title, date, content, err := paste.Retrieve(paste_name) + + if err == nil { + s, err := prepare_paste_page(title, date, content, p_conf.templ_dir) if err == nil { fmt.Fprintf(w, "%s", s) return @@ -87,7 +88,7 @@ func handle_get_paste(w http.ResponseWriter, r *http.Request) { } } else { // otherwise, we give say we didn't find it - fmt.Fprintf(w, "Paste '%s' not found\n", orig_name) + fmt.Fprintf(w, "%s\n", err) return } } diff --git a/html/templ.html b/html/templ.html index 2e86f38..8b951d8 100644 --- a/html/templ.html +++ b/html/templ.html @@ -1,5 +1,12 @@ +
+ Title: {{TITLE}} +
+
+ Date: {{DATE}} +
+
 {{CONTENT}}
 
diff --git a/paste/paste.go b/paste/paste.go index ce06f6a..a55a3b3 100644 --- a/paste/paste.go +++ b/paste/paste.go @@ -7,6 +7,8 @@ import( "os" "io/ioutil" "errors" + "bufio" + "strings" ) @@ -44,9 +46,28 @@ func Store(title, date, content, dest_dir string) (string, error) { } -//func Retrieve(URI string) (title, date, content string) { +func Retrieve(URI string) (title, date, content string, err error) { + f_cont, err := os.Open(URI) + defer f_cont.Close() -//} + if err == nil { + stuff := bufio.NewScanner(f_cont) + // The first line contains the title + stuff.Scan() + title = strings.Trim(strings.Split(stuff.Text(), ":")[1], " ") + stuff.Scan() + date = strings.Trim(strings.Join(strings.Split(stuff.Text(), ":")[1:], ":"), " ") + for stuff.Scan() { + content += stuff.Text() + } + } else { + + return "", "", "", errors.New("Cannot retrieve paste!!!") + } + + return title, date, content, nil +} + diff --git a/templ.go b/templ.go index 2e018da..f12fbd6 100644 --- a/templ.go +++ b/templ.go @@ -14,9 +14,9 @@ * . * * (c) Vincenzo "KatolaZ" Nicosia 2017 -- - * - * - * This file is part of "binnit", a minimal no-fuss pastebin-like + * + * + * This file is part of "binnit", a minimal no-fuss pastebin-like * server written in golang * */ @@ -25,83 +25,72 @@ * * minimal Templating support for binit * -*/ + */ package main - import ( - "os" + "errors" "io/ioutil" + "os" "regexp" - "errors" ) +func prepare_paste_page(title, date, content, templ_dir string) (string, error) { -func prepare_paste_page(c *Config, paste_ID string) (string, error) { - - s:= "" + s := "" // insert header - head_file := c.templ_dir + "/header.html" + head_file := templ_dir + "/header.html" f_head, err := os.Open(head_file) defer f_head.Close() - - if err == nil { + + if err == nil { cont, err := ioutil.ReadFile(head_file) - if err == nil{ + 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() + // insert content - if err == nil { - // Let's read the content of the paste + // ...Let's read the template + templ_file := templ_dir + "/templ.html" + f_templ, err := os.Open(templ_file) + defer f_templ.Close() - 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") - } + + if cont, err := ioutil.ReadFile(templ_file); err == nil { + tmpl := string(cont) + // ...and replace {{CONTENT}} with the paste itself! + re, _ := regexp.Compile("{{TITLE}}") + tmpl = string(re.ReplaceAll([]byte(tmpl), []byte(title))) + + re, _ = regexp.Compile("{{DATE}}") + tmpl = string(re.ReplaceAll([]byte(tmpl), []byte(date))) + + re, _ = regexp.Compile("{{CONTENT}}") + tmpl = string(re.ReplaceAll([]byte(tmpl), []byte(content))) + + s += tmpl + + } else { + return "", errors.New("Error opening template file") } + // insert footer - foot_file := c.templ_dir + "/footer.html" + foot_file := templ_dir + "/footer.html" f_foot, err := os.Open(foot_file) defer f_foot.Close() - if err == nil { + if err == nil { cont, err := ioutil.ReadFile(foot_file) - if err == nil{ + if err == nil { s += string(cont) } } - + return s, nil } -- cgit v1.2.3