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"] = []
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
+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)
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