Skip to content

Commit 98b71a1

Browse files
committed
Add reset page for live event
1 parent 9e2c4e7 commit 98b71a1

File tree

4 files changed

+63
-3
lines changed

4 files changed

+63
-3
lines changed

hosts/test/backend/challenges.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
];
2222
settings = {
2323
internal_jwt_ttl = 10; # seconds
24-
cache_ttl = 10; # seconds
24+
cache_ttl = 300; # seconds
2525

2626
database = {
2727
url = "postgres://academy-challenges@localhost/academy-challenges?host=/run/postgresql";

hosts/test/default.nix

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
./backend
44
./backup.nix
55
./firewall.nix
6+
./reset.nix
67
./ssh.nix
78
];
89
}

hosts/test/reset.nix

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}

hosts/test/secrets.yml

+5-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ ssh:
3030
private-key: ENC[AES256_GCM,data:ljXYG7gTLgMX7gFe4okODTeojYHJQVpEaaBlsI8edlkjfkbbNUnLydcYJvIzWi99o17+qAuToEWLKQT/1tFNDG3uSvkXoe4fgUvxM+r1MtXYk/vi1WPCwSNCMLQLVlT5bZMm1lLjGNNcDYDD2B5xqDfF224L5ItKgnR4LVFxZuECEYzvWawvsPqiNUozKKmEaW28hrm50MGd1X9hPu1oOwSB0KaMa+DUXzIryjH6NOH7N61/QCg/tnP7iTHfvLw2jCVKOqofYANbJ/lznP211nzH8mq4Mp9KzD6MeeqBr1DY/e6SYH0cv+Ecwvdk2vYkHXNcCt5O4frg/Rj15aKhUKMnsAAGMaEtIulsYbPGAfXw2YqIYdtYfVy1TKNKWQdeDomwhh9PZMU3CNNYqXLXfjMW0GQtFxYjyElka1ZfMWsLZ3hl59LHoIbvy2QFW4YdSe1TuqTuOkUw2HZhwjGjIhZ3qZpYQiygkUG/p1klpX7La9lRL90S6CFLaSc8ThTyBiFG,iv:2owaBkw3yIpLw/L3n6qAS/sYEqj/fsxbyLYsmy5B3OM=,tag:kRVb1zfhd4D7S7hODUu4RA==,type:str]
3131
backup:
3232
password: ENC[AES256_GCM,data:LbNmmsKjrmxD7oF7Jpp3m4BsTO5Kezdh/IfmhAjlWdwWzQgoLk33KryBXmlEZS1XO/QAOnfywdz6mblbeo9o70tCBCqxFd4hxoueEp6VKBrl69e0OwwQZmaLWMrqeFUCiJzTuQhRlYe5pegarQ7s1kIDTcN5bvqqoDouRFjsz/I=,iv:8iKxyJCTrO+Z9MhllIb7S5pPR6M6hcHSWEVnxwYx508=,tag:UgOuqdoFjW0JjFNQI5bU2A==,type:str]
33+
reset:
34+
#ENC[AES256_GCM,data:lcS6NV1HSnsy+vEuoD5WFKTufWRMDpsloK2R3rDO5QcbN0t/ItOPk+MxBzHj,iv:iGXCQMU7vGLztF4R6BO3c6xSx8/v4pc+8zRmLVEGMRM=,tag:ekrkLWqAHMHFaWBwOzNVrg==,type:comment]
35+
htpasswd: ENC[AES256_GCM,data:jRkQye95VhVu/pGu4XfL/iYs2tRri/K7aZFWw4tzuLru5EGw6CViZAyrH2g3ybkqk9Dsp2+/ud9ud8G3Lm3FTW/3gA==,iv:2tYZOji66xp+1m3c3ffpPrSu1TGiR/1DxLYP4PRDoBA=,tag:+SRjRrljL1bnxdajxHDxMw==,type:str]
3336
sops:
3437
kms: []
3538
gcp_kms: []
@@ -45,8 +48,8 @@ sops:
4548
a3N3UTZSNnZCbDR4OEhwVVRZeU1WdlUK+0dSSWfR55ib4yqMbhK8tcLDgQrIcT3n
4649
m9g7aX/mj36AMQs4Vub7wnuqFHFC/cttsMsmdFUrEn9qimmoR/4CdQ==
4750
-----END AGE ENCRYPTED FILE-----
48-
lastmodified: "2023-12-28T11:53:15Z"
49-
mac: ENC[AES256_GCM,data:L5+/OBlGfI082dIGNy2o0+2QYfwk7t12niwZeLTnXtl8bQbsVc2wy7QWch1+l3B0jOj5NFSnfZteIkdbph9HabMGM0ICKXexet1/EVeDD1MYOYYg3GUc0PrLkp8MT7ZB5Kj4pwd9Nm81+l1gIAEy7rN0py2ZWJf7502onUS8J7Y=,iv:dgmWUKvuCIWeiA0jdgR9Nit/gDnvh6YB8ReU/idllpU=,tag:D+iZvgDSYQmDFLAzp03guA==,type:str]
51+
lastmodified: "2024-07-18T18:58:04Z"
52+
mac: ENC[AES256_GCM,data:SVErLvn9hIA8dkQc+IFXBAJecHv1s7HY6LTgkRh+ywllO5YuULX6fBihaEEd4we/DHSgBJfEYygMsRmlQ22F/awlmCtFkuojC0M/WDgBBMkcIgIq6LXA/2ekw38qN0HHx9jde7FdCzOAEetBsKS8juQsX7S82D5CrBxnNoBPrlA=,iv:bwGtnl8kh+eQ8L2ysQpDuJypLKYFGqDG098cbfLO9NQ=,tag:czXKNMTxTkifO4DKWbBXLQ==,type:str]
5053
pgp:
5154
- created_at: "2023-11-23T17:41:40Z"
5255
enc: |-

0 commit comments

Comments
 (0)