/
routes.go
108 lines (99 loc) · 2.33 KB
/
routes.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import (
"encoding/json"
"fmt"
"github.com/julienschmidt/httprouter"
"github.com/yangsibai/webutils"
"gopkg.in/mgo.v2/bson"
"net/http"
"net/url"
"time"
)
type PageItem struct {
Page Page
Host string
}
type PageMeta struct {
ID bson.ObjectId `json:"id"`
Title string `json:"title"`
URL string `json:"URL"`
Host string `json:"host"`
CreatedAt time.Time `json:"created_at"`
}
// homepage: list all pages
func HandleHomePage(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
pages, err := GetAllPages()
if err != nil {
panic(err)
}
var newPages []PageItem
for i := 0; i < len(pages); i++ {
page := pages[i]
u, err := url.Parse(page.URL)
if err != nil {
panic(err)
}
item := PageItem{pages[i], u.Host}
newPages = append(newPages, item)
}
ren.HTML(w, http.StatusOK, "home", newPages)
}
func HandleAddPage(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
decoder := json.NewDecoder(r.Body)
var page Page
err := decoder.Decode(&page)
if err != nil {
webutils.WriteErrorResponse(w, err)
return
}
page.ID = bson.NewObjectId()
page.CreatedAt = time.Now()
err = StorePage(&page)
if err != nil {
webutils.WriteErrorResponse(w, err)
return
}
webutils.WriteResponse(w, page.ID.Hex())
}
// render a single page by filename
func HandleRenderPage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
page, err := GetPage(id)
if err != nil {
panic(err)
}
fmt.Fprint(w, page.Content)
}
// delete a page
func HandleDeletePage(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
err := DeletePage(id)
if err != nil {
webutils.WriteErrorResponse(w, err)
return
}
webutils.WriteResponse(w, id)
}
// get page meta
func HandlePageMeta(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
page, err := GetPage(id)
if err != nil {
webutils.WriteErrorResponse(w, err)
return
}
var pageMeta PageMeta
host, err := getHost(page.URL)
if err != nil {
webutils.WriteErrorResponse(w, err)
return
}
pageMeta = PageMeta{page.ID, page.Title, page.URL, host, page.CreatedAt}
webutils.WriteResponse(w, pageMeta)
}
// get host from URL
func getHost(URL string) (host string, err error) {
u, err := url.Parse(URL)
host = u.Host
return
}