Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Auth II
  • Loading branch information
RickiJay-WMDE committed Sep 2, 2025
commit e733bae5264a3463ca0bfdbf45d7f281032a58ba
18 changes: 13 additions & 5 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
"""Main Application"""

from contextlib import asynccontextmanager
from typing import Optional
from fastapi import BackgroundTasks, FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import StreamingResponse
from starlette.requests import Request
from fastapi.responses import PlainTextResponse, StreamingResponse
from strawberry.fastapi import GraphQLRouter

from export_csv import export_metric_csv
from model.strawberry import schema
from resolvers.authentication import authenticate_request
from resolvers.authentication import authenticate_token
from schedule import scheduler


Expand Down Expand Up @@ -49,10 +49,18 @@ def read_root():

@app.get("/csv/metrics", response_class=StreamingResponse)
async def metric_csv(
request: Request, background_tasks: BackgroundTasks
background_tasks: BackgroundTasks, authorization: Optional[str] = None
) -> StreamingResponse:
"""Quantity CSV"""

authenticate_request(request)
try:
assert authorization is not None
except AssertionError:
return PlainTextResponse("Authorization Missing", 403)

try:
authenticate_token(authorization)
except AssertionError:
return PlainTextResponse("Authorization Failed", 403)

return await export_metric_csv(background_tasks)
8 changes: 6 additions & 2 deletions resolvers/authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ def authenticate_request(request: Request):
if len(auth_header_value_split) != 2:
raise ValueError("Invalid authorization header, expected 'bearer <token>'")

auth_header_token = auth_header_value_split[1]
authenticate_token(auth_header_value_split[1])

assert auth_header_token == auth_token, "Authorization Failed"

def authenticate_token(token: str):
"""Authenticate Token"""

assert token == auth_token, "Authorization Failed"