diff options
author | Parker <contact@pkrm.dev> | 2024-06-24 16:24:09 -0500 |
---|---|---|
committer | Parker <contact@pkrm.dev> | 2024-06-24 16:24:09 -0500 |
commit | 5b92454760a8af14bd1031e72024946f868d1de6 (patch) | |
tree | f8384cbf0d142777d9bff341e13fd5882182908b /api/util | |
parent | 80a39d38bf829193c655a7320c86df2a3146db2a (diff) |
Major overhaul + Bare bones web UI
Diffstat (limited to 'api/util')
-rw-r--r-- | api/util/check_api_key.py | 21 | ||||
-rw-r--r-- | api/util/db_dependency.py | 9 | ||||
-rw-r--r-- | api/util/validate_login_information.py | 20 |
3 files changed, 50 insertions, 0 deletions
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 |