Skip to content

Commit 7f746cd

Browse files
committed
Cope with users possibly not being in a team
1 parent d6b9b68 commit 7f746cd

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

code_submitter/auth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
class User(SimpleUser):
16-
def __init__(self, username: str, team: str) -> None:
16+
def __init__(self, username: str, team: Optional[str]) -> None:
1717
super().__init__(username)
1818
self.team = team
1919

@@ -61,7 +61,7 @@ async def authenticate(
6161

6262

6363
class DummyBackend(BasicAuthBackend):
64-
def __init__(self, team: str = 'SRZ') -> None:
64+
def __init__(self, team: Optional[str] = 'SRZ') -> None:
6565
self.team = team
6666

6767
async def validate(self, username: str, password: str) -> ValidationResult:

code_submitter/server.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from starlette.middleware.authentication import AuthenticationMiddleware
1515

1616
from . import auth, config
17+
from .auth import User
1718
from .tables import Archive, ChoiceHistory
1819

1920
database = databases.Database(config.DATABASE_URL, force_rollback=config.TESTING)
@@ -57,6 +58,14 @@ async def homepage(request: Request) -> Response:
5758
@requires('authenticated')
5859
@database.transaction()
5960
async def upload(request: Request) -> Response:
61+
user: User = request.user
62+
63+
if not user.team:
64+
return Response(
65+
"Must be a member of a team to be able to upload files",
66+
status_code=403,
67+
)
68+
6069
form = await request.form()
6170
archive = form['archive']
6271

templates/index.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@
3131
<div class="container">
3232
<h1>Virtual Competition Code Submission</h1>
3333
<div class="row">
34+
{% if request.user.team %}
3435
<form
3536
class="col-sm-6"
3637
action="{{ request.app.url_path_for('upload') }}"
3738
enctype="multipart/form-data"
3839
method="POST"
3940
>
40-
<h3>Upload a new submission</h3>
41+
<h3>Upload a new submission for team {{ request.user.team }}</h3>
4142
<div class="form-group">
4243
<label for="archive"> Select ZIP archive </label>
4344
<input
@@ -63,6 +64,9 @@ <h3>Upload a new submission</h3>
6364
</div>
6465
<button class="btn btn-primary" type="submit">Upload</button>
6566
</form>
67+
{% else %}
68+
<em>You are not in a team and so cannot upload files.</em>
69+
{% endif %}
6670
</div>
6771
<div class="row">
6872
<div class="col-sm-6">

tests/tests_app.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ def test_app(self) -> None:
6464
response = self.session.get(self.url_path_for('homepage'))
6565
self.assertEqual(200, response.status_code)
6666

67+
html = response.text
68+
self.assertIn("Upload a new submission", html)
69+
6770
def test_app_requires_auth(self) -> None:
6871
self.session.auth = None
6972
response = self.session.get(self.url_path_for('homepage'))

0 commit comments

Comments
 (0)