Minor stuff

This commit is contained in:
lvrossem
2023-04-01 10:03:18 -06:00
parent 65d1a2a6e4
commit d2933a95ba
9 changed files with 91 additions and 54 deletions

View File

@@ -2,46 +2,19 @@ from typing import List, Optional
import jwt
from fastapi import Depends, FastAPI, HTTPException
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from sqlalchemy.orm import Session
from crud import authentication as crud_authentication
from crud import courseprogress as crud_courseprogress
from crud import highscores as crud_highscores
from crud import users as crud_users
from database import SessionLocal, engine
from database import SessionLocal, engine, get_db
from enums import CourseEnum, MinigameEnum
from models import Base
from schemas import courseprogress, highscores, users
app = FastAPI()
Base.metadata.create_all(bind=engine)
bearer_scheme = HTTPBearer()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def get_current_user_name(
token: HTTPAuthorizationCredentials = Depends(bearer_scheme),
):
try:
payload = jwt.decode(
token.credentials,
crud_authentication.jwt_secret,
algorithms=[crud_authentication.ALGORITHM],
)
username = payload.get("sub")
if username is None:
raise HTTPException(status_code=401, detail="Invalid JWT token")
return username
except jwt.exceptions.DecodeError:
raise HTTPException(status_code=401, detail="Invalid JWT token")
@app.get("/")
@@ -57,15 +30,17 @@ async def read_users(db: Session = Depends(get_db)):
@app.patch("/users")
async def patch_current_user(
user: users.UserCreate,
current_user_name=Depends(get_current_user_name),
db: Session = Depends(get_db)
current_user_name=Depends(crud_authentication.get_current_user_name),
db: Session = Depends(get_db),
):
crud_users.patch_user(db, current_user_name, user)
@app.post("/register")
async def register(user: users.UserCreate, db: Session = Depends(get_db)):
access_token = crud_authentication.register(db, user.username, user.password, user.avatar)
access_token = crud_authentication.register(
db, user.username, user.password, user.avatar
)
user = crud_users.get_user_by_username(db, user.username)
crud_courseprogress.initialize_user(db, user)
return access_token
@@ -80,7 +55,7 @@ async def login(user: users.UserCreate, db: Session = Depends(get_db)):
async def get_high_scores(
minigame: Optional[MinigameEnum] = None,
nr_highest: Optional[int] = None,
db: Session = Depends(get_db)
db: Session = Depends(get_db),
):
return crud_highscores.get_high_scores(db, minigame, nr_highest)
@@ -88,8 +63,8 @@ async def get_high_scores(
@app.post("/highscores", response_model=highscores.HighScore)
async def create_high_score(
high_score: highscores.HighScoreBase,
current_user_name = Depends(get_current_user_name),
db: Session = Depends(get_db)
current_user_name=Depends(crud_authentication.get_current_user_name),
db: Session = Depends(get_db),
):
current_user = crud_users.get_user_by_username(db, current_user_name)
return crud_highscores.create_high_score(db, current_user, high_score)
@@ -99,15 +74,27 @@ async def create_high_score(
@app.get("/protected")
async def protected_route(current_user_name=Depends(get_current_user_name)):
async def protected_route(
current_user_name: str = Depends(crud_authentication.get_current_user_name),
):
return {"message": f"Hello, {current_user_name}!"}
@app.get("/courseprogress", response_model=List[courseprogress.CourseProgressBase])
async def get_course_progress(
course: Optional[CourseEnum] = CourseEnum.All,
current_user_name=Depends(get_current_user_name),
db: Session = Depends(get_db)
current_user_name: str = Depends(crud_authentication.get_current_user_name),
db: Session = Depends(get_db),
):
current_user = crud_users.get_user_by_username(db, current_user_name)
return crud_courseprogress.get_course_progress(db, current_user, course)
@app.patch("/courseprogress")
async def get_course_progress(
current_user_name: str = Depends(crud_authentication.get_current_user_name),
course: Optional[CourseEnum] = CourseEnum.All,
db: Session = Depends(get_db),
):
current_user = crud_users.get_user_by_username(db, current_user_name)
return crud_courseprogress.get_course_progress(db, current_user, course)