2016-01-31 20:45:35 -07:00
|
|
|
Dirtbags Monarch Of The Hill Server
|
2016-01-31 20:41:22 -07:00
|
|
|
=====================
|
|
|
|
|
2016-01-31 20:45:35 -07:00
|
|
|
This is a set of thingies to run our Monarch-Of-The-Hill contest,
|
|
|
|
which in the past has been called
|
|
|
|
"Tracer FIRE",
|
|
|
|
"Project 2",
|
|
|
|
"HACK",
|
|
|
|
"Queen Of The Hill",
|
2016-10-21 14:38:19 -06:00
|
|
|
"Cyber Spark",
|
2018-09-17 17:00:08 -06:00
|
|
|
"Cyber Fire",
|
|
|
|
"Cyber Fire Puzzles",
|
|
|
|
and "Cyber Fire Foundry".
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2016-01-31 20:45:35 -07:00
|
|
|
Information about these events is at
|
|
|
|
http://dirtbags.net/contest/
|
|
|
|
|
|
|
|
This software serves up puzzles in a manner similar to Jeopardy.
|
2016-10-21 14:38:19 -06:00
|
|
|
It also tracks scores,
|
2016-01-31 20:41:22 -07:00
|
|
|
and comes with a JavaScript-based scoreboard to display team rankings.
|
|
|
|
|
|
|
|
|
2016-01-31 20:45:35 -07:00
|
|
|
How everything works
|
|
|
|
---------------------------
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2016-01-31 20:45:35 -07:00
|
|
|
This section wound up being pretty long.
|
2016-10-21 14:38:19 -06:00
|
|
|
Please check out [the overview](docs/overview.md)
|
2016-01-31 20:45:35 -07:00
|
|
|
for details.
|
2016-01-31 20:41:22 -07:00
|
|
|
|
|
|
|
|
2016-10-20 11:32:21 -06:00
|
|
|
Getting Started Developing
|
|
|
|
-------------------------------
|
|
|
|
|
2016-12-01 16:22:35 -07:00
|
|
|
If you don't have a `puzzles` directory,
|
|
|
|
you can copy the example puzzles as a starting point:
|
|
|
|
|
|
|
|
$ cp -r example-puzzles puzzles
|
|
|
|
|
|
|
|
Then launch the development server:
|
|
|
|
|
2016-10-20 11:32:21 -06:00
|
|
|
$ python3 tools/devel-server.py
|
|
|
|
|
2016-12-01 16:22:35 -07:00
|
|
|
Point a web browser at http://localhost:8080/
|
2016-10-20 11:32:21 -06:00
|
|
|
and start hacking on things in your `puzzles` directory.
|
|
|
|
|
2016-10-21 14:38:19 -06:00
|
|
|
More on how the devel sever works in
|
|
|
|
[the devel server documentation](docs/devel-server.md)
|
|
|
|
|
2016-10-20 11:32:21 -06:00
|
|
|
|
|
|
|
Running A Production Server
|
|
|
|
====================
|
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Run `dirtbags/moth` (Docker) or `mothd` (native).
|
2016-10-20 11:32:21 -06:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
`mothd` assumes you're running a contest out of `/moth`.
|
|
|
|
For Docker, you'll need to bind-mount your actual directories
|
|
|
|
(`state`, `mothballs`, and optionally `resources`) into
|
|
|
|
`/moth/`.
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
You can override any path with an option,
|
|
|
|
run `mothd -help` for usage.
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
State Directory
|
|
|
|
===============
|
2017-02-05 16:42:41 -07:00
|
|
|
|
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Pausing scoring
|
|
|
|
-------------------
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Create the file `state/disabled`
|
|
|
|
to pause scoring,
|
|
|
|
and remove it to resume.
|
|
|
|
You can use the Unix `touch` command to create the file:
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
touch state/disabled
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
When scoring is paused,
|
|
|
|
participants can still submit answers,
|
|
|
|
and the system will tell them whether the answer is correct.
|
|
|
|
As soon as you unpause,
|
|
|
|
all correctly-submitted answers will be scored.
|
2017-02-05 16:42:41 -07:00
|
|
|
|
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Resetting an instance
|
|
|
|
-------------------
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Remove the file `state/initialized`,
|
|
|
|
and the server will zap everything.
|
2017-02-05 16:42:41 -07:00
|
|
|
|
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Setting up custom team IDs
|
|
|
|
-------------------
|
2017-02-05 16:42:41 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
The file `state/teamids.txt` has all the team IDs,
|
|
|
|
one per line.
|
|
|
|
This defaults to all 4-digit natural numbers.
|
|
|
|
You can edit it to be whatever strings you like.
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
We sometimes to set `teamids.txt` to a bunch of random 8-digit hex values:
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
for i in $(seq 50); do od -x /dev/urandom | awk '{print $2 $3; exit;}'; done
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Remember that team IDs are essentially passwords.
|
2016-01-31 20:41:22 -07:00
|
|
|
|
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Mothball Directory
|
|
|
|
==================
|
2016-01-31 20:41:22 -07:00
|
|
|
|
2018-09-17 17:00:08 -06:00
|
|
|
Installing puzzle categories
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
The development server will provide you with a `.mb` (mothball) file,
|
|
|
|
when you click the `[mb]` link next to a category.
|
|
|
|
|
|
|
|
Just drop that file into the `mothballs` directory,
|
|
|
|
and the server will pick it up.
|
|
|
|
|
|
|
|
If you remove a mothball,
|
|
|
|
the category will vanish,
|
|
|
|
but points scored in that category won't!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Resources Directory
|
|
|
|
===================
|
|
|
|
|
|
|
|
|
|
|
|
Making it look better
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
`mothd` provides some built-in HTML for rendering a complete contest,
|
|
|
|
but it's rather bland.
|
|
|
|
You can override everything by dropping a new file into the `resources` directory:
|
|
|
|
|
|
|
|
* `basic.css` is used by the default HTML to pretty things up
|
|
|
|
* `index.html` is the landing page, which asks to register a team
|
|
|
|
* `puzzle.html` and `puzzle.js` render a puzzle from JSON
|
|
|
|
* `puzzle-list.html` and `puzzle-list.js` render the list of active puzzles from JSON
|
|
|
|
* `scoreboard.html` and `scoreboard.js` render the current scoreboard from JSON
|
|
|
|
* Any other file in the `resources` directory will be served up, too.
|
|
|
|
|
|
|
|
If you don't want to read through the source code, I don't blame you.
|
|
|
|
Run a `mothd` server and pull the various static resources into your `resources` directory,
|
|
|
|
and then you can start hacking away at them.
|
|
|
|
|
|
|
|
|
|
|
|
Changing scoring
|
|
|
|
--------------
|
|
|
|
|
|
|
|
Believe it or not,
|
|
|
|
scoring is determined client-side in the scoreboard,
|
|
|
|
from the points log.
|
|
|
|
You can hack in whatever algorithm you like.
|
|
|
|
|
|
|
|
If you do hack in a new algorithm,
|
|
|
|
please be a dear and email it to us.
|
|
|
|
We'd love to see it!
|
2016-01-31 20:41:22 -07:00
|
|
|
|