Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 1 | package main |
| 2 | |
| 3 | import ( |
| 4 | "http" |
| 5 | "io/ioutil" |
| 6 | "os" |
| 7 | "template" |
| 8 | ) |
| 9 | |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 10 | type Page struct { |
| 11 | Title string |
| 12 | Body []byte |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 13 | } |
| 14 | |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 15 | func (p *Page) save() os.Error { |
| 16 | filename := p.Title + ".txt" |
| 17 | return ioutil.WriteFile(filename, p.Body, 0600) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 18 | } |
| 19 | |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 20 | func loadPage(title string) (*Page, os.Error) { |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 21 | filename := title + ".txt" |
| 22 | body, err := ioutil.ReadFile(filename) |
| 23 | if err != nil { |
| 24 | return nil, err |
| 25 | } |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 26 | return &Page{Title: title, Body: body}, nil |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 27 | } |
| 28 | |
| 29 | const lenPath = len("/view/") |
| 30 | |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 31 | func editHandler(w http.ResponseWriter, r *http.Request) { |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 32 | title := r.URL.Path[lenPath:] |
| 33 | p, err := loadPage(title) |
| 34 | if err != nil { |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 35 | p = &Page{Title: title} |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 36 | } |
| 37 | t, _ := template.ParseFile("edit.html", nil) |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 38 | t.Execute(p, w) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 39 | } |
| 40 | |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 41 | func viewHandler(w http.ResponseWriter, r *http.Request) { |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 42 | title := r.URL.Path[lenPath:] |
| 43 | p, _ := loadPage(title) |
| 44 | t, _ := template.ParseFile("view.html", nil) |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 45 | t.Execute(p, w) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 46 | } |
| 47 | |
| 48 | func main() { |
| 49 | http.HandleFunc("/view/", viewHandler) |
| 50 | http.HandleFunc("/edit/", editHandler) |
| 51 | http.ListenAndServe(":8080", nil) |
| 52 | } |