You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

101 lines
2.0 KiB

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")
}