|
| 1 | +{ |
| 2 | + config, |
| 3 | + pkgs, |
| 4 | + lib, |
| 5 | + ... |
| 6 | +}: let |
| 7 | + html = builtins.toFile "reset.html" '' |
| 8 | + <form method=post> |
| 9 | + <button name=user value=audi01>Reset audi01</button><br> |
| 10 | + <button name=user value=audi02>Reset audi02</button><br> |
| 11 | + <button name=user value=audi03>Reset audi03</button><br> |
| 12 | + <button name=user value=audi04>Reset audi04</button><br> |
| 13 | + <button name=user value=audi05>Reset audi05</button><br> |
| 14 | + <button name=user value=audi06>Reset audi06</button><br> |
| 15 | + <button name=user value=audi07>Reset audi07</button><br> |
| 16 | + <button name=user value=audi08>Reset audi08</button><br> |
| 17 | + </form> |
| 18 | + ''; |
| 19 | + script = pkgs.writeShellScript "reset.sh" '' |
| 20 | + export PATH=${lib.makeBinPath ((with pkgs; [coreutils sudo]) ++ [config.services.postgresql.package])} |
| 21 | +
|
| 22 | + sql() { |
| 23 | + sudo -u postgres psql "academy-$1" -tA <<< "$2" |
| 24 | + } |
| 25 | +
|
| 26 | + reset() { |
| 27 | + if ! [[ "$1" =~ ^audi[0-9]+$ ]]; then return; fi |
| 28 | + id=$(sql auth "select id from auth_user where name='$1'") |
| 29 | + sql challenges "delete from challenges_coding_challenge_submissions where creator='$id';" |
| 30 | + sql challenges "delete from challenges_user_subtasks where user_id='$id';" |
| 31 | + EOF |
| 32 | + } |
| 33 | +
|
| 34 | + echo Content-type: text/html |
| 35 | + echo |
| 36 | +
|
| 37 | + user=$(cut -d= -f2-) |
| 38 | + if [[ -n "$user" ]]; then |
| 39 | + reset "$user" > /dev/null |
| 40 | + echo '<html><head><meta http-equiv="refresh" content="1; url=/reset" /></head><body>Resetting '"$user"'</body></html>' |
| 41 | + else |
| 42 | + cat ${html} |
| 43 | + fi |
| 44 | + ''; |
| 45 | +in { |
| 46 | + services.fcgiwrap.enable = true; |
| 47 | + services.nginx.virtualHosts."api.test.bootstrap.academy".locations."= /reset".extraConfig = '' |
| 48 | + auth_basic "Access restricted"; |
| 49 | + auth_basic_user_file ${config.sops.secrets."reset/htpasswd".path}; |
| 50 | +
|
| 51 | + fastcgi_pass unix:${config.services.fcgiwrap.socketAddress}; |
| 52 | + fastcgi_param SCRIPT_FILENAME ${script}; |
| 53 | + ''; |
| 54 | + |
| 55 | + sops.secrets."reset/htpasswd".owner = "nginx"; |
| 56 | +} |
0 commit comments