blob: 0f18912d2e6cac00634ca3146500d7f23533cf45 [file] [log] [blame]
Andrew Gerrand78d9a602010-04-28 12:36:39 +10001package main
2
3import (
4 "http"
5 "io/ioutil"
6 "os"
7 "template"
8)
9
Andrew Gerrandadd4e162011-01-26 14:56:52 +100010type Page struct {
11 Title string
12 Body []byte
Andrew Gerrand78d9a602010-04-28 12:36:39 +100013}
14
Andrew Gerrandadd4e162011-01-26 14:56:52 +100015func (p *Page) save() os.Error {
16 filename := p.Title + ".txt"
17 return ioutil.WriteFile(filename, p.Body, 0600)
Andrew Gerrand78d9a602010-04-28 12:36:39 +100018}
19
Andrew Gerrandadd4e162011-01-26 14:56:52 +100020func loadPage(title string) (*Page, os.Error) {
Andrew Gerrand78d9a602010-04-28 12:36:39 +100021 filename := title + ".txt"
22 body, err := ioutil.ReadFile(filename)
23 if err != nil {
24 return nil, err
25 }
Andrew Gerrandadd4e162011-01-26 14:56:52 +100026 return &Page{Title: title, Body: body}, nil
Andrew Gerrand78d9a602010-04-28 12:36:39 +100027}
28
29const lenPath = len("/view/")
30
Stephen Maa2332a32010-09-30 13:19:33 +100031func editHandler(w http.ResponseWriter, r *http.Request) {
Andrew Gerrand78d9a602010-04-28 12:36:39 +100032 title := r.URL.Path[lenPath:]
33 p, err := loadPage(title)
34 if err != nil {
Andrew Gerrandadd4e162011-01-26 14:56:52 +100035 p = &Page{Title: title}
Andrew Gerrand78d9a602010-04-28 12:36:39 +100036 }
37 t, _ := template.ParseFile("edit.html", nil)
Stephen Maa2332a32010-09-30 13:19:33 +100038 t.Execute(p, w)
Andrew Gerrand78d9a602010-04-28 12:36:39 +100039}
40
Stephen Maa2332a32010-09-30 13:19:33 +100041func viewHandler(w http.ResponseWriter, r *http.Request) {
Andrew Gerrand78d9a602010-04-28 12:36:39 +100042 title := r.URL.Path[lenPath:]
43 p, _ := loadPage(title)
44 t, _ := template.ParseFile("view.html", nil)
Stephen Maa2332a32010-09-30 13:19:33 +100045 t.Execute(p, w)
Andrew Gerrand78d9a602010-04-28 12:36:39 +100046}
47
48func main() {
49 http.HandleFunc("/view/", viewHandler)
50 http.HandleFunc("/edit/", editHandler)
51 http.ListenAndServe(":8080", nil)
52}