Added a game-link page

Also tweaked a few other things
Kinda worked more on the client authentication stuff
This commit is contained in:
Brian Buller 2017-07-19 10:16:18 -05:00
parent c2959b3974
commit f2dde0c709
12 changed files with 228 additions and 165 deletions

View File

@ -45,6 +45,8 @@ func handleAdmin(w http.ResponseWriter, req *http.Request) {
handleAdminVotes(w, req, page)
case "mode":
handleAdminSetMode(w, req, page)
case "authmode":
handleAdminSetAuthMode(w, req, page)
default:
page.TemplateData = getCondorcetResult()
page.show("admin-main.html", w)
@ -63,3 +65,15 @@ func handleAdminSetMode(w http.ResponseWriter, req *http.Request, page *pageData
}
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 dbSetAuthMode(newMode) != nil {
page.session.setFlashMessage("Invalid Authentication Mode: "+vars["id"], "error")
}
redirect("/admin", w, req)
}

View File

@ -34,8 +34,9 @@ func handleAdminGames(w http.ResponseWriter, req *http.Request, page *pageData)
case "save":
name := req.FormValue("gamename")
desc := req.FormValue("gamedesc")
link := req.FormValue("gamelink")
if dbIsValidTeam(teamId) {
if err := dbUpdateTeamGame(teamId, name, desc); err != nil {
if err := dbUpdateTeamGame(teamId, name, link, desc); err != nil {
page.session.setFlashMessage("Error updating game: "+err.Error(), "error")
} else {
page.session.setFlashMessage("Team game updated", "success")

306
assets.go
View File

@ -201,28 +201,28 @@ SExORVYLEQephirOzE3XK8kozU3KS8zMAatMLi0qzi+yUijIzwRaVQRSBQgAAP//D/6XxHkAAAA=
"/assets/css/gjvote.css": {
local: "assets/css/gjvote.css",
size: 4090,
modtime: 1500039735,
modtime: 1500473492,
compressed: `
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
`,
},
@ -11952,41 +11952,42 @@ gXNZg01WlzwTO4QO8+DQa0kXLC/+GGcx3uzdZBOZuF7yMjkoIN5n+kVS9TMAAP//58Xge8kCAAA=
"/templates/admin-editteam.html": {
local: "templates/admin-editteam.html",
size: 7565,
modtime: 1500052762,
size: 7798,
modtime: 1500467841,
compressed: `
H4sIAAAJbogA/9RY3Y/buBF/z19BCAFko2srbe/y4LXdu9zmin24tOh6n4I80CItsaE+IFLeuAv/7x2S
+iAl+mMXTYDmIUsNhzOcmd980M/P6G1dM4IWKzTf0KzkWNI7LPH88fH+Dh2Pb5aE7VHMsRCrIKa5pFWw
foOQTeZ0JzURyLuiylp6WVd0pgndaoY5S3JKAoRjyYp8FUSYZCyPJMWZiLrrHI+RwHsaoIzKtCCr4J//
eNg0OkBL+tf1Bg6gOyox42IZAaHd2zHKiaCyJYzvirYsmYkSxzTomVw2feG4yGVV8FlSFXXpsAIzx1vK
O8c0nJoYILB0FSiLcpyBDn3VT7BcRpphIInlZS0RI9YRpP63v/eY10AA/7hRUlLBWQECUkzTghMKqjuF
rn0RGGh5ZfB51npUUXDprKw5d2VilFZ054Yx6OVw8InyuPa2gcG2lrLI7fUMLs/yYP0bzmPKlxF2NDT8
8lCCA0S9zZh0FVQsSS9qqFiGq0OwfiwJ+A4pDy0js3lam/kIdGy2Mr+jnEqqjr78ArSqCsgcI+KEeici
y8gFMnxD/jTrtEKRzkJzwpOPI4y/OjMTwNH1menJPtygOdFIjqydNo3/rnOjz+EX5eLlTFSKTSYqRacy
0crD7oB18/N5qASfSMZOZ/DK3HuFtYSKWIFNxBUrVTR99kr6TeKK4s5kfcoy2Xw7xlgi5/N5sPY7wuIC
fyyjVtOPKD42Uv8PCpGB/usrwXXIOYea9UNcUZqLtJBiAJNx74cqwVFaVOw/IAPzGcS5AIpM62ybQyvW
+sGHMCWYjubZaKVDoNgO5YX0Qci6lJpCrJALeeAQAPBiwvKZLMrFT+/Kb7eB56KXgtDA5994jw1gF7JI
Ek4fS15g8vDwO/h5Mr1VwVIE1F/KwgaYQbmg9i2BVOE8oegtu0Fv9+Ph6qyJLEsQYAPPFJ6VEx1E6x0h
Wvq+HdQ6+zuXQyXnsuVyUzJAoopXgZK1AFckFLIGmH5n0J0A3sfj7RYL+v6nG3N404rUR60KrmzPSX/7
4beDYxPvax1hY08nVuC0FA2uUbA+yDxw0uF7B39ooGV9t2U16a5vn5ie24b4B822tLLm2qXEW05diKMS
E8LyBKWM9M1lKVOKieUrWblVP12bBgiLAf0BKv1XdH/n29s8MQk6fVsfM0CGb+NfNCv2A03wVfXOc+66
lNuCHNbXZ1HjJSd5htaStYFw05tBJfEzaOPvyVmexglnebQ3TnC4c7+evy4+g4ieGDNt6omhq5NoJhjT
oAAUhOZtOzfnGbEnGKt2RCNR55vd2Rl3yVrGHUY7KGMVFimQI7b2jdxuQ+uQQfyYGdcYX9BRXHDow+DX
98H6V0IQzKD0CRkvnBN+XlTnAJN4wyehd8K+8qV7XYBf8kK1EKGKJdhvdNiD7YDYYGMw85k0MyMswrUs
dkVcCzTCjF+dUHmlgDfQ2NH9Sn8x+XgXXKtHmtwc6enoJ/Rs2v0r9dBMt9aBlobq11ELWv2iOeZxkfk1
vWS4nEH3p+LyiAnA9yfcaP42pOuzENZ9rYYP1ZysVvfygf77/Y7QXKn9o+6l4lnrpi66nm5StZktCRMg
6rDIi5zemp+7oBF75gDTnv+XT+tOuLngoCBA5YsNRLKaS1biSuqozdQkF1z1JBjMz9sCPJctftYjdBde
g/u2isNUGDTINOsO/EIYgrmNwYADri6u1pilxpU/CoK5mq5OhHgM8dGr7EekTJsTQ/RQwuT12HFOCfuJ
9PowDWBtXKs2RA51c86ZkBRUTLSrnvOC0AWBsp3B5DhPqPzIqVp+ONyTSej8tBVOb+gethZhzFn8NTze
aBG7OtfYnUzRc4MSMP3JxPG5KxKSSU4XKLR+5wpvul0IUsswOfVT5tTiVzUGeH+tKDoUNRyv6N/QJmUC
xThXD8ctRXVOwNNz+5QOn1igz89WMTOKQwMiixuhshBMmbYIFf6cLe2CBeoQ220dbzyyjdEnZGswDoRD
8MG80QjlcKn0AaYL82HY3+xLszxOb/VKzUl66UVGw3weIJ5XPMCkOeqgpSWqWyUQ2UUPHKWiBw+CHiDr
KteaLYXiw2GDE4WFSQgP4bAxwpih/H4OjR8hwUx5foC0NNg0Vj9VuJxIQM7087svrmPe9OJOCoGbtJr2
uFKz5D080lcI6POYA/4+gRWTRq7iUKlunpDAddKv4zISWjKUry+eFnZIzNmnFGryRJHnKRa/wRdR1xOT
ae8tvVvp95lmMOwASKk/LQ81vLgsYeo2vMb8hmdcBdoUV460umWHDZXV6kILy0vdXpe7/bw/KCrhzbnM
6TMOeVNO57MHPubfE4Nq8jTnRYw1HlbomlZtUjAK/qTgoDoxDDdz9RPNrSX8aNUOj21tXfLZ5rVqVJs6
DaYAtOnf+3iuW8q8aVCrYAtmfg1OcKVUqVkFf3kHLUczHZ1M8f1WYmWImV4u4d83hIUXcTWaw7oQv6y/
9Djsb+u4riefc91J6zJ1+5nSEk5dr4Z/fv9z+S00Xl1GbfP+bwAAAP//Wfx22I0dAAA=
H4sIAAAJbogA/9RYW4/buhF+z68ghACy0bWVtufkwWu7J8kmxQJJWnS9T0EeaJGW2KUuEClv3IX/e4ek
LqQutnfRBOg+eKXhcIYz882FenpCr8uSEbRYofmGJjnHkt5gief397c36Hh8tSRsj0KOhVh5IU0lLbz1
K4RsMqc7qYlA3mVFUtPzsqAzTWieZpizKKXEQziULEtXXoBJwtJAUpyIoDnO8RgIvKceSqiMM7Ly/vmP
u02lA7TEf11vYAO6oRIzLpYBEOq1HaOcCCprQv+saMuimchxSL2WyWXTBw6zVBYZn0VFVuYOKzBzvKW8
cUzFqYkeAktXnrIoxQno0Ef9Co/LQDN0JLE0LyVixNqC1K/9vse8BAL4x42SkgrO8hCQQhpnnFBQ3Sh0
7QvAQMsrndeT1qOCgktnecm5KxOjuKA7N4xeK4eDT5THtbcNDLallFlqP8/g8Cz11h9wGlK+DLCjoeKX
hxwcIMptwqSroGBRfFZDwRJcHLz1fU7Ad0h5aBmYxXFt5sXTsdnK9IZyKqna+vwD0KLIIHOMiBH1TkSW
gQtkeIf8qZ7jAgU6C82OgXzsYfzFmRkBji7PzIHswxWaI43kwFqp0/jvOjfaHH5WLp7PRKXYZKJSNJaJ
Vh42G6yTn85DJXgkGRud3gtz7wXWcpY+eOvP8HveUM1rGWreTxqqBI8Y+llr/mWGEipClVUiLFiuYDtk
r6Q/JC4obkzWuyyTzbtjjCVyPp9762FHWFzgj2VQa/oVVdZOyf+Dimty/OUl7zLknELN+i4sKE1FnEnR
gUl/yIFyyFGcFew/IAPzGcQ5A4qMy2Sbwsyh9YMPYRwyrXtgoZYOgWI7lGZyCELWodS4ZYVcyAOHAIAX
I5bOZJYvfnuT/7j2Bg56LggVfP6N99gAdiGzKOL0PucZJnd3n8DPk+m1CpYioPZQFjbADMoFtU8JpAKn
EUWv2RV6ve9PkSdNZEmEABt4pvCsnOggWq8IUdP39UTa2N+4HFoWlzWXm5IeEkW48pSsBbgiopA1wPSJ
QRsGeB+P11ss6NvfrszmTS1Sb7ValbI9Je3pu+8Ojk28L3WEjT2dWJ7TOzW4esF6L1PPSYefHfyugZb1
zZI1jTQDysg1oe78X2iypYU1wC8l3nLqQhzlmBCWRihmpO2iSxlTTCxfycKt+vHadHp46NDvoNI/oNub
obXNI5Ogc2jpYwLIGFr4F02yfUcTvBWt85yzLuU2I4f15VlUeclJnq61ZG0gXA0hoJIMM2jjb8lJnsoJ
J3m0N0Y43AuOHjTP3veIHo0TberIdNlINBOMaVAACkLTup2b/YzYE4xVO4KeqNPN7uQwv2Q14w6jHZSx
AosYyAFbD90t3IbWIIMMY6ZfY4aCjsKMQx8Gv7711u8IQTBs00dkvHBK+GlRjQNM4nXvvoNXiQuv9JcF
+DlXcQsRqliC/UaHPcF3iBU2OjOfSTMzqyNcymyXhaVAPcwMqxMqrxTwOhob+rDSP0w+3niX6pEmN3t6
GvqInk29fqEemujW2tFSUYd1lIIWf2iOeZglw5qeM1zOoPtTcX7EBOAPJ1xv/jaky7MQnttaDS+qOVmt
7vkD/c/7YFIdqf6nzqXiWeqmLpqeblK1mi0JEyDqsEizlF6b73rQiAfmANOe/5ffEBrh5oCdggCVLzQQ
SUouWY4LqaM2U5Ocd9GVoDM/bzPwXLL4XY/QTXgN7usqDlOhVyHTPDfgF8IQzGkMBhxwNXG1xiw1rnzJ
COZquhoJcR/ivVvZr0iZOie66KGEycux4+wS9hXp5WHqwNq4Vi2IFOrmnDMhKaiYaFc9pRmhCwJlO4HJ
cR5R+ZFT9fj+cEsmvvMNz59e0T0sLfyQs/DBP15pEbsy1didTNFThRIw/dHE8akpEpJJThfItz7o+VfN
KgSpZpiMfbOdWvyqxgDvu4KiQ1bC9oL+DW1iJlCIU3Vx3FJUpgQ8Pbd36fCJBfr2ZBUzo9g3ILK4Ecoz
wZRpC1/hz1nSLligBrHN0vFqQLYxekS2BmNHOAQfzOuNUA6XSh9gOjMf+u3JvlePx+m1flJzkn4cREbF
fBogA7d4gEm11UFLTVSniiCyixY4SkULHgQ9QJZFqjVbCsX7wwZHCgsTHy7CfmWEMUP5/RQaP0KCmfJ8
B2lpsGmsfixwPpGAnOm3N99dx7xqxY0KgZPUmva4ULPkLVzSVwjo85AD/r6CFZNKruJQqW6ukMA16td+
GfEtGcrXZ3cLOyRm72MMNXmiyPMYiw/wRtTxxGTaekuvFvp+phkMOwBS6lfLQxUvznOYug2vMb/i6VeB
OsWVI61u2WBDZbU60MLyUrPW5G4773eKin91KnPajEODKafzeQA+5u+RQTV5nPMsxBoPK3RJqzYpGHh/
UnBQnRiGm7n6RHNtCT9atWPAtrouDdk2aFWvNjUaTAGo07/18Vy3lHnVoFbeFsx88Ea4YqrUrLy/vIGW
o5mOTqYMfSuxMsRML+fwPzSE+Wdx1ZvDmhA/r7+0OGxP67iuJZ9y3ah1iTr9TGnxp65X/T+//T3/4Ruv
LoO6ef83AAD//5ZGKNl2HgAA
`,
},
@ -12038,15 +12039,17 @@ Xo6z3V9nVvnKh0MZ+h0AAP//kX1qvCYDAAA=
"/templates/admin-main.html": {
local: "templates/admin-main.html",
size: 1024,
modtime: 1500039735,
size: 1476,
modtime: 1500477139,
compressed: `
H4sIAAAJbogA/6yST0/CQBDF736KSUPCRboQb6ZtYjTxpDGKel7aoWzc7uL+KTGE7+4sC6YKKiGcZrtv
5teXN5tVooVScmvzpNTKoXJJcQYQ7kOl0+yiePATKUq40xVmjL6jMPHOaQValSS+5clCqEovUqlL7oRW
6czgNO8zXjVCsYZm2bCfbH829wYHkTBwuq4lDqbCWAcdAZZLEFPAd0ijg2AAhrBadafnRjTcfFAvqoq0
pHjlwglVZyx2HG139KddEg5wO/rX7Yv+aTZjm/R/Je5s6NobQ7uDR7ReOtvZkpbxQCzDVY3QE+fQa+Ey
h3SMzVxyhzfc8Uhdj0hRUHevTe95g3SfMbrZQqLtyGYR3vX7JX/3dxVShScsQ9R29xHtxpwcuKlWO7T9
dYxo96/8eLhD3gT4ONRTw2tKN8BvQz013Fs0Af4c6p7HtSmfAQAA//8bOYdyAAQAAA==
H4sIAAAJbogA/6xTTQ/aMAy971d4FRKXtQHtNrWVEJN22oc2tp1Da0q0NGFJWoQQ/30OAVTxMVDhgpPY
fjy/56alaKGQ3NosKrRyqFyUvwHw7z7Safk+/9bMpSjgsy4xZXQPiXnjnFagVUHJP1m0FqrU60Tqgjuh
VbI0uMiGjJe1UKymXjYaRsc/WzUG44AQO11VEuOFMNZBJwHbLYgF4F9IAgNPAEaw23W7V0bU3GyoFlVJ
uSj/zYUTqkpZqOhNd/xfupR4gO34Lttf+pxsyg7qp2/j+MKMiZR6jSWEPpihIcJc2r7O8MYtn3RnQhAP
evNVyQ34eto0QXRokKkUdLHP2HWaobdlpxHuGzZRmwNnmHLlfcCr7sWx/725FRfGThtjPOh3tI10XT+1
DAfCMlxVCAPxDgYtfMggmWG9kqTjR+54QN23SJFT9aBNvvAa6T1l9HIECZMEbBbAT6y76bPF81LDDyy8
/lfW7VL36EH7WpLQDvefAt7Yg/7gDnntwWc+vhq8InU9+CcfXw3eWDQe/KePV1bsEP4FAAD//8Y0rK/E
BQAA
`,
},
@ -12160,101 +12163,102 @@ AAAA//9ablv2IQMAAA==
"/templates/public-teammgmt.html": {
local: "templates/public-teammgmt.html",
size: 6160,
modtime: 1500052768,
size: 6401,
modtime: 1500470615,
compressed: `
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
z69eFl9HLqrLed2b/w0AAP//tiDe3hAYAAA=
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
GQAA
`,
},
"/templates/public-voting.html": {
local: "templates/public-voting.html",
size: 12041,
modtime: 1500050367,
size: 12039,
modtime: 1500477012,
compressed: `
H4sIAAAJbogA/+xaXY/bNta+z69g9BaVjfFH++5iL+bDQDJpd7NoUiCZZFEEg0K2aFuJLBoSNRN34P++
zzkkJUqWPE62W/Ric5GRycPD8/mcQ0oPDyJZikxpMbmRm20aafki0hF+RJtC7PdPhLiMk7vZayVW0UYW
Yh3dSTGXMhOLXII6vpzSPOjASqaFrBeJRRoVxVWwUJmWmQ6I6E2UfRIqk0LlYqNyabkuc7URO1XmYhnd
qTzRUmglUhkVuhqZEFu3WR9/zKz/f/YLcbpeq2Qhi8spBsyMjuapFEl8FeQQQ8ZjHggcn22ZSzMk6sfx
XOWxzGUsFthD5nYX4raWUex+0e+8/sHTM1L2coqH1vjfobN4jf+6JsnyvZNvYXSZFWuli67p5hh+VSLR
jCfupZ6reOdN1j/xg/SenW7td5kxpyC9uu1dZn+Mxf8ga59sWc4KqL6S4ptkJL65E+dXPZkmfL3YaBoz
ubofPzx8czd59+7li/0+EDHWjGmGKPyZpvCxM3Fl+WihE5UVwewyaph/XmqtMuE9j7d5sonyXSDWuVxe
BR+ju6hY5MlWn2/UnbxRb5jjIPS2D4cX4Jw4zssIaTvepiXtN01m4lkcU0a/VxqWjshPcY/Ad0on2Wq8
UCljwzjDf8EMZsRe5MoJeQv2Oo0FWarB4otWswBFHQXW/EWxUGWmyf4pgNAJ5oVLyx8cBhZnO6gNZHrC
tOwIb6ykNeQASOwtHbZ3qSHY41d73HkWmZZksfx8FYy/7/AzeN97uzzu6oaIEKPHLpBsKK7TZPGJoyGR
9xQNBzpkcVOFprf87Duk/xowQ1VLlw7RlirfCJMtV8EU0QC8QuKU800Cl+dSl3km7qI0QSxICugBGcTt
nmTbUhvMK2RuVuvdVl4F6ySOZRYIikZ/FqxKDARi2sFEJ4BUHW223Vy8acvm4aEFL46CwKPewWb9aUAg
im20kOM7metkEaUgSdNxnqzW2kllrBPM3vJfTvOnl1PDxXmC7NpwxBdBo+81FpFcl6t0vMpVCfXJWF6m
jk22U8QK0rzQuxRyxkkB9rvzDC3IRVXC/tIBL2K+Ey3EAJ1ZkEZzmfohRHLwYDCrgvsOwY0uJ1klGUxW
JL8B+JjGMvGjkOvcOEpTscaK38AxSgl3FEb0utzMsyhJWeMoyVARTWh0TDj/eqbdrMi6+MMGPoo+wIkD
JJCbebJayaxewGBA/Hw8qJMTM8LUJlFTiY7S1fCPxdXuhdZMlcKBiFLtEb6QRlhkrHF2voCrwfGcYWnq
5P0xSSXF635/MY8K+be/jioWN463aOZJjU5NnKnRxG9/3Tw7l3Rx1pOxsd9b2K/Sx6SyWCKbTOQSziwo
fhoeiNWi3CBCJiupf0glPT7fvUT57WIeDifM/aek0JMoBpXZxYC2kbWW9NJsMXtyF+VcKgtxJR7E/uLJ
ybn5hJd98OrDLfGAEYK69p4L06pQKsG+I5qti7ubrdLPkfiV91x88KIakTKi/4/ENGcvKFwYjWoPidsn
RkVrhifLMmO8F+26pzdlmcRD1ods5EkELXs94wNReGaZwDFAndcqlgOdl3J4AZ4e4YQhamIR6ioMeR7y
vFJxlA4eOOx0olN5LkJPxnDEM0BgO2kcYja9nVRmNmRUGkmEc39rO8VoXcDQDzbk3W4vILfdRoitKhKy
Fca5BFQTHLnnAvEmWWQe3t/izx66+lbuwBQkoWflY8YlSjJNshwQ3ZXIkD9mrRDTqbhWZRpnIc6NaHCA
ntLTdDKZiB/yXOXGZFL/iFxZv5JFAZgYhDzFwI0GEEsj7a0diULl+Q4swpH4EEqiDUfhMopBHN6yTEKY
9oCe91aZCpyPBUx3KhOb+zVAa1Axmayj4hpDMTmxGAyd4jVBLqlJZxpv2TLJC82Dw4Zw5LMbdZ2qQr4q
Vr6I5nhvpRyEQA4jUGvJJMnA/0Z+1lgcmOr3klCXaiATBRd2M/Vyc2SHAI4NeAeim8A5z7TOE0QlPANE
h9XDqcHz8KwoJoTvIJqYgnIWNkeplPQxQ/EAMxCvDoaHRsXKbNF2C4ywxmwqfoSS9mxN16Bs/OPhciM1
mn1llRFJ8Z4mYL0BhLbnr+EEXfZKr8VMfOdS4qmldHFxEOO/qFJsykKLxVpBEYEYN9csdClDYHEkvClq
bP/bL4avTbllXZBQVhcz8JyR5q3GI0LYhYc5p15LVEPoWWTR4tPkPo+2g/D//MuDmWnvcQTQ8YQmxgss
MbGJFnPA5gKD7y7w59LnauXE+NmZs483/SG5bQRzcva9UxpWfId+nZzyntrsQUvPw3lm35vurvlHtTZt
e2XN67fvLXNAmX/axontkywYzwjYhVqKiP01pQQQEbCOyAsDWzRBCQhyYjRXMPiG1tD60CgdCrZnrUXj
cK83VDeNHuDwI+HHqMZU2jQsRK7unffU/YHb3AUGlUDmZoOUaP2gsb6wbMCFCD58d3tRDccyJR+ZKc+c
xfPdNWUWdQ0wa+uuI7SgjC0tg45dhcfcPlVbm17PrbWZO6zF4lB8PFjDYUMZIriJj2Ctjp3khrTd0rWi
XrBRtrkkBBqYJd6EQaaB2cN495mxz03lZkvO0roFWDu08e/ncTPyySKG57ttI2b6YqIzlcMKBLJy88as
8oLETX6puftDDRH9TwLBVKkt4hlHyNWa45pFhpFNAyA3NolsqtilicmjXzMAxa8csknhVhMG4ZkGEP0j
4iVwIs44UToRyqrcgCWW3dliBrJvvzVJAVC6FU9N0+NdkPjTrcpILZLvGPMPWtxAYNKAkd8qQI/3Mswl
OZZsUG79Jc84MnzlsWBEvzOjM35W9O1gMtLZSOsh8Kex38sMUUs5AQtsoqzECXmHyp1kCxITp0DENCIC
NpZGKtYnt7ZmM56dOY57czfWsMHPWJTfJxj+SOFAzrJ+PE3KfQUTx9Okq+5VaVJun+usnSgTG9eUYONy
21vfzOKu0oYISsj5HtIZYip0OGZQRMdXdBSxYNe0TwftMgLBRUNlBmd1nz2mAdH06uAYHNOiRTP+3sNv
O3WaXp3UB5r1gNwLLP4zwlwNFb8TxP2LUhoptgZ29SAbymK0I2yb76q8/xJ4s7nUC1cEah4EHqAXBOlD
LfLx/3Dr63Hrv9h7uh6tp/t07xL/RP0ndn/DnR9vvODzCZwYK7pkyKSMq8VoO0/oUnt7VLu8s0etWdun
Vo/q1h72qFW3+ZhMjY6SrGR6zy5pap780JLFLmyKQlloo9Qz4UH3arpUFwV9fSoxQyB4Ye9AzIWXh2a9
kNp8KX3Qqh80wxdH0gWGrV6DmyMyMDYTUZ4DIxH75jMHzg/6goJChz+isEt2UhOXAaFpmaSxSTazmr+N
6MqdYZ083va2sbDndNr3hohv1DPiVh+SQl/2NydJzgbG0RUqFFbyE6Q+IvObkyRuy3utMnoVVQiZEAw2
d0GNatuJYsPXSM0/yoUuiFWo52lIt6xlGsMhjmM3N0/0toxg4/UDkq4PPtxW9Tw/QCYg0jw9Cw/6A4NP
WNCRdjQqo8V64MQYyBRFLIk/N8qqpEtkU1LdQYEqqTfsKu3T5t0ppyKLjv8nC5UtIk3XPHTT//P84+CQ
w7BdT9q3RPjjBZll5EeZcYXpLKiU2MpvgqdZHzxJDhowlpp0ufh9qwFUblcDs1fVJKMcnlup3T04Xbaf
s7370La6k2e0qS+dHAeS9PWjXKrXKz1ciuKavlI4QRTvVYDhVd+i8ocOxrlHfVvdXvHLYQMENa6Y1KM+
gduVKgAELVBL4uGKunj5An1dBYz8KRCDjGv41gT2lPF8gUavI7SQn7eU0WhGu/CF79TqYIH7POi5aMRQ
EPRdI3ZeHrpsEWcip1aWwuEsGAX9puq8hbGjxmo6tmVCEaDSO2HbOpmGgVsq86aG0yZqASy3RJUNjl76
VCbRp1xG6c5rqHYjU51nj3A04ht6pu1h7I6+IxF6HyW0fo61Wq1SOeYXHO05+/2CvxWnyT9uXv0EAcP2
VyyIUwBEubUfsryipu/d1ryJYyhJIaMEA/s6LuM3aczYZJ1EaUfGhfyuIKQoQM/q4NqFTdedGUeMs7P/
LoGZV6aNs9NNy7THTMtn8pOMC6yPU3nUuma3E6xLu/r2pSP1YxZm5l9lYf/A3mtjZl/bWKZfYGQmbtXF
K7NhPd3tBNMgn+YBMDiIbvOOxhfjqPn5WyFreXOgedTszPVxu4vBsLb74Rmu3+7Mn2csUuq4CZQHBwH3
1XEHVHJR8L4zDC1OttGw93Dxn+Jh9+sHPhjG8ekhZYh7Q8pOt/b+ughqZLBlfDSGur/oDJ2e2yi335B4
UWT49kXRYQQaJr3RZQt3p5VsqB1GmqE+jLTLqfsC5t8BAAD//42laFIJLwAA
H4sIAAAJbogA/+xaXY/bNta+n1/B6C0qG+OP9t3FXsyHgWTS7mbRpEAyyaIYDArZom0lsmhI1Ezcwfz3
fc4hKVGy5HGy3aIXm4uMTB4ens/nHFJ6eBDJUmRKi8m13GzTSMuXkY7wI9oU4vHxRIiLOLmbvVFiFW1k
IdbRnRRzKTOxyCWo44spzZ+AkUwLWS8RizQqistgoTItMx3MMP42yj4JlUmhcrFRubQ8l7naiJ0qc7GM
7lSeaCm0EqmMCl2NTIit2aqfP2bW/z/7hThdrVWykMXFFANmRkfzVIokvgxyiCHjMQ8Ejs+2zKUZEvXj
eK7yWOYyFgvsIXO7C3Fbyyh2v+h3Xv/g6RkpezHFQ2v879BZvMF/XZNk997JdzC5zIq10kXXdHMMvyqR
aMYT90LPVbzzJuuf+EF6z4639vvMmFOQXt32LrM/xuJ/kLWPtqwQyAqovpLim2QkvrkTZ5c9eSZ8vdho
GjO5uh8/PHxzN3n//tXLx8dAxFgzphmi8GeawsfOxJXlo4VOVFYEs4uoYf55qbXKhPc83ubJJsp3gVjn
cnkZfIzuomKRJ1t9tlF38lq9ZY6D0Ns+HJ6Dc+I4LyOk7XiblrTfNJmJ53FMGf1BaVg6Ij/FPQLfKZ1k
q/FCpYwN4wz/BTOYEXuRKyfkLdjrOBZkqQaLL1rNAhR1FFjzF8VClZkm+6eAQSeYFy4tf3AYWJTtoDaQ
6QnTsiO8sZLWkAPgsLd02N6lhmCPX+1x51lkWpLF8vNlMP6+w8/gfe/t8rSrGyJCjB67QLKhuEqTxSeO
hkTeUzTs6ZDFTRWa3vKzb5/+a8AMNS1dOkRbqnwjTLZcBlNEA/AKiVPONwlcnktd5pm4i9IEsSApoAdk
ELd7km1LbTCvkLlZrXdbeRmskziWWSAoGv1ZsCoxEIhpBxOdAFJ1tNl2c/GmLZuHhxa8OAoCj3oHm/XH
AYEottFCju9krpNFlIIkTcd5slprJ5WxTjB7x385zZ9dTA0X5wmya8MRXwSNvtdYRHJdrtLxKlcl1Cdj
eZk6NtlOEStI80LvUsgZJwXY784ytCDnVQn7Swe8iPlOtBADdGZBGs1l6ocQycGDwawK7jsEN7qcZJVk
MFmR/AbgYxrLxI9CrnPjKE3FGit+A8coJdxRGNHrcjPPoiRljaMkQ0U0odEx4fzrmXazIuviDxv4IPoA
J/aQQG7myWols3oBgwHx8/GgTk7MCFObRE0lOkpXwz8WV7sXWjNVCgciSrVH+FIaYZGxxtn5Aq4GxzOG
pamT98cklRSvj4/n86iQf/vrqGJx7XiLZp7U6NTEmRpNvGiu5tm5pIuznoyN/d7BfpU+JpXFEtlkIpdw
ZkHx0/BArBblBhEyWUn9Qyrp8cXuFcpvF/NwOGHuPyWFnkQxqMwuBrSNrBeG8ezkLsq5QBbiUjyIx/OT
ozPyhJfdeFXhlnhA9aCuuGfCNCiUQLDqiGbrku5mq6RzJH69PRM3XiwjPkb0/4FI5pwFhQueUe0XcXti
VLRuOlmWGaO8aFc7vSnLJB6yPmQjTyJo2esPH37CU8sE7gDWvFGxHOi8lMNz8PQIJwxME4tLl2HI85Dn
tYqjdPDAwaYTncozEXoyhiOeAe7aSeMQs+ntpDKzIaOCSCKc+VvbKcboAoZ+sIHudnsJue02QmxVkZCt
MM7AX01wvJ4JRJlkkXn48RZ/HqGrb+UOJEHqeVY+ZFyiJNMkywHRXYoMWWPWCjGdiitVpnEW4rSItgaY
KT1NJ5OJ+CHPVW5MJvWPyJD1a1kUAIdByFMM12j7sDTS3tqRKFSe78AiHImbUBJtOAqXUQzi8JZlEsI0
BfT8aJWpIPlQwHQnMLG5XwOqBhWTyToqrjAUkxOLwdApXhPkklpzpvGWLZO80Dw4bAhHPrtWV6kq5Oti
5YtojvRWykEIvDACtZZMkgz8r+VnjcWBqXmvCGup8jFRcG43U682B3YI4NiAdyC6CZzzXOs8QVTCM8Bx
WD2cGhQPT4tiQqgOookpI6dhc5QKSB8zlAwwA/Fqb3hoVKzMFm23wAhrzKbiByhpz9Z0DcXGPx4aN1Kj
2U1WGZEUH2gC1htAaHvqGk7QW6/0WszEdy4lnllKFxd7Mf6LKsWmLLRYrBUUEYhxc7lCVzEEFgfCm6LG
dr39YvjalFvWBQlldTEDLxhp3mk8IoRdeJjT6ZVEDYSeRRYtPk3u82g7CP/PvzKYmaYejb+OJzQxXmCJ
iU00lgM2Fxh8d44/Fz5XKyfGT0+dfbzpm+S2EczJ6fdOaVjxPbp0csoHaq4HLT3355l9b7q7lh812jTr
lTWv3n2wzAFl/hkb57RPsmA8I2AXaiki9teUEkBEwDoiLwxs0QQlIMiJ0VzB4BtaQ+tDo3Qo2J61Fo0j
vd5Q3TR6gMOPhB+jGlNp07AQubp33lP3e25z1xZUApmbDVKi9YPG+sKyARciuPnu9rwajmVKPjJTnjmL
F7sryizqGmDW1g1HaEEZW1oGHbsKj7l9qrY2HZ5bazN3WIvFofh0sIbDhjJEcB0fwFodO8kNabuRa0W9
YKNsc0kINDBLvAmDTAOzh/Huc2Of68rNlpyldQuwdmjj38/jZuSTRQzP99tGzPTFRGcqhxUIZOXmrVnl
BYmb/FJz94caIvqfBIKpUlvEMw6OqzXHNYsMI5sGQG5sEtlUsUsTk0e/ZgCKXzlkk8KtJgzCMw0g+kfE
S+AcnHGidCKUVbkBSyy7s8UMZN9+a5ICoHQrnpmmx7sW8adblZFaJN8x5h+0uIbApAEjv1WAHu9lmEty
LNmg3PpLnnNk+MpjwYh+Z0Zn/Kzo28FkpLOR1kPgT2O/VxmilnICFthEWYlz8Q6VO8kWJCbOfohpRARs
LI1UrE9ubc1mPD11HB/NjVjDBj9jUX6fYPgjhQM5y/rxOCkfK5g4nCZdda9Kk3L7QmftRJnYuKYEG5fb
3vpmFneVNkRQQs73kM4QU6HDMYMiOr6ko4gFu6Z9OmiXEQjOGyozOKv77CkNiKZXB8fgkBYtmvH3Hn7b
qeP06qTe06wH5F5i8Z8R5mqo+J0g7l+U0kixNbCrB9lQFqMdYdt8V+X9l8CbzaVeuCJQ8yBwD70gSB9q
kY//h1tfj1v/xd7T9Wg93ad7g/gn6j+x+1vu/HjjBZ9P4MRY0SVDJmVcLUbbeUSX2tuj2uWdPWrN2j61
elS3dr9HrbrNp2RqdJRkJdN7dklT8+SHlix2YVMUykIbpZ4J97pX06W6KOjrU4kZAsELewdiLrw8NOuF
1Oar6L1Wfa8ZPj+QLjBs9fLbHJGBsZmI8hwYidg3HzdwftBXExQ6/OGEXbKTmrgMCE3LJI1NspnV/EVE
V+4M6+TxtreNhT2n077XRHytnhO3+pAU+rK/PUpyNjCOrlChsJIfIfUBmd8eJXFb3iuV0QuoQsiEYLC5
C2pU204UG75Gav5RLnRBrEI9T0O6ZS3TGA5xHLu5eaK3ZQQbrx+QdH1wc1vV83wPmYBI8/Q03OsPDD5h
QUfa0aiMFuuBE2MgUxSxJP7cKKuSLpFNSXUHBaqk3rCrtM+ad6eciiw6/p8sVLaINF3z0E3/z/OPg30O
w3Y9ad8S4Y8XZJaRH2XGFaazoFJiK78JnmZ98CTZa8BYatLl/PetBlC5XQ3MXlWTjHJ4ZqV29+B02X7G
9u5D2+pOntGmvnRyHEjSN09yqV6v9HApiiv6NuEIUbxXAYZXfYvKnzcY5x70bXV7xa+EDRDUuGJSj/oE
bleqABC0QC2Jhyvq4tVL9HUVMPIHQAwyruFbE9hTxvMFGr2O0EJ+3lJGoxntwhe+U6uDBe7zoOe8EUNB
0HeN2Hl56LJFnIqcWlkKh9NgFPSbqvMWxo4aq+nYlglFgEpvgm3rZBoGbqnMmxpOm6gFsNwSVTY4eOlT
mUQfcxmlO6+h2o1MdZ49wNGIb+iZtoexO/qOROh9itD6OdZqtUrlmF9wtOfsVwv+Vpwm/7h+/RMEDNvf
riBOARDl1n6+8pqavvdb8yaOoSSFjBIM7Ou4jN+kMWOTdRKlHRkX8ruCkKIAPauDaxc2XXdmHDHOzv67
BGZemTbOjjct0x4yLZ/JjzIusD5O5UHrmt2OsC7t6tuXjtRPWZiZf5WF/QN7r42ZfW1jmX6BkZm4VRcv
zYb1dLcTTIN8nAfAYC+6zTsaX4yD5ucvhKzlzYHmSbMz16ftLgbD2u77Z7h+uzN/nrFIqeMmUO4dBNyX
xh1QyUXB+7owtDjZRsPew8V/iofdrx/4YBjHx4eUIe4NKTvd2vvrIqiRwZbxwRjq/o4zdHpuo9x+Q+JF
keHbF0X7EWiY9EaXLdydVrKhth9phno/0i6m7guY+muQfwcAAP//0nhPKAcvAAA=
`,
},

View File

@ -189,7 +189,7 @@ table tfoot {
.pure-button-toggle-last {
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
margin-left: -1px;
margin-left: -5px;
border-left: 1px solid #CCC;
}

View File

@ -66,7 +66,7 @@ type pageData struct {
ClientId string
ClientIsAuth bool
ClientIsServer bool
TeamID string
AuthMode int
PublicMode int
TemplateData interface{}
@ -290,11 +290,11 @@ func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
p.ClientId = p.session.getClientId()
p.ClientIsAuth = clientIsAuthenticated(p.ClientId, req)
p.ClientIsServer = clientIsServer(req)
// TeamID is for team self-administration
p.TeamID, _ = p.session.getStringValue("teamid")
// Public Mode
p.PublicMode = dbGetPublicSiteMode()
// Authentication Mode
p.AuthMode = dbGetAuthMode()
return p
}
@ -318,7 +318,6 @@ func (p *pageData) show(tmplName string, w http.ResponseWriter) error {
// outputTemplate
// Spit out a template
func outputTemplate(tmplName string, tmplData interface{}, w http.ResponseWriter) error {
// TODO: Use embedded files for these... Hopefully?
n := "/templates/" + tmplName
l := template.Must(template.New("layout").Parse(FSMustString(site.DevMode, n)))
t := template.Must(l.Parse(FSMustString(site.DevMode, n)))

View File

@ -16,6 +16,12 @@ const (
SiteModeError
)
const (
AuthModeAuthentication = iota
AuthModeAll
AuthModeError
)
func GetDefaultSiteConfig() *siteData {
ret := new(siteData)
ret.Title = "ICT GameJam"
@ -144,6 +150,21 @@ func dbSaveSiteConfig(dat *siteData) error {
return db.SetValue(siteConf, "server-dir", dat.ServerDir)
}
func dbGetAuthMode() int {
if ret, err := db.GetInt([]string{"site"}, "auth-mode"); err != nil {
return AuthModeAuthentication
} else {
return ret
}
}
func dbSetAuthMode(mode int) error {
if mode < 0 || mode >= AuthModeError {
return errors.New("Invalid site mode")
}
return db.SetInt([]string{"site"}, "auth-mode", mode)
}
func dbGetPublicSiteMode() int {
if ret, err := db.GetInt([]string{"site"}, "public-mode"); err != nil {
return SiteModeWaiting

View File

@ -9,6 +9,7 @@ import (
type Game struct {
Name string
TeamId string
Link string
Description string
Screenshots []Screenshot
}
@ -21,7 +22,7 @@ type Screenshot struct {
Filetype string
}
func dbUpdateTeamGame(teamId, name, desc string) error {
func dbUpdateTeamGame(teamId, name, link, desc string) error {
var err error
if err = openDatabase(); err != nil {
return err
@ -44,6 +45,9 @@ func dbUpdateTeamGame(teamId, name, desc string) error {
if err := db.SetValue(gamePath, "name", name); err != nil {
return err
}
if err := db.SetValue(gamePath, "link", link); err != nil {
return err
}
if err := db.SetValue(gamePath, "description", desc); err != nil {
return err
}
@ -79,6 +83,9 @@ func dbGetTeamGame(teamId string) *Game {
if gm.Description, err = db.GetValue(gamePath, "description"); err != nil {
gm.Description = ""
}
if gm.Link, err = db.GetValue(gamePath, "link"); err != nil {
gm.Link = ""
}
gm.Screenshots = dbGetTeamGameScreenshots(teamId)
return gm
}

View File

@ -16,12 +16,13 @@ func initPublicPage(w http.ResponseWriter, req *http.Request) *pageData {
}
func handleMain(w http.ResponseWriter, req *http.Request) {
switch dbGetPublicSiteMode() {
case SiteModeWaiting:
page := initPublicPage(w, req)
page := initPublicPage(w, req)
showWaiting := (dbGetAuthMode() == AuthModeAuthentication) && !page.ClientIsAuth
showWaiting = showWaiting && (dbGetPublicSiteMode() == SiteModeWaiting)
if showWaiting {
page.SubTitle = ""
page.show("public-waiting.html", w)
case SiteModeVoting:
} else {
loadVotingPage(w, req)
}
}
@ -153,9 +154,10 @@ func handleTeamMgmtRequest(w http.ResponseWriter, req *http.Request) {
redirect("/team/"+teamId, w, req)
case "savegame":
name := req.FormValue("gamename")
link := req.FormValue("gamelink")
desc := req.FormValue("gamedesc")
if dbIsValidTeam(teamId) {
if err := dbUpdateTeamGame(teamId, name, desc); err != nil {
if err := dbUpdateTeamGame(teamId, name, link, desc); err != nil {
page.session.setFlashMessage("Error updating game: "+err.Error(), "error")
} else {
page.session.setFlashMessage("Team game updated", "success")

View File

@ -29,6 +29,10 @@
<label class="control-label" for="gamename">Game Name</label>
<input id="gamename" name="gamename" value="{{ .TemplateData.Game.Name }}" placeholder="Game Name">
</div>
<div class="pure-control-group">
<label class="control-label" for="gamelink">Link</label>
<input id="gamelink" name="gamelink" value="{{ .TemplateData.Game.Link }}" placeholder="Game Link">
</div>
<div class="pure-control-group">
<label class="control-label" for="gamedesc">Description</label>
<textarea id="gamedesc" name="gamedesc" placeholder="Description...">{{ .TemplateData.Game.Description }}</textarea>

View File

@ -4,6 +4,13 @@
<button onclick="window.location.href='/admin/mode/0'" class="pure-button-toggle-first pure-button {{ if eq .PublicMode 0 }}pure-button-primary{{ end }}">Waiting</button>
<button onclick="window.location.href='/admin/mode/1'" class="pure-button-toggle-last pure-button {{ if eq .PublicMode 1 }}pure-button-primary{{ end }}">Voting</button>
</div>
<!--
<div>
<h3>Allowed Voting Terminals</h3>
<button onclick="window.location.href='/admin/authmode/0'" class="pure-button-toggle-first pure-button {{ if eq .AuthMode 0 }}pure-button-primary{{ end }}">Only Authenticated Clients</button>
<button onclick="window.location.href='/admin/authmode/1'" class="pure-button-toggle-last pure-button {{ if eq .AuthMode 1 }}pure-button-primary{{ end }}">Any Client Can Vote</button>
</div>
-->
{{ if eq .PublicMode 1 }}
<div>
<h3>Current Results</h3>

View File

@ -14,6 +14,10 @@
<label class="control-label" for="gamename">Game Name</label>
<input id="gamename" name="gamename" value="{{ .TemplateData.Game.Name }}" placeholder="Game Name">
</div>
<div class="pure-control-group">
<label class="control-label" for="gamelink">Game Website</label>
<input id="gamelink" name="gamelink" value="{{ .TemplateData.Game.Link }}" placeholder="Game Link">
</div>
<div class="pure-control-group">
<label class="control-label" for="gamedesc">Description</label>
<textarea id="gamedesc" name="gamedesc" placeholder="Description...">{{ .TemplateData.Game.Description }}</textarea>

View File

@ -1,6 +1,6 @@
{{ if not .TemplateData.Teams }}
<div>No games have been created</div>
{{ else }}
{{ else }}
<div class="content">
Rank one or more games from your favorite to least favorite.
</div>
@ -70,7 +70,6 @@
</div>
{{ end }}
<div id="embiggenedScreenShot" class="hidden fullscreen" onclick="javascript:document.getElementById('embiggenedScreenShot').classList.add('hidden');"></div>
{{ end }}
<script>
var teams = { };
{{ range $i, $v := .TemplateData.Teams }}
@ -369,3 +368,4 @@ function createUnrankedActionsTd(tmUUID) {
return td;
}
</script>
{{ end }}