fix(): Criado função que gera o hash para visualização de documentos

This commit is contained in:
Kenio 2025-11-06 09:56:47 -03:00
parent 02228d2569
commit c6eb6c38c5
3 changed files with 41 additions and 4 deletions

View file

@ -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()

View file

@ -15,6 +15,7 @@ from pathlib import Path
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import Response from fastapi.responses import Response
from starlette.middleware.base import BaseHTTPMiddleware 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 # Importa middleware de captura de erros junto ao banco de dados
from middlewares.error_handler import database_error_handler 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 # 3. Monte o diretório estático
# Isso mapeia o caminho local STORAGE_DIR para o prefixo de URL '/storage-files' # Isso mapeia o caminho local STORAGE_DIR para o prefixo de URL '/storage-files'
app.mount( 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), StaticFiles(directory=STORAGE_DIR),
name="storage_access", name="storage_access",
) )

View file

@ -8,7 +8,7 @@ from packages.v1.administrativo.models.ato_documento_model import AtoDocumento
from packages.v1.administrativo.schemas.ato_principal_schema import ( from packages.v1.administrativo.schemas.ato_principal_schema import (
AtoPrincipalCodigoAtoSchema, AtoPrincipalCodigoAtoSchema,
) )
from datetime import datetime from actions.validations.hash import generate_storage_hash
# === Recupera configurações e chave AES === # === Recupera configurações e chave AES ===
DB_SETTINGS = get_database_settings() DB_SETTINGS = get_database_settings()
@ -107,7 +107,11 @@ class ShowAtosRepository:
documentos_list = [ documentos_list = [
{ {
"url": ( "url": (
URL_API + "/storage-files/" + d.url.decode("utf-8") URL_API
+ "/"
+ generate_storage_hash()
+ "/"
+ d.url.decode("utf-8")
if d.url if d.url
else None else None
), ),
@ -171,7 +175,11 @@ class ShowAtosRepository:
documentos_vinc_list = [ documentos_vinc_list = [
{ {
"url": ( "url": (
URL_API + "/storage-files/" + d.url.decode("utf-8") URL_API
+ "/"
+ generate_storage_hash()
+ "/"
+ d.url.decode("utf-8")
if d.url if d.url
else None else None
), ),