From ff408df58ba6b7e21b9b0ce387c2fb477b19a53b Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 30 Dec 2014 22:08:30 -0700 Subject: Basic file saving web server. --- src/dossier/wiki/handlers.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/dossier/wiki/page.go | 17 +++++++++++++++++ src/dossier/wiki/utils.go | 14 ++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/dossier/wiki/handlers.go create mode 100644 src/dossier/wiki/page.go create mode 100644 src/dossier/wiki/utils.go 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 @@ +package wiki + +import ( + "fmt" + "net/http" +) + +func SaveHandler(w http.ResponseWriter, r *http.Request) { + var title string = r.URL.Path[len("/save/"):] + body := r.FormValue("body") + p := &Page{Title: title, Body: []byte(body)} + var err error = p.Save() + if err != nil { + fmt.Fprintf(w, "500: %s", err) + return + } + http.Redirect(w, r, "/view/"+title, http.StatusFound) +} + +func EditHandler(w http.ResponseWriter, r *http.Request) { + var title string = r.URL.Path[len("/edit/"):] + p, err := loadPage(title) + if err != nil { + p = &Page{Title: title} + } + fmt.Fprintf(w, "

Editing %s

"+ + "
"+ + "
"+ + ""+ + "
", + p.Title, p.Title, p.Body) +} + +func PageHandler(w http.ResponseWriter, r *http.Request) { + var title string = r.URL.Path[len("/view/"):] + + p, err := loadPage(title) + if err != nil { + http.Redirect(w, r, "/edit/"+title, http.StatusFound) + return + } + + fmt.Fprintf(w, "

%s


%s", p.Title, p.Body) +} 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 @@ +package wiki + +import ( + "io/ioutil" +) + +const FILE_EXTENSION string = ".md" + +type Page struct { + Title string + Body []byte // markdown filled body +} + +func (p *Page) Save() error { + filename := p.Title + FILE_EXTENSION + return ioutil.WriteFile(filename, p.Body, 0600) +} 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 @@ +package wiki + +import "io/ioutil" + +func loadPage(title string) (*Page, error) { + var filename string = title + FILE_EXTENSION + + body, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + + return &Page{Title: title, Body: body}, nil +} -- cgit v1.2.1