31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
# core/security.py
|
|
|
|
from passlib.context import CryptContext # Contexto de criptografia de senhas
|
|
from passlib.exc import UnknownHashError # Exceção para hashes não reconhecidos
|
|
|
|
# Define contexto de criptografia com esquema bcrypt
|
|
CRYPTO = CryptContext(schemes=['bcrypt'], deprecated='auto')
|
|
|
|
def verify_senha_api(plain_senha_api: str, hashed_senha_api: str) -> bool:
|
|
"""
|
|
Compara a senha fornecida em texto puro com o hash armazenado.
|
|
Retorna False em caso de erro ou formato inválido.
|
|
"""
|
|
try:
|
|
if not plain_senha_api or not hashed_senha_api:
|
|
return False # Garante que nenhum dos valores seja nulo ou vazio
|
|
|
|
# Verifica se a senha corresponde ao hash
|
|
return CRYPTO.verify(plain_senha_api, hashed_senha_api)
|
|
|
|
except UnknownHashError:
|
|
return False # Hash inválido ou não reconhecido pelo passlib
|
|
|
|
except Exception:
|
|
return False # Falha genérica na verificação
|
|
|
|
def hash_senha_api(plain_senha_api: str) -> str:
|
|
"""
|
|
Gera o hash da senha em texto puro.
|
|
"""
|
|
return CRYPTO.hash(plain_senha_api) # Retorna a senha criptografada com bcrypt
|