package Webserver
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"PersonalWebsite/Database"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func ViewPost(w http.ResponseWriter, r *http.Request) {
|
|
var (
|
|
v = make(map[string]interface{})
|
|
urlParams map[string]string
|
|
post Database.Post
|
|
e error
|
|
)
|
|
|
|
urlParams = mux.Vars(r)
|
|
|
|
post, e = Database.GetPostById(urlParams["id"])
|
|
if e != nil {
|
|
// TODO: Forward 404
|
|
log.Println("Could not get post")
|
|
http.Error(w, "Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
v["Subject"] = post.Subject
|
|
v["PageView"] = "post.gohtml"
|
|
v["Post"] = post
|
|
|
|
ServeTemplate(w, r, "html/index.gohtml", v)
|
|
}
|
|
|
|
func ViewPostList(w http.ResponseWriter, r *http.Request, subject string) {
|
|
var (
|
|
limit int = 2
|
|
|
|
v = make(map[string]interface{})
|
|
posts []Database.Post
|
|
postsCount int64
|
|
pageCount int
|
|
keys []string
|
|
page int
|
|
offset int
|
|
x, y int
|
|
ok bool
|
|
e error
|
|
)
|
|
|
|
keys, ok = r.URL.Query()["page"]
|
|
|
|
if !ok || len(keys[0]) < 1 {
|
|
page = 0
|
|
} else {
|
|
page, e = strconv.Atoi(keys[0])
|
|
if e != nil {
|
|
// TODO: Handle this
|
|
http.Error(w, "Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
offset = limit * page
|
|
|
|
posts, e = Database.GetPostsListBySubject(limit, offset, subject)
|
|
if e != nil {
|
|
// TODO: Handle this
|
|
http.Error(w, "Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
postsCount, e = Database.GetPostCountBySubject(subject)
|
|
if e != nil {
|
|
// TODO: Handle this
|
|
http.Error(w, "Error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
x, y = int(postsCount), limit
|
|
pageCount = (x + y - 1) / y
|
|
|
|
v["PageView"] = "post-list.gohtml"
|
|
v["Subject"] = subject
|
|
v["Posts"] = posts
|
|
v["Page"] = page
|
|
v["PageCount"] = pageCount
|
|
|
|
ServeTemplate(w, r, "html/index.gohtml", v)
|
|
}
|
|
|
|
func ViewPostListProgramming(w http.ResponseWriter, r *http.Request) {
|
|
ViewPostList(w, r, "Programming")
|
|
}
|
|
|
|
func ViewPostListPentesting(w http.ResponseWriter, r *http.Request) {
|
|
ViewPostList(w, r, "Pentesting")
|
|
}
|