mirror of https://github.com/dirtbags/moth.git
Complete but undebugged puzzler.cgi
This commit is contained in:
parent
97783371ce
commit
a1ca5b318c
|
@ -0,0 +1,45 @@
|
||||||
|
#! /usr/bin/lua
|
||||||
|
|
||||||
|
local koth = {}
|
||||||
|
|
||||||
|
-- cut -d$ANCHOR -f2- | grep -Fx "$NEEDLE"
|
||||||
|
function anchored_search(haystack, needle, anchor)
|
||||||
|
for line in io.lines(haystack) do
|
||||||
|
if (anchor) then
|
||||||
|
pos = line:find(anchor)
|
||||||
|
if (pos) then
|
||||||
|
line = line:sub(pos+1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if (line == needle) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function koth.anchored_search(haystack, needle, anchor)
|
||||||
|
local ok, ret = pcall(anchored_search, haystack, needle, anchor)
|
||||||
|
|
||||||
|
return ok and ret
|
||||||
|
end
|
||||||
|
|
||||||
|
function koth.page(title, body)
|
||||||
|
print("Content-type: text/html")
|
||||||
|
print()
|
||||||
|
print("<!DOCTYPE html>")
|
||||||
|
print("<html><head><title>" .. title .. "</title><link rel=\"stylesheet\" href=\"css/style.css\"></head>")
|
||||||
|
print("<body><h1>" .. title .. "</h1>")
|
||||||
|
if (body) then
|
||||||
|
print("<section>")
|
||||||
|
print(body)
|
||||||
|
print("</section>")
|
||||||
|
end
|
||||||
|
print("</body></html>")
|
||||||
|
os.exit(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return koth
|
|
@ -1,14 +1,30 @@
|
||||||
#! /usr/bin/lua
|
#! /usr/bin/lua
|
||||||
|
|
||||||
local cgi = require "cgi"
|
local cgi = require "cgi"
|
||||||
|
local koth = require "koth"
|
||||||
|
|
||||||
|
local team = cgi.fields['t'] or ""
|
||||||
|
local category = cgi.fields['c'] or ""
|
||||||
|
local points = cgi.fields['p'] or ""
|
||||||
|
local answer = cgi.fields['a'] or ""
|
||||||
|
|
||||||
-- Read in team and answer
|
-- Defang category name; prevent directory traversal
|
||||||
|
category = category:gsub("[^A-Za-z0-9]", "-")
|
||||||
|
|
||||||
|
-- Check answer
|
||||||
|
local needle = points .. " " .. answer
|
||||||
|
local haystack = "../puzzles/" .. category .. "/answers.txt"
|
||||||
|
local found = koth.anchored_search(haystack, needle)
|
||||||
|
|
||||||
|
if (not found) then
|
||||||
|
koth.page("Wrong answer")
|
||||||
|
end
|
||||||
|
|
||||||
print("Content-type: text/html")
|
local ok = koth.award_points(team, category, points, "P");
|
||||||
print()
|
if (not ok) then
|
||||||
print("<pre>")
|
koth.page("Error awarding points", "You got the right answer, but something blew up trying to give you points. Try again in a few seconds.")
|
||||||
print(cgi.fields["t"])
|
end
|
||||||
print("</pre>")
|
|
||||||
|
koth.page("Points awarded",
|
||||||
|
"<p>" .. points .. " points for " .. team .. ".</p>" ..
|
||||||
|
"<p><a href=\"puzzles.html\">Back to puzzles</a></p>")
|
||||||
|
|
Loading…
Reference in New Issue