ictgj-voting/public_endpoints.go

62 lines
1.6 KiB
Go
Raw Normal View History

2017-04-03 21:32:13 +00:00
package main
import (
"net/http"
2017-06-30 19:35:36 +00:00
"strings"
"time"
2017-04-03 21:32:13 +00:00
)
func initPublicPage(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
return p
}
func handleMain(w http.ResponseWriter, req *http.Request) {
page := initPublicPage(w, req)
2017-06-08 17:20:43 +00:00
page.SubTitle = ""
switch dbGetPublicSiteMode() {
case SiteModeWaiting:
page.show("public-waiting.html", w)
case SiteModeVoting:
2017-06-30 19:35:36 +00:00
loadVotingPage(w, req)
2017-04-03 21:32:13 +00:00
}
}
2017-06-30 19:35:36 +00:00
func loadVotingPage(w http.ResponseWriter, req *http.Request) {
page := initPublicPage(w, req)
type votingPageData struct {
Teams []Team
Timestamp string
}
vpd := new(votingPageData)
vpd.Teams = dbGetAllTeams()
vpd.Timestamp = time.Now().Format(time.RFC3339)
page.TemplateData = vpd
page.show("public-voting.html", w)
}
func handlePublicSaveVote(w http.ResponseWriter, req *http.Request) {
page := initPublicPage(w, req)
page.SubTitle = ""
// Check if we already have a vote for this client id/timestamp
ts := req.FormValue("timestamp")
timestamp, err := time.Parse(time.RFC3339, ts)
if err != nil {
page.session.setFlashMessage("Error parsing timestamp: "+ts, "error")
redirect("/", w, req)
}
if _, err := dbGetVote(page.ClientId, timestamp); err == nil {
// Duplicate vote... Cancel it.
page.session.setFlashMessage("Duplicate vote!", "error")
redirect("/", w, req)
}
// voteSlice is an ordered string slice of the voters preferences
voteCSV := req.FormValue("uservote")
voteSlice := strings.Split(voteCSV, ",")
if err := dbSaveVote(page.ClientId, timestamp, voteSlice); err != nil {
page.session.setFlashMessage("Error Saving Vote: "+err.Error(), "error")
}
redirect("/", w, req)
}