medal 1.4.0

A simple online contest platform
medal-1.4.0 is not a library.

The Medal Contest Platform

Medal is a small platform for in-browser running contest written in rust.

It is designed for the German "Jugendwettbewerb Informatik", a computer science contest with tasks using Google Blockly as a programming language-replacement.

Translation

Folder structure

tasks/

Running Medal

Needs rustc and cargo 1.34 (stable) or higher[^1].

Rust can be obtained here: https://rustup.rs/

Running

make

compiles and runs a debug-/test-server.

For production use, a release binary should be compiled and served behind a reverse proxy (nginx, apache, …).

make release

compiles a release build with openssl statically linked for distribution.

The directories tasks/ and static/ can (and for throughput-purposes should) be served by the reverse proxy directly.

Deploy

It is recommended to run the platform behind a reverse proxy, that is serving static files directly.

The following configuration can be used for an Apache 2.4 webserver:

  ServerSignature Off
  ProxyPreserveHost On
  AllowEncodedSlashes NoDecode
  
  ProxyPass /static/ !
  ProxyPass /tasks/ !
  ProxyPass /favicon.ico !
  ProxyPass / http://[::1]:8080/
  ProxyPassReverse / http://[::1]:8080/
  
  Alias "/tasks/" "/path/to/medal/tasks/"
  Alias "/static/" "/path/to/medal/static/"
  Alias "/favicon.ico" "/path/to/medal/static/images/favicon.png"

  <filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
    Header set Cache-Control "max-age=604800, public"
  </filesMatch>

  <Directory "/path/to/medal/static/">
    Require all granted
  </Directory>
 
   
  <Directory "/path/to/medal/tasks/">
    Require all granted
  </Directory>

Contributing

Please format your code with rustfmt and check it for warnings with clippy.

You can install those with

rustup component add rustfmt --toolchain nightly
rustup component add clippy

Format the code and check for warnings with

make format
make clippy

Footnotes

[^1]: Can be compiled with rust 1.32 or higher without much work by downgrading the version of the reqwest crate. However, the test cases will not compile, then, due to usage of the cookie jar features of reqwest.