Olivier Duperray | 2eb9733 | 2012-01-23 09:28:32 +1100 | [diff] [blame] | 1 | // Copyright 2010 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 5 | package main |
| 6 | |
| 7 | import ( |
Shenghou Ma | 52cd4c8 | 2012-02-25 01:09:05 +0800 | [diff] [blame] | 8 | "html/template" |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 9 | "io/ioutil" |
Rob Pike | f9489be | 2011-11-08 15:43:02 -0800 | [diff] [blame] | 10 | "net/http" |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 11 | ) |
| 12 | |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 13 | type Page struct { |
| 14 | Title string |
| 15 | Body []byte |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 16 | } |
| 17 | |
Russ Cox | 44526cd | 2011-11-01 22:06:05 -0400 | [diff] [blame] | 18 | func (p *Page) save() error { |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 19 | filename := p.Title + ".txt" |
| 20 | return ioutil.WriteFile(filename, p.Body, 0600) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 21 | } |
| 22 | |
Russ Cox | 44526cd | 2011-11-01 22:06:05 -0400 | [diff] [blame] | 23 | func loadPage(title string) (*Page, error) { |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 24 | filename := title + ".txt" |
| 25 | body, err := ioutil.ReadFile(filename) |
| 26 | if err != nil { |
| 27 | return nil, err |
| 28 | } |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 29 | return &Page{Title: title, Body: body}, nil |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 30 | } |
| 31 | |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 32 | func editHandler(w http.ResponseWriter, r *http.Request) { |
Andrew Gerrand | 0d676f3 | 2013-10-08 11:14:35 +1100 | [diff] [blame] | 33 | title := r.URL.Path[len("/edit/"):] |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 34 | p, err := loadPage(title) |
| 35 | if err != nil { |
Andrew Gerrand | add4e16 | 2011-01-26 14:56:52 +1000 | [diff] [blame] | 36 | p = &Page{Title: title} |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 37 | } |
Rob Pike | f56db6f | 2011-11-23 20:17:22 -0800 | [diff] [blame] | 38 | t, _ := template.ParseFiles("edit.html") |
Andrew Gerrand | 4896b17 | 2011-03-09 12:59:13 +1100 | [diff] [blame] | 39 | t.Execute(w, p) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 40 | } |
| 41 | |
Stephen Ma | a2332a3 | 2010-09-30 13:19:33 +1000 | [diff] [blame] | 42 | func viewHandler(w http.ResponseWriter, r *http.Request) { |
Andrew Gerrand | 0d676f3 | 2013-10-08 11:14:35 +1100 | [diff] [blame] | 43 | title := r.URL.Path[len("/view/"):] |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 44 | p, _ := loadPage(title) |
Rob Pike | f56db6f | 2011-11-23 20:17:22 -0800 | [diff] [blame] | 45 | t, _ := template.ParseFiles("view.html") |
Andrew Gerrand | 4896b17 | 2011-03-09 12:59:13 +1100 | [diff] [blame] | 46 | t.Execute(w, p) |
Andrew Gerrand | 78d9a60 | 2010-04-28 12:36:39 +1000 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | func main() { |
| 50 | http.HandleFunc("/view/", viewHandler) |
| 51 | http.HandleFunc("/edit/", editHandler) |
| 52 | http.ListenAndServe(":8080", nil) |
| 53 | } |