aboutsummaryrefslogtreecommitdiff
path: root/api/util
diff options
context:
space:
mode:
authorParker <contact@pkrm.dev>2024-06-24 16:24:09 -0500
committerParker <contact@pkrm.dev>2024-06-24 16:24:09 -0500
commit5b92454760a8af14bd1031e72024946f868d1de6 (patch)
treef8384cbf0d142777d9bff341e13fd5882182908b /api/util
parent80a39d38bf829193c655a7320c86df2a3146db2a (diff)
Major overhaul + Bare bones web UI
Diffstat (limited to 'api/util')
-rw-r--r--api/util/check_api_key.py21
-rw-r--r--api/util/db_dependency.py9
-rw-r--r--api/util/validate_login_information.py20
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