2017-04-03 21:32:13 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
)
|
|
|
|
|
|
|
|
func initAdminRequest(w http.ResponseWriter, req *http.Request) *pageData {
|
2017-04-21 18:17:18 +00:00
|
|
|
p := InitPageData(w, req)
|
2017-04-03 21:32:13 +00:00
|
|
|
p.Stylesheets = append(p.Stylesheets, "/assets/css/admin.css")
|
|
|
|
p.Scripts = append(p.Scripts, "/assets/js/admin.js")
|
|
|
|
|
|
|
|
return p
|
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdmin
|
|
|
|
// Main admin handler, routes the request based on the category
|
|
|
|
func handleAdmin(w http.ResponseWriter, req *http.Request) {
|
|
|
|
page := initAdminRequest(w, req)
|
|
|
|
if !page.LoggedIn {
|
|
|
|
page.SubTitle = "Admin Login"
|
|
|
|
page.show("admin-login.html", w)
|
|
|
|
} else {
|
|
|
|
vars := mux.Vars(req)
|
|
|
|
adminCategory := vars["category"]
|
|
|
|
switch adminCategory {
|
|
|
|
case "users":
|
|
|
|
handleAdminUsers(w, req, page)
|
|
|
|
case "teams":
|
|
|
|
handleAdminTeams(w, req, page)
|
|
|
|
case "games":
|
|
|
|
handleAdminGames(w, req, page)
|
|
|
|
default:
|
|
|
|
page.show("admin-main.html", w)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdminDoLogin
|
|
|
|
// Verify the provided credentials, set up a cookie (if requested)
|
|
|
|
// and redirect back to /admin
|
|
|
|
func handleAdminDoLogin(w http.ResponseWriter, req *http.Request) {
|
|
|
|
page := initAdminRequest(w, req)
|
|
|
|
// Fetch the login credentials
|
|
|
|
email := req.FormValue("email")
|
|
|
|
password := req.FormValue("password")
|
|
|
|
if email != "" && password != "" {
|
|
|
|
if err := dbCheckCredentials(email, password); err != nil {
|
|
|
|
page.session.setFlashMessage("Invalid Login", "error")
|
|
|
|
} else {
|
|
|
|
page.session.setStringValue("email", email)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("Invalid Login", "error")
|
|
|
|
}
|
|
|
|
redirect("/admin", w, req)
|
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdminDoLogout
|
|
|
|
// Expire the session
|
|
|
|
func handleAdminDoLogout(w http.ResponseWriter, req *http.Request) {
|
|
|
|
page := initAdminRequest(w, req)
|
|
|
|
page.session.expireSession()
|
|
|
|
page.session.setFlashMessage("Logged Out", "success")
|
|
|
|
|
|
|
|
redirect("/admin", w, req)
|
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdminUsers
|
|
|
|
func handleAdminUsers(w http.ResponseWriter, req *http.Request, page *pageData) {
|
|
|
|
vars := mux.Vars(req)
|
|
|
|
page.SubTitle = "Admin Users"
|
|
|
|
email := vars["id"]
|
|
|
|
if email == "new" {
|
|
|
|
switch vars["function"] {
|
|
|
|
case "save":
|
|
|
|
email = req.FormValue("email")
|
|
|
|
if dbIsValidUserEmail(email) {
|
|
|
|
// User already exists
|
|
|
|
page.session.setFlashMessage("A user with email address "+email+" already exists!", "error")
|
|
|
|
} else {
|
|
|
|
password := req.FormValue("password")
|
|
|
|
if err := dbUpdateUserPassword(email, string(password)); err != nil {
|
|
|
|
page.session.setFlashMessage(err.Error(), "error")
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("User "+email+" created!", "success")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
redirect("/admin/users", w, req)
|
|
|
|
default:
|
|
|
|
page.SubTitle = "Add Admin User"
|
|
|
|
page.show("admin-adduser.html", w)
|
|
|
|
}
|
|
|
|
} else if email != "" {
|
|
|
|
switch vars["function"] {
|
|
|
|
case "save":
|
|
|
|
var err error
|
|
|
|
if dbIsValidUserEmail(email) {
|
|
|
|
password := req.FormValue("password")
|
|
|
|
if password != "" {
|
|
|
|
if err = dbUpdateUserPassword(email, password); err != nil {
|
|
|
|
page.session.setFlashMessage(err.Error(), "error")
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("User "+email+" created!", "success")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
redirect("/admin/users", w, req)
|
|
|
|
}
|
|
|
|
case "delete":
|
|
|
|
var err error
|
|
|
|
if dbIsValidUserEmail(email) {
|
|
|
|
if err = dbDeleteUser(email); err != nil {
|
|
|
|
page.session.setFlashMessage(err.Error(), "error")
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("User "+email+" deleted!", "success")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
redirect("/admin/users", w, req)
|
|
|
|
default:
|
|
|
|
page.SubTitle = "Edit Admin User"
|
|
|
|
if !dbIsValidUserEmail(email) {
|
|
|
|
page.session.setFlashMessage("Couldn't find the requested user, please try again.", "error")
|
|
|
|
redirect("/admin/users", w, req)
|
|
|
|
}
|
|
|
|
page.TemplateData = email
|
|
|
|
page.show("admin-edituser.html", w)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
type usersPageData struct {
|
|
|
|
Users []string
|
|
|
|
}
|
|
|
|
page.TemplateData = usersPageData{Users: dbGetAllUsers()}
|
|
|
|
|
|
|
|
page.SubTitle = "Admin Users"
|
|
|
|
page.show("admin-users.html", w)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdminTeams
|
|
|
|
func handleAdminTeams(w http.ResponseWriter, req *http.Request, page *pageData) {
|
2017-04-21 18:17:18 +00:00
|
|
|
vars := mux.Vars(req)
|
|
|
|
page.SubTitle = "Teams"
|
|
|
|
teamId := vars["id"]
|
|
|
|
if teamId == "new" {
|
|
|
|
switch vars["function"] {
|
|
|
|
case "save":
|
|
|
|
name := req.FormValue("teamname")
|
|
|
|
if dbIsValidTeam(name) {
|
|
|
|
// A team with that name already exists
|
|
|
|
page.session.setFlashMessage("A team with the name "+name+" already exists!", "error")
|
|
|
|
} else {
|
|
|
|
if err := dbCreateNewTeam(name); err != nil {
|
|
|
|
page.session.setFlashMessage(err.Error(), "error")
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("Team "+name+" created!", "success")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
redirect("/admin/teams", w, req)
|
|
|
|
default:
|
|
|
|
page.SubTitle = "Add New Team"
|
|
|
|
page.show("admin-addteam.html", w)
|
|
|
|
}
|
|
|
|
} else if teamId != "" {
|
|
|
|
if dbIsValidTeam(teamId) {
|
|
|
|
switch vars["function"] {
|
|
|
|
case "save":
|
|
|
|
page.session.setFlashMessage("Not implemented yet...", "success")
|
|
|
|
redirect("/admin/teams", w, req)
|
|
|
|
case "delete":
|
|
|
|
var err error
|
|
|
|
if err = dbDeleteTeam(teamId); err != nil {
|
|
|
|
page.session.setFlashMessage("Error deleting team: "+err.Error(), "error")
|
|
|
|
}
|
|
|
|
redirect("/admin/teams", w, req)
|
|
|
|
default:
|
|
|
|
page.SubTitle = "Edit Team"
|
|
|
|
t := dbGetTeam(teamId)
|
|
|
|
page.TemplateData = t
|
|
|
|
page.show("admin-editteam.html", w)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
page.session.setFlashMessage("Couldn't find the requested team, please try again.", "error")
|
|
|
|
redirect("/admin/teams", w, req)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
type teamsPageData struct {
|
|
|
|
Teams []Team
|
|
|
|
}
|
|
|
|
|
|
|
|
page.TemplateData = teamsPageData{Teams: dbGetAllTeams()}
|
|
|
|
page.SubTitle = "Teams"
|
|
|
|
page.show("admin-teams.html", w)
|
|
|
|
}
|
2017-04-03 21:32:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// handleAdminGames
|
|
|
|
func handleAdminGames(w http.ResponseWriter, req *http.Request, page *pageData) {
|
|
|
|
}
|