From c6eb6c38c50b5c148e0ab4594374f1ac906f0e79 Mon Sep 17 00:00:00 2001 From: Kenio de Souza Date: Thu, 6 Nov 2025 09:56:47 -0300 Subject: [PATCH] =?UTF-8?q?fix():=20Criado=20fun=C3=A7=C3=A3o=20que=20gera?= =?UTF-8?q?=20o=20hash=20para=20visualiza=C3=A7=C3=A3o=20de=20documentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- actions/validations/hash.py | 28 +++++++++++++++++++ main.py | 3 +- .../ato_principal_show_atos_repository.py | 14 ++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 actions/validations/hash.py diff --git a/actions/validations/hash.py b/actions/validations/hash.py new file mode 100644 index 0000000..4a88bfc --- /dev/null +++ b/actions/validations/hash.py @@ -0,0 +1,28 @@ +# utils/hash_generator.py + +from datetime import date +import hashlib + + +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 o hash em formato hexadecimal + return h.hexdigest() diff --git a/main.py b/main.py index ef193a0..113afcf 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,7 @@ from pathlib import Path from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import Response from starlette.middleware.base import BaseHTTPMiddleware +from actions.validations.hash import generate_storage_hash # Importa middleware de captura de erros junto ao banco de dados from middlewares.error_handler import database_error_handler @@ -43,7 +44,7 @@ if not os.path.isdir(STORAGE_DIR): # 3. Monte o diretório estático # Isso mapeia o caminho local STORAGE_DIR para o prefixo de URL '/storage-files' app.mount( - "/storage-files", # <- ESTE É O PREFIXO DA URL PÚBLICA + "/" + generate_storage_hash(), # <- ESTE É O PREFIXO DA URL PÚBLICA StaticFiles(directory=STORAGE_DIR), name="storage_access", ) diff --git a/packages/v1/administrativo/repositories/ato_principal/ato_principal_show_atos_repository.py b/packages/v1/administrativo/repositories/ato_principal/ato_principal_show_atos_repository.py index 1d1dfed..5050c0f 100644 --- a/packages/v1/administrativo/repositories/ato_principal/ato_principal_show_atos_repository.py +++ b/packages/v1/administrativo/repositories/ato_principal/ato_principal_show_atos_repository.py @@ -8,7 +8,7 @@ from packages.v1.administrativo.models.ato_documento_model import AtoDocumento from packages.v1.administrativo.schemas.ato_principal_schema import ( AtoPrincipalCodigoAtoSchema, ) -from datetime import datetime +from actions.validations.hash import generate_storage_hash # === Recupera configurações e chave AES === DB_SETTINGS = get_database_settings() @@ -107,7 +107,11 @@ class ShowAtosRepository: documentos_list = [ { "url": ( - URL_API + "/storage-files/" + d.url.decode("utf-8") + URL_API + + "/" + + generate_storage_hash() + + "/" + + d.url.decode("utf-8") if d.url else None ), @@ -171,7 +175,11 @@ class ShowAtosRepository: documentos_vinc_list = [ { "url": ( - URL_API + "/storage-files/" + d.url.decode("utf-8") + URL_API + + "/" + + generate_storage_hash() + + "/" + + d.url.decode("utf-8") if d.url else None ),