summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dossier/wiki/handlers.go44
-rw-r--r--src/dossier/wiki/page.go17
-rw-r--r--src/dossier/wiki/utils.go14
3 files changed, 75 insertions, 0 deletions
diff --git a/src/dossier/wiki/handlers.go b/src/dossier/wiki/handlers.go
new file mode 100644
index 0000000..4f241eb
--- /dev/null
+++ b/src/dossier/wiki/handlers.go
@@ -0,0 +1,44 @@
1package wiki
2
3import (
4 "fmt"
5 "net/http"
6)
7
8func SaveHandler(w http.ResponseWriter, r *http.Request) {
9 var title string = r.URL.Path[len("/save/"):]
10 body := r.FormValue("body")
11 p := &Page{Title: title, Body: []byte(body)}
12 var err error = p.Save()
13 if err != nil {
14 fmt.Fprintf(w, "500: %s", err)
15 return
16 }
17 http.Redirect(w, r, "/view/"+title, http.StatusFound)
18}
19
20func EditHandler(w http.ResponseWriter, r *http.Request) {
21 var title string = r.URL.Path[len("/edit/"):]
22 p, err := loadPage(title)
23 if err != nil {
24 p = &Page{Title: title}
25 }
26 fmt.Fprintf(w, "<h1>Editing %s</h1>"+
27 "<form action=\"/save/%s\" method=\"POST\">"+
28 "<textarea name=\"body\">%s</textarea><br>"+
29 "<input type=\"submit\" value=\"Save\">"+
30 "</form>",
31 p.Title, p.Title, p.Body)
32}
33
34func PageHandler(w http.ResponseWriter, r *http.Request) {
35 var title string = r.URL.Path[len("/view/"):]
36
37 p, err := loadPage(title)
38 if err != nil {
39 http.Redirect(w, r, "/edit/"+title, http.StatusFound)
40 return
41 }
42
43 fmt.Fprintf(w, "<h1>%s</h1><hr>%s", p.Title, p.Body)
44}
diff --git a/src/dossier/wiki/page.go b/src/dossier/wiki/page.go
new file mode 100644
index 0000000..2bf1368
--- /dev/null
+++ b/src/dossier/wiki/page.go
@@ -0,0 +1,17 @@
1package wiki
2
3import (
4 "io/ioutil"
5)
6
7const FILE_EXTENSION string = ".md"
8
9type Page struct {
10 Title string
11 Body []byte // markdown filled body
12}
13
14func (p *Page) Save() error {
15 filename := p.Title + FILE_EXTENSION
16 return ioutil.WriteFile(filename, p.Body, 0600)
17}
diff --git a/src/dossier/wiki/utils.go b/src/dossier/wiki/utils.go
new file mode 100644
index 0000000..58e98f7
--- /dev/null
+++ b/src/dossier/wiki/utils.go
@@ -0,0 +1,14 @@
1package wiki
2
3import "io/ioutil"
4
5func loadPage(title string) (*Page, error) {
6 var filename string = title + FILE_EXTENSION
7
8 body, err := ioutil.ReadFile(filename)
9 if err != nil {
10 return nil, err
11 }
12
13 return &Page{Title: title, Body: body}, nil
14}