# utils/hash_generator.py from jose import jwt from datetime import datetime, timedelta from datetime import date import hashlib # Separa a última parte de uma string com três partes separadas por "/" def get_last_part(text: str) -> str: """ Separa uma string por "/" e retorna a última parte. Exemplo: "100/15/arquivo.txt" -> "arquivo.txt" Args: text (str): String no formato com três partes separadas por "/" Returns: str: Última parte da string (após a última "/") """ # Se for set, converte o primeiro elemento para string if isinstance(text, set): text = next(iter(text)) # pega o primeiro valor do set # Se ainda não for string, força conversão text = str(text) # Retorna a última parte da string separada por "/" return text.split("/")[-1] # Função que gera o hash baseado na data atual def generate_storage_hash() -> str: """ Gera um hash SHA-256 baseado na data atual no formato YYYYMMDD. Útil, por exemplo, para criar chaves ou nomes únicos em arquivos estáticos. Retorna: str: Hash SHA-256 em formato hexadecimal. """ # Obtém a data atual (somente ano, mês e dia) today = date.today() # Formata a data como string "YYYYMMDD" storage_date = today.strftime("%Y%m%d") # Cria o objeto de hash SHA-256 h = hashlib.sha256() # Atualiza o hash com o texto codificado em UTF-8 h.update(storage_date.encode("utf-8")) # Retorna apenas os 12 primeiros caracteres do hash hexadecimal return h.hexdigest()[:12] # Função que gera o token temporário para acesso ao documento def generate_temporary_token( file_path: str, expires_minutes: int, secret_key: str, algorithm: str, ) -> str: # Se for set, converte o primeiro elemento para string if isinstance(file_path, set): file_path = next(iter(file_path)) # pega o primeiro valor do set # Se ainda não for string, força conversão file_path = str(file_path) # Retorna a string separada por "/" file_path = file_path.split("/") """Gera um token JWT válido por poucos minutos.""" expire = datetime.utcnow() + timedelta(minutes=expires_minutes) payload = { "faixa_superior": file_path[0], "ato_id": file_path[1], "file_name": file_path[2], # caminho relativo completo "exp": expire, } return jwt.encode(payload, secret_key, algorithm=algorithm)