summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binnit.go11
-rw-r--r--html/templ.html7
-rw-r--r--paste/paste.go25
-rw-r--r--templ.go89
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 @@
<body>
+ <div>
+ Title: {{TITLE}}
+ </div>
+ <div>
+ Date: {{DATE}}
+ </div>
+
<pre>
{{CONTENT}}
</pre>
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 @@
* <http://www.gnu.org/licenses/>.
*
* (c) Vincenzo "KatolaZ" Nicosia 2017 -- <katolaz@freaknet.org>
- *
- *
- * 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
}