changed encryption to correct key
authorPhiTux <redacted>
Sun, 29 Dec 2024 11:10:30 +0000 (12:10 +0100)
committerPhiTux <redacted>
Sun, 29 Dec 2024 11:10:30 +0000 (12:10 +0100)
backend/server/routers/logs.py
backend/server/utils/security.py

index b4e161b336a8da550486e7d0c4e15659d277ebde..4562db54edea1fccafb4c982bf14b24d05862ace 100644 (file)
@@ -43,8 +43,9 @@ async def saveLog(log: Log, cookie = Depends(users.isLoggedIn)):
                 break
         
     # save new log
-    encrypted_text = security.encrypt_text(log.text, cookie["derived_key"])
-    encrypted_date_written = security.encrypt_text(log.date_written, cookie["derived_key"])
+    enc_key = security.get_enc_key(cookie["user_id"], cookie["derived_key"])
+    encrypted_text = security.encrypt_text(log.text, enc_key)
+    encrypted_date_written = security.encrypt_text(log.date_written, enc_key)
     
     if "days" not in content.keys():
         content["days"] = []
@@ -81,8 +82,9 @@ async def getLog(date: str, cookie = Depends(users.isLoggedIn)):
     
     for dayLog in content["days"]:
         if dayLog["day"] == day:
-            text = security.decrypt_text(dayLog["text"], cookie["derived_key"])
-            date_written = security.decrypt_text(dayLog["date_written"], cookie["derived_key"])
+            enc_key = security.get_enc_key(cookie["user_id"], cookie["derived_key"])
+            text = security.decrypt_text(dayLog["text"], enc_key)
+            date_written = security.decrypt_text(dayLog["date_written"], enc_key)
             return {"text": text, "date_written": date_written}
 
     return {"text": "", "date_written": ""}
\ No newline at end of file
index 69602add7499f2f8e2384e25fb41f805167dd13c..68dd646a0507bbb5a4052f37cdf7706c08852a6e 100644 (file)
@@ -1,7 +1,9 @@
+from fastapi import HTTPException
 from passlib.hash import argon2
 from argon2.low_level import hash_secret_raw, Type
 from cryptography.fernet import Fernet
 import base64
+from . import fileHandling
 
 def hash_password(password: str) -> str:
     return argon2.hash(password)
@@ -18,10 +20,23 @@ def create_new_enc_enc_key(password: str, salt: str) -> bytes:
     f = Fernet(base64.urlsafe_b64encode(derived_key))
     return f.encrypt(key)
 
-def encrypt_text(text: str, derived_key: str) -> str:
-    f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key)))
+def get_enc_key(user_id: int, derived_key: str) -> bytes:
+    content = fileHandling.getUsers()
+    
+    if not "users" in content.keys():
+        raise HTTPException(status_code=500, detail="users.json is not in the correct format. Key 'users' is missing.")
+    
+    for user in content["users"]:
+        if user["user_id"] == user_id:
+            key = user["enc_enc_key"]
+    
+            f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key)))
+            return f.decrypt(key)
+
+def encrypt_text(text: str, key: str) -> str:
+    f = Fernet(base64.urlsafe_b64encode(base64.urlsafe_b64decode(key)))
     return f.encrypt(text.encode()).decode()
 
-def decrypt_text(text: str, derived_key: str) -> str:
-    f = Fernet(base64.urlsafe_b64encode(base64.b64decode(derived_key)))
+def decrypt_text(text: str, key: str) -> str:
+    f = Fernet(base64.urlsafe_b64encode(base64.urlsafe_b64decode(key)))
     return f.decrypt(text.encode()).decode()
\ No newline at end of file
git clone https://git.99rst.org/PROJECT