diff options
Diffstat (limited to 'api/routes')
-rw-r--r-- | api/routes/auth_routes.py | 13 | ||||
-rw-r--r-- | api/routes/log_routes.py | 72 | ||||
-rw-r--r-- | api/routes/user_routes.py | 4 |
3 files changed, 87 insertions, 2 deletions
diff --git a/api/routes/auth_routes.py b/api/routes/auth_routes.py index c51557f..24e1391 100644 --- a/api/routes/auth_routes.py +++ b/api/routes/auth_routes.py @@ -7,8 +7,10 @@ from typing import Annotated from api.util.authentication import ( create_access_token, authenticate_user, + get_current_user, ) from api.util.db_dependency import get_db +from api.schemas.auth_schemas import User router = APIRouter(prefix="/auth", tags=["auth"]) @@ -44,3 +46,14 @@ async def login_for_access_token( # secure=True, # Cookies are only sent over HTTPS ) return response + + +# Check if the user is logged in +@router.get("/check", summary="Check if the user is logged in") +async def check_login( + current_user: Annotated[User, Depends(get_current_user)], +): + """ + If the user actually makes it to this endpoint, they are logged in + """ + return {"success": True} diff --git a/api/routes/log_routes.py b/api/routes/log_routes.py new file mode 100644 index 0000000..84b8c51 --- /dev/null +++ b/api/routes/log_routes.py @@ -0,0 +1,72 @@ +from fastapi import APIRouter, status, Path, Depends +from fastapi.exception_handlers import HTTPException +from typing import Annotated +import string +import random +import datetime +import validators + +from api.util.db_dependency import get_db +from models import Link, Log +from api.schemas.links_schemas import URLSchema +from api.schemas.auth_schemas import User +from api.util.authentication import get_current_user + + +router = APIRouter(prefix="/logs", tags=["logs"]) + + +@router.get("", summary="Get all of the logs associated with your account") +async def get_logs( + current_user: Annotated[User, Depends(get_current_user)], + db=Depends(get_db), +): + logs = ( + db.query(Log) + .filter(Log.owner == current_user.id) + .order_by(Log.timestamp.desc()) + .all() + ) + if not logs: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="No logs found" + ) + return logs + + +@router.get("/{log_id}", summary="Get a specific log") +async def get_log( + log_id: Annotated[int, Path(title="ID of log to delete")], + current_user: Annotated[User, Depends(get_current_user)], + db=Depends(get_db), +): + log = ( + db.query(Log) + .filter(Log.id == log_id, Log.owner == current_user.id) + .first() + ) + if not log: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="Log not found" + ) + return log + + +@router.delete("/{log_id}", summary="Delete a log") +async def delete_log( + log_id: Annotated[int, Path(title="ID of log to delete")], + current_user: Annotated[User, Depends(get_current_user)], + db=Depends(get_db), +): + log = ( + db.query(Log) + .filter(Log.id == log_id, Log.owner == current_user.id) + .first() + ) + if not log: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="Log not found" + ) + db.delete(log) + db.commit() + return status.HTTP_204_NO_CONTENT diff --git a/api/routes/user_routes.py b/api/routes/user_routes.py index cf9be52..618f721 100644 --- a/api/routes/user_routes.py +++ b/api/routes/user_routes.py @@ -22,7 +22,7 @@ router = APIRouter(prefix="/users", tags=["users"]) @router.delete("/{user_id}", summary="Delete your account") async def delete_user( - user_id: Annotated[int, Path(title="Link to delete")], + user_id: Annotated[int, Path(title="ID of user to delete")], current_user: Annotated[User, Depends(get_current_user)], db=Depends(get_db), ): @@ -51,7 +51,7 @@ async def delete_user( @router.post("/{user_id}/password", summary="Update your account password") async def update_pass( - user_id: Annotated[int, Path(title="Link to update")], + user_id: Annotated[int, Path(title="ID of user to update")], update_data: UpdatePasswordSchema, current_user: Annotated[User, Depends(get_current_user)], db=Depends(get_db), |