package webserver
|
|
|
|
import (
|
|
"net/http"
|
|
"path/filepath"
|
|
|
|
"git.tovijaeschke.xyz/tovi/personal_website/variables"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
var (
|
|
WebRoot string
|
|
)
|
|
|
|
func init() {
|
|
WebRoot = filepath.Join(
|
|
variables.ProjectRoot,
|
|
"/web",
|
|
)
|
|
}
|
|
|
|
func webRootJoin(p string) string {
|
|
return filepath.Join(
|
|
WebRoot,
|
|
p,
|
|
)
|
|
}
|
|
|
|
func Start() error {
|
|
var (
|
|
r *mux.Router
|
|
e error
|
|
)
|
|
|
|
r = mux.NewRouter()
|
|
|
|
// For images / anything static
|
|
r.PathPrefix("/static/").Handler(
|
|
http.StripPrefix("/static/",
|
|
http.FileServer(http.Dir(webRootJoin("static"))),
|
|
),
|
|
)
|
|
|
|
// Handle CSS
|
|
r.PathPrefix("/css/").Handler(
|
|
http.StripPrefix("/css/",
|
|
http.FileServer(http.Dir(webRootJoin("css"))),
|
|
),
|
|
)
|
|
|
|
// Handle JS
|
|
r.PathPrefix("/js/").Handler(
|
|
http.StripPrefix("/js/",
|
|
http.FileServer(http.Dir(webRootJoin("js"))),
|
|
),
|
|
)
|
|
|
|
// Public endpoints
|
|
r.HandleFunc("/", ViewIndex)
|
|
r.HandleFunc("/links", ViewLinks)
|
|
r.HandleFunc("/programming", ViewPostListProgramming)
|
|
r.HandleFunc("/pentesting", ViewPostListPentesting)
|
|
r.HandleFunc("/post/{id}", ViewPost)
|
|
r.HandleFunc("/error", ViewError)
|
|
|
|
// Administration
|
|
r.HandleFunc("/admin", AdminView)
|
|
r.HandleFunc("/admin/login", AdminLogin)
|
|
r.HandleFunc("/admin/logout", AdminLogout)
|
|
r.HandleFunc("/admin/post/new", AdminNewPost)
|
|
r.HandleFunc("/admin/post/{id}/edit", AdminEditPost)
|
|
|
|
e = http.ListenAndServe(variables.WebserverHost, r)
|
|
if e != nil {
|
|
return e
|
|
}
|
|
|
|
return nil
|
|
}
|