refactor to use bcrypt directly

This commit is contained in:
Michael Genson
2024-01-24 22:03:16 +00:00
parent 0b0c25d2f3
commit 4ae5c52de9
2 changed files with 11 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
from functools import lru_cache
from typing import Protocol
from passlib.context import CryptContext
import bcrypt
from mealie.core.config import get_app_settings
@@ -22,15 +22,16 @@ class FakeHasher:
return password == hashed
class PasslibHasher:
def __init__(self) -> None:
self.ctx = CryptContext(schemes=["bcrypt"], deprecated="auto")
class BcryptHasher:
def hash(self, password: str) -> str:
return self.ctx.hash(password)
password_bytes = password.encode("utf-8")
hashed = bcrypt.hashpw(password_bytes, bcrypt.gensalt())
return hashed.decode("utf-8")
def verify(self, password: str, hashed: str) -> bool:
return self.ctx.verify(password, hashed)
password_bytes = password.encode("utf-8")
hashed_bytes = hashed.encode("utf-8")
return bcrypt.checkpw(password_bytes, hashed_bytes)
@lru_cache(maxsize=1)
@@ -40,4 +41,4 @@ def get_hasher() -> Hasher:
if settings.TESTING:
return FakeHasher()
return PasslibHasher()
return BcryptHasher()