43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# core/security.py
|
|
|
|
# Importa CryptContext da biblioteca passlib para operações de hash de senha
|
|
from passlib.context import CryptContext
|
|
|
|
# Cria uma instância do contexto de criptografia
|
|
# O esquema usado é 'bcrypt', que é seguro e amplamente aceito
|
|
# O parâmetro 'deprecated="auto"' marca versões antigas como inseguras, se aplicável
|
|
CRYPTO = CryptContext(schemes=['bcrypt'], deprecated='auto')
|
|
|
|
|
|
class Security:
|
|
|
|
# Verifica se a senha tem um hash válido
|
|
@staticmethod
|
|
def is_hash(senha: str) -> bool:
|
|
"""
|
|
Verifica se a string fornecida é um hash reconhecido pelo CryptContext.
|
|
"""
|
|
return CRYPTO.identify(senha)
|
|
|
|
|
|
# Verifica se uma senha fornecida corresponde ao hash armazenado
|
|
def verify_senha_api(plain_senha_api: str, hashed_senha_api: str) -> bool:
|
|
"""
|
|
Compara a senha fornecida em texto puro com o hash armazenado.
|
|
|
|
:param plain_senha_api: Senha digitada pelo usuário
|
|
:param hashed_senha_api: Hash da senha armazenado no banco de dados
|
|
:return: True se corresponder, False se não
|
|
"""
|
|
return CRYPTO.verify(plain_senha_api, hashed_senha_api)
|
|
|
|
|
|
# Gera o hash de uma senha fornecida
|
|
def hash_senha_api(plain_senha_api: str) -> str:
|
|
"""
|
|
Gera e retorna o hash da senha fornecida.
|
|
|
|
:param plain_senha_api: Senha em texto puro fornecida pelo usuário
|
|
:return: Hash da senha
|
|
"""
|
|
return CRYPTO.hash(plain_senha_api)
|