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