From 5b92454760a8af14bd1031e72024946f868d1de6 Mon Sep 17 00:00:00 2001 From: Parker Date: Mon, 24 Jun 2024 16:24:09 -0500 Subject: Major overhaul + Bare bones web UI --- api/util/check_api_key.py | 21 +++++++++++++++++++++ api/util/db_dependency.py | 9 +++++++++ api/util/validate_login_information.py | 20 ++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 api/util/check_api_key.py create mode 100644 api/util/db_dependency.py create mode 100644 api/util/validate_login_information.py (limited to 'api/util') diff --git a/api/util/check_api_key.py b/api/util/check_api_key.py new file mode 100644 index 0000000..9c4c22e --- /dev/null +++ b/api/util/check_api_key.py @@ -0,0 +1,21 @@ +from fastapi import Security, HTTPException, Depends, status +from fastapi.security import APIKeyHeader + +from models import User +from api.util.db_dependency import get_db + +""" +Make sure the provided API key is valid, then return the user's ID +""" +api_key_header = APIKeyHeader(name="X-API-Key") + + +def check_api_key( + api_key_header: str = Security(api_key_header), db=Depends(get_db) +) -> str: + response = db.query(User).filter(User.api_key == api_key_header).first() + if not response: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key" + ) + return {"value": api_key_header, "owner": response.id} diff --git a/api/util/db_dependency.py b/api/util/db_dependency.py new file mode 100644 index 0000000..a6734ea --- /dev/null +++ b/api/util/db_dependency.py @@ -0,0 +1,9 @@ +from database import SessionLocal + + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() diff --git a/api/util/validate_login_information.py b/api/util/validate_login_information.py new file mode 100644 index 0000000..55bbb2e --- /dev/null +++ b/api/util/validate_login_information.py @@ -0,0 +1,20 @@ +import bcrypt +from fastapi import Depends + +from api.util.db_dependency import get_db +from models import User + +""" +Validate the login information provided by the user +""" + + +def validate_login_information( + username: str, password: str, db=Depends(get_db) +) -> bool: + user = db.query(User).filter(User.username == username).first() + if not user: + return False + if bcrypt.checkpw(password.encode("utf-8"), user.password.encode("utf-8")): + return True + return False -- cgit v1.2.3-70-g09d2