59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
|
package core
|
||
|
|
||
|
import (
|
||
|
"html/template"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/gorilla/mux"
|
||
|
"github.com/kirsle/blog/core/models/posts"
|
||
|
"github.com/urfave/negroni"
|
||
|
)
|
||
|
|
||
|
// BlogRoutes attaches the blog routes to the app.
|
||
|
func (b *Blog) BlogRoutes(r *mux.Router) {
|
||
|
// Login-required routers.
|
||
|
loginRouter := mux.NewRouter()
|
||
|
loginRouter.HandleFunc("/blog/edit", b.EditBlog)
|
||
|
r.PathPrefix("/blog").Handler(
|
||
|
negroni.New(
|
||
|
negroni.HandlerFunc(b.LoginRequired),
|
||
|
negroni.Wrap(loginRouter),
|
||
|
),
|
||
|
)
|
||
|
|
||
|
adminRouter := mux.NewRouter().PathPrefix("/admin").Subrouter().StrictSlash(false)
|
||
|
r.HandleFunc("/admin", b.AdminHandler) // so as to not be "/admin/"
|
||
|
adminRouter.HandleFunc("/settings", b.SettingsHandler)
|
||
|
adminRouter.PathPrefix("/").HandlerFunc(b.PageHandler)
|
||
|
r.PathPrefix("/admin").Handler(negroni.New(
|
||
|
negroni.HandlerFunc(b.LoginRequired),
|
||
|
negroni.Wrap(adminRouter),
|
||
|
))
|
||
|
}
|
||
|
|
||
|
// EditBlog is the blog writing and editing page.
|
||
|
func (b *Blog) EditBlog(w http.ResponseWriter, r *http.Request) {
|
||
|
v := NewVars(map[interface{}]interface{}{
|
||
|
"preview": "",
|
||
|
})
|
||
|
post := posts.New()
|
||
|
|
||
|
if r.Method == http.MethodPost {
|
||
|
// Parse from form values.
|
||
|
post.LoadForm(r)
|
||
|
|
||
|
// Previewing, or submitting?
|
||
|
switch r.FormValue("submit") {
|
||
|
case "preview":
|
||
|
v.Data["preview"] = template.HTML(b.RenderMarkdown(post.Body))
|
||
|
case "submit":
|
||
|
if err := post.Validate(); err != nil {
|
||
|
v.Error = err
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
v.Data["post"] = post
|
||
|
b.RenderTemplate(w, r, "blog/edit", v)
|
||
|
}
|