Files
old-ibcetvorke/cethttp/cethttp.go
2023-08-05 10:58:20 +02:00

146 lines
3.0 KiB
Go

package cethttp
import (
"fmt"
"log"
"net/http"
"strconv"
"sync"
"github.com/gorilla/mux"
"github.com/senaduka/cetvorke/database"
)
func StartServer(waitgroup *sync.WaitGroup) {
defer waitgroup.Done()
r := mux.NewRouter()
r.HandleFunc("/p/{postID}/{slug}", postHandler)
r.HandleFunc("/", indexHandler)
r.HandleFunc("/a/", archiveHandler)
r.HandleFunc("/y/{year}/", yearHandler)
r.HandleFunc("/y/{year}/m/{month}/", monthHandler)
err := http.ListenAndServe(":8080", r)
if err != nil {
log.Fatal("error:", err)
}
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
links, err := database.GetRecentLinks()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
response := "<h1>IslamBosna</h1>\n<h2>Najnoviji članci</h2>\n"
for _, link := range links {
response += "<p>" + link.HTMLLink() + "</p>\n"
}
response = html5Page(response)
w.Write([]byte(response))
}
func postHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
fmt.Println(vars)
postID, err := strconv.Atoi(vars["postID"])
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
post, err := database.GetPost(postID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
response := post.HTMLPage()
response = html5Page(response)
w.Write([]byte(response))
}
func archiveHandler(w http.ResponseWriter, r *http.Request) {
links, title, err := database.GetAllYearLinks()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
response := "<h1>" + title + "</h1>\n"
for _, link := range links {
response += "<p>" + link.HTMLArchiveLink() + "</p>\n"
}
response = html5Page(response)
w.Write([]byte(response))
}
func yearHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
year, err := strconv.Atoi(vars["year"])
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
links, title, err := database.GetMonthLinksByYear(year)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
response := "<h1>" + title + "</h1>\n"
for _, link := range links {
response += "<p>" + link.HTMLArchiveMonthLink() + "</p>\n"
}
response = html5Page(response)
w.Write([]byte(response))
}
func monthHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
year, err := strconv.Atoi(vars["year"])
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
month, err := strconv.Atoi(vars["month"])
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
links, title, err := database.GetLinksByMonth(year, month)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
response := "<h1>" + title + "</h1>\n"
for _, link := range links {
response += "<p>" + link.HTMLLink() + "</p>\n"
}
response = html5Page(response)
w.Write([]byte(response))
}