14-16 Mar 2026
Logica do Sistema

Integracao Galileu

Secao 3

GalileuApiService — Endpoints

Arquivo: cargo_fleet.Application/GalileuApi/GalileuApiService.cs

MetodoEndpointUso
AuthenticateAsyncPOST rpc/g2/authenticateAutenticacao inicial com MD5 da senha
AuthenticateWithExistingCredentialsAsync(usa AuthenticateAsync)Busca credenciais do banco, descriptografa, autentica
ListarOfertasAsyncPOST rpc/transportador-api/listarOfertas/Busca ofertas por janela de tempo
AceitarOfertaAsyncPOST rpc/transportador-api/aceitarOferta/Aceite legado (codprogcoleta + preco)
AceitarProgramacaoAsyncPOST rpc?service={service}.{action}Aceite novo (suporta TNF e reaceite)
ListarProgramacoesAsyncPOST rpcBusca programacoes com filtros de status e paginacao

Autenticacao

  • Senha armazenada criptografada no banco (PasswordEncryptionService com AES via ABP IStringEncryptionService).
  • Na autenticacao: senha descriptografada e enviada como MD5(senha).
  • Se autenticacao falha (apiTokenResponse.Success == false): apaga as credenciais do banco E publica GalileuCredentialDeletedEto via ILocalEventBus.
  • CreateIsolatedGalileuApiHttpClient(): cria cliente nomeado "GalileuApi" via IHttpClientFactory, limpando headers default para evitar contaminacao entre tenants.

Normalizacao de Dados

  • GalileuOfertaNormalizer.NormalizePayloadItem → converte PayloadItem para OfertaGalileuNormalized.
  • GalileuOfertaNormalizer.NormalizeGalileuProgColetaDto → converte GalileuProgColetaDto para GalileuProgColetaNormalized.

Credenciais (GalileuCredentialsAppService)

Arquivo: cargo_fleet.Application/GalileuCredentials/GalileuCredentialsAppService.cs

CreateAsync:

  1. Valida IdentityUserId.
  2. Testa credenciais com GalileuApiService.AuthenticateAsync — falha lanca UserFriendlyException.
  3. Criptografa senha com PasswordEncryptionService.Encrypt.
  4. Persiste via GalileuCredentialManager.CreateAsync.
  5. Publica GalileuCredentialCreatedEto com senha em texto plano (incoerencia — SEC2-01).
  6. Handler atual do evento esta vazio (logica de scraper comentada).

UpdateAsync: Mesmo padrao. Publica GalileuCredentialUpdatedEto com senha em texto plano.

DeleteAsync: Persiste delecao. Publica GalileuCredentialDeletedEto → handler envia WhatsApp template util_credencial_galileu_limpa.


Criptografia de Senhas (PasswordEncryptionService)

Arquivo: cargo_fleet.Application/Encryption/PasswordEncryptionService.cs

  • Usa IStringEncryptionService do ABP (AES simetrico).
  • PassPhrase e Salt lidos de configuracao: GalileuCredentials:PassPhrase e GalileuCredentials:Salt.
  • Em producao, o appsettings.json contem PassPhrase: "testePassPhrase" e Salt: "1q2w3E*" — valores fracos expostos no repositorio.
  • Sem esses valores de config, o service lanca InvalidOperationException no construtor.

Incoerencias Identificadas

IDDescricao
SEC2-01Senha Galileu em texto plano nos ETOs de eventos internos
SEC2-04Campo Senha (ciphertext) exposto no GalileuCredentialDto
SEC2-05Autenticacao usa MD5 — requisito da API Galileu, nao controlavel pelo sistema
HIGH-02Passphrase fraca e hardcoded para criptografia AES