moth/www/puzzler.cgi

33 lines
926 B
Plaintext
Raw Normal View History

2015-04-16 22:29:05 -06:00
#! /usr/bin/lua
local cgi = require "cgi"
2015-04-18 18:09:20 -06:00
local koth = require "koth"
2015-04-16 22:29:05 -06:00
2015-04-18 18:09:20 -06:00
local team = cgi.fields['t'] or ""
local category = cgi.fields['c'] or ""
local points = cgi.fields['p'] or ""
local answer = cgi.fields['a'] or ""
2015-04-18 14:24:00 -06:00
2015-04-18 18:09:20 -06:00
-- Defang category name; prevent directory traversal
category = category:gsub("[^A-Za-z0-9]", "-")
2015-04-18 14:24:00 -06:00
2015-04-18 18:09:20 -06:00
-- Check answer
local needle = points .. " " .. answer
local haystack = "../packages/" .. category .. "/answers.txt"
local found, err = koth.anchored_search(haystack, needle)
2015-04-18 14:24:00 -06:00
2015-04-18 18:09:20 -06:00
if (not found) then
koth.page("Wrong answer", err)
2015-04-18 18:09:20 -06:00
end
2015-04-18 14:24:00 -06:00
2015-04-18 19:13:07 -06:00
local ok, err = koth.award_points(team, category, points)
2015-04-18 18:09:20 -06:00
if (not ok) then
2015-04-18 19:13:07 -06:00
koth.page("Error awarding points",
"<p>You got the right answer, but there was a problem trying to give you points:</p>" ..
2015-04-18 19:13:07 -06:00
"<p>" .. err .. "</p>")
2015-04-18 18:09:20 -06:00
end
koth.page("Points awarded",
2015-04-18 19:13:07 -06:00
"<p>" .. points .. " points for " .. team .. "!</p>" ..
2015-04-18 18:09:20 -06:00
"<p><a href=\"puzzles.html\">Back to puzzles</a></p>")