Skip to content

Commit 0cfb67b

Browse files
committed
Moved dev_auth route to own file
1 parent 4fc892e commit 0cfb67b

File tree

2 files changed

+77
-50
lines changed

2 files changed

+77
-50
lines changed

app/main.py

+14-50
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626

2727
# Import routes
2828
from app.routes import admin, api, infra, stripe, wallet
29+
30+
# This check is a little hacky and needs to be documented in the dev environment set up
31+
# If it's run under docker, the -e flag should set the env variable, but if its local you have to set it yourself
32+
# Use 'export ENV=development' to set the env variable
33+
if os.getenv("ENV") == "development":
34+
from app.routes import dev_auth
2935
from app.util.approve import Approve
3036

3137
# Import middleware
@@ -95,6 +101,14 @@ def global_context(request: Request):
95101
app.include_router(wallet.router)
96102
app.include_router(infra.router)
97103

104+
# This check is a little hacky and needs to be documented in the dev environment set up
105+
# If it's run under docker, the -e flag should set the env variable, but if its local you have to set it yourself
106+
# Use 'export ENV=development' to set the env variable
107+
if os.getenv("ENV") == "development":
108+
logger.warning("loading dev endpoints")
109+
app.include_router(dev_auth.router)
110+
111+
98112
# TODO figure out wtf this is used for
99113
# Create the OpenStack SDK config.
100114
# with open("clouds.yaml", "w", encoding="utf-8") as f:
@@ -398,53 +412,3 @@ async def logout(request: Request):
398412
@app.get("/favicon.ico", include_in_schema=False)
399413
async def favicon():
400414
return FileResponse("./app/static/favicon.ico")
401-
402-
403-
# This check is a little hacky and needs to be documented in the dev environment set up
404-
# If it's run under docker, the -e flag should set the env variable, but if its local you have to set it yourself
405-
# Use 'export ENV=development' to set the env variable
406-
if os.getenv("ENV") == "development":
407-
408-
@app.get("/dev/user")
409-
async def create_dev_user(request: Request, session: Session = Depends(get_session)):
410-
if request.client.host not in ["127.0.0.1", "localhost"]:
411-
return Errors.generate(
412-
request,
413-
403,
414-
"Forbidden",
415-
essay="This endpoint is only available on localhost.",
416-
)
417-
418-
# Generate random user data
419-
user_id = uuid.uuid4()
420-
discord_id = str(uuid.uuid4())
421-
422-
user = UserModel(
423-
id=user_id,
424-
discord_id=discord_id,
425-
)
426-
427-
discord_user = DiscordModel(username=f"devuser-{user_id}", email=f"devuser@mail.com", user_id=user_id, user=user)
428-
429-
session.add(user)
430-
session.commit()
431-
session.refresh(user)
432-
433-
session.add(discord_user)
434-
session.commit()
435-
session.refresh(discord_user)
436-
437-
# Create JWT token for the user
438-
bearer = Authentication.create_jwt(user)
439-
rr = RedirectResponse("/profile", status_code=status.HTTP_302_FOUND)
440-
max_age = Settings().jwt.lifetime_sudo
441-
rr.set_cookie(
442-
key="token",
443-
value=bearer,
444-
httponly=True,
445-
samesite="lax",
446-
secure=False,
447-
max_age=max_age,
448-
)
449-
450-
return rr

app/routes/dev_auth.py

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# SPDX-License-Identifier: MIT
2+
# Copyright (c) 2024 Collegiate Cyber Defense Club
3+
import logging
4+
import uuid
5+
6+
from fastapi import APIRouter, Depends, Request, status
7+
from fastapi.responses import RedirectResponse
8+
from sqlmodel import Session
9+
10+
from app.models.user import (
11+
DiscordModel,
12+
UserModel,
13+
)
14+
from app.util.authentication import Authentication
15+
from app.util.database import get_session
16+
from app.util.errors import Errors
17+
from app.util.settings import Settings
18+
19+
logger = logging.getLogger(__name__)
20+
21+
router = APIRouter(prefix="/dev", tags=["API"], responses=Errors.basic_http())
22+
23+
24+
@router.get("/user/")
25+
async def create_dev_user(request: Request, session: Session = Depends(get_session), sudo: bool = False):
26+
if request.client.host not in ["127.0.0.1", "localhost"]:
27+
return Errors.generate(
28+
request,
29+
403,
30+
"Forbidden",
31+
essay="This endpoint is only available on localhost.",
32+
)
33+
34+
# Generate random user data
35+
user_id = uuid.uuid4()
36+
discord_id = str(uuid.uuid4())
37+
38+
user = UserModel(id=user_id, discord_id=discord_id, sudo=sudo)
39+
40+
discord_user = DiscordModel(username=f"devuser-{user_id}", email=f"devuser@mail.com", user_id=user_id, user=user)
41+
42+
session.add(user)
43+
session.commit()
44+
session.refresh(user)
45+
46+
session.add(discord_user)
47+
session.commit()
48+
session.refresh(discord_user)
49+
50+
# Create JWT token for the user
51+
bearer = Authentication.create_jwt(user)
52+
rr = RedirectResponse("/profile", status_code=status.HTTP_302_FOUND)
53+
max_age = Settings().jwt.lifetime_sudo
54+
rr.set_cookie(
55+
key="token",
56+
value=bearer,
57+
httponly=True,
58+
samesite="lax",
59+
secure=False,
60+
max_age=max_age,
61+
)
62+
63+
return rr

0 commit comments

Comments
 (0)