Logica do SistemaSecao 3
Integracao Galileu
Autenticacao
- Senha armazenada criptografada no banco (
PasswordEncryptionServicecom AES via ABPIStringEncryptionService). - Na autenticacao: senha descriptografada e enviada como
MD5(senha). - Se autenticacao falha (
apiTokenResponse.Success == false): apaga as credenciais do banco E publicaGalileuCredentialDeletedEtoviaILocalEventBus. CreateIsolatedGalileuApiHttpClient(): cria cliente nomeado "GalileuApi" viaIHttpClientFactory, limpando headers default para evitar contaminacao entre tenants.
Normalizacao de Dados
GalileuOfertaNormalizer.NormalizePayloadItem→ convertePayloadItemparaOfertaGalileuNormalized.GalileuOfertaNormalizer.NormalizeGalileuProgColetaDto→ converteGalileuProgColetaDtoparaGalileuProgColetaNormalized.
Credenciais (GalileuCredentialsAppService)
Arquivo: cargo_fleet.Application/GalileuCredentials/GalileuCredentialsAppService.cs
CreateAsync:
- Valida
IdentityUserId. - Testa credenciais com
GalileuApiService.AuthenticateAsync— falha lancaUserFriendlyException. - Criptografa senha com
PasswordEncryptionService.Encrypt. - Persiste via
GalileuCredentialManager.CreateAsync. - Publica
GalileuCredentialCreatedEtocom senha em texto plano (incoerencia — SEC2-01). - 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
IStringEncryptionServicedo ABP (AES simetrico). PassPhraseeSaltlidos de configuracao:GalileuCredentials:PassPhraseeGalileuCredentials:Salt.- Em producao, o
appsettings.jsoncontemPassPhrase: "testePassPhrase"eSalt: "1q2w3E*"— valores fracos expostos no repositorio. - Sem esses valores de config, o service lanca
InvalidOperationExceptionno construtor.
Incoerencias Identificadas
| ID | Descricao |
|---|---|
| SEC2-01 | Senha Galileu em texto plano nos ETOs de eventos internos |
| SEC2-04 | Campo Senha (ciphertext) exposto no GalileuCredentialDto |
| SEC2-05 | Autenticacao usa MD5 — requisito da API Galileu, nao controlavel pelo sistema |
| HIGH-02 | Passphrase fraca e hardcoded para criptografia AES |
GalileuApiService — Endpoints
Arquivo:
cargo_fleet.Application/GalileuApi/GalileuApiService.csAuthenticateAsyncPOST rpc/g2/authenticateAuthenticateWithExistingCredentialsAsyncAuthenticateAsync)ListarOfertasAsyncPOST rpc/transportador-api/listarOfertas/AceitarOfertaAsyncPOST rpc/transportador-api/aceitarOferta/codprogcoleta+preco)AceitarProgramacaoAsyncPOST rpc?service={service}.{action}ListarProgramacoesAsyncPOST rpc