ictgj-voting/admin_endpoints.go

82 lines
2.2 KiB
Go

package main
import (
"net/http"
"strconv"
"github.com/gorilla/mux"
)
func initAdminRequest(w http.ResponseWriter, req *http.Request) *pageData {
p := InitPageData(w, req)
p.Stylesheets = append(p.Stylesheets, "/assets/css/admin.css")
p.Scripts = append(p.Scripts, "/assets/js/admin.js")
p.HideAdminMenu = false
return p
}
// Main admin handler, routes the request based on the category
func handleAdmin(w http.ResponseWriter, req *http.Request) {
page := initAdminRequest(w, req)
vars := mux.Vars(req)
if !page.LoggedIn {
if vars["category"] == "clients" &&
vars["id"] != "" &&
(vars["function"] == "add" || vars["function"] == "auth") {
// When authenticating a client, we have an all-in-one login/auth page
handleAdminClients(w, req, page)
} else {
page.SubTitle = "Admin Login"
page.show("admin-login.html", w)
}
} else {
adminCategory := vars["category"]
switch adminCategory {
case "users":
handleAdminUsers(w, req, page)
case "teams":
handleAdminTeams(w, req, page)
case "games":
handleAdminGames(w, req, page)
case "clients":
handleAdminClients(w, req, page)
case "votes":
handleAdminVotes(w, req, page)
case "mode":
handleAdminSetMode(w, req, page)
case "authmode":
handleAdminSetAuthMode(w, req, page)
case "archive":
handleAdminArchive(w, req, page)
default:
page.TemplateData = getCondorcetResult()
page.show("admin-main.html", w)
}
}
}
func handleAdminSetMode(w http.ResponseWriter, req *http.Request, page *pageData) {
vars := mux.Vars(req)
newMode, err := strconv.Atoi(vars["id"])
if err != nil {
page.session.setFlashMessage("Invalid Mode: "+vars["id"], "error")
}
if err = m.site.SetPublicMode(newMode); err != nil {
page.session.setFlashMessage(err.Error(), "error")
}
redirect("/admin", w, req)
}
func handleAdminSetAuthMode(w http.ResponseWriter, req *http.Request, page *pageData) {
vars := mux.Vars(req)
newMode, err := strconv.Atoi(vars["id"])
if err != nil {
page.session.setFlashMessage("Invalid Authentication Mode: "+vars["id"], "error")
}
if err = m.site.SetAuthMode(newMode); err != nil {
page.session.setFlashMessage(err.Error(), "error")
}
redirect("/admin", w, req)
}