๐ŸŽกOffseason Kiosk Programmer

In the event that you're hosting an offseason event, a Docker image containing the radio programming utility can be found below.



The only requirements are that Docker is installed and a network interface (Ethernet adapter) is configured to

  1. Assign the IP address of with a netmask of and no default gateway to your ethernet adapter of choice

  2. From a terminal open to the folder containing vh109-kiosk.tar.gz, run docker image load --input vh109-kiosk.tar.gz. This loads the docker image from the archive.

  3. If you don't need to change the default password ("supercoolpassword"), skip to step 4. The password is set using a hash and salt. As a hacky solution, the salt and hash can be generated by running the following in node (or any online NodeJS compiler).

const crypto = require("crypto")
const pass = "<SET PASSWORD HERE>"
const salt = crypto.randomBytes(8).toString("base64")
const hash = crypto.createHash("sha256").update(pass + salt).digest("base64")
console.log(`salt: ${salt}\nhash: ${hash}`)
  1. To persist the team keys data, we need to mount a local folder to the docker container. Create a data folder in the desired location. It must be referenced by absolute path and have the desired security for the raw team keys csv data.

  2. Run the docker container with the following, replacing "/path/to/local/folder" with the path to the folder you just created.

docker run -d --name kiosk --restart always -p 80:80 --net=bridge -v "/path/to/local/folder:/app/data" vh109-kiosk

If you created a custom password, use this command and also replace <HASH> and <SALT> with what you generated.

docker run -d --name kiosk --restart always -p 80:80 --net=bridge -v "/path/to/local/folder:/app/data" -e OVERRIDE_KEY_UPLOAD_HASH="<HASH>" -e OVERRIDE_KEY_UPLOAD_SALT="<SAlT>" vh109-kiosk

If you get an error about a container with the name kiosk already being in use, run the following to remove it.

docker stop kiosk
docker rm kiosk
  1. At this point, the kiosk should be running at http://localhost and auto restart as long as docker auto restarts.

  2. Upload your key material in CSV format (team,key) at http://localhost/upload

  3. The kiosk is now ready for use!

Last updated