import React, { useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; import axios from 'axios'; // Importar axios para fazer a requisição import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; import { Container, Box, Typography, CircularProgress, Alert, Paper, Grid, Divider, Button } from '@mui/material'; // Componente para verificação de provas digitais export const VerificarProva: React.FC = () => { const { hash } = useParams<{ hash: string }>(); const [prova, setProva] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // URL base da API - usar a mesma do ambiente atual const API_BASE_URL = process.env.REACT_APP_API_URL || '/api'; useEffect(() => { const fetchProvaDetails = async () => { try { setLoading(true); // Obter informações de conexão do cliente para incluir nos logs const connectionInfo = { userAgent: navigator.userAgent, language: navigator.language, platform: navigator.platform, screenWidth: window.screen.width, screenHeight: window.screen.height, timestamp: new Date().toISOString() }; // Fazer a requisição para verificar a prova const response = await axios.get(`${API_BASE_URL}/provas/verificar/${hash}`, { headers: { 'Content-Type': 'application/json' } }); // Também registrar a verificação separadamente try { await axios.post(`${API_BASE_URL}/provas/registrar-verificacao`, { hash, verificationContext: connectionInfo }); } catch (logError) { console.warn('Erro ao registrar verificação:', logError); // Não interromper o fluxo principal por erro no log } setProva(response.data); setLoading(false); } catch (error) { console.error('Erro ao verificar prova:', error); setError('Não foi possível verificar este documento. O hash pode ser inválido ou o documento não existe.'); setLoading(false); } }; if (hash) { fetchProvaDetails(); } else { setError('Hash de verificação não fornecido'); setLoading(false); } }, [hash, API_BASE_URL]); // Renderização condicional com base no estado if (loading) { return ( Verificando autenticidade do documento... ); } if (error) { return ( Verificação Falhou {error} ); } // Formatação da data para exibição const formatarData = (dataString: string) => { try { const data = new Date(dataString); return format(data, 'dd/MM/yyyy HH:mm:ss', { locale: ptBR }); } catch (error) { return 'Data inválida'; } }; return ( {prova?.verified ? ( Documento Verificado com Sucesso Este documento foi validado e sua integridade foi confirmada. ) : ( Verificação Inconclusiva {prova?.message || 'Não foi possível confirmar a integridade deste documento.'} )} {prova && ( Detalhes do Documento Nome do arquivo: {prova.prova?.fileName || 'Não disponível'} Tipo: {prova.prova?.mimeType || 'Não disponível'} Hash SHA256: {prova.prova?.checksumSha256 || 'Não disponível'} Data de registro: {prova.timestamp?.timestamp ? formatarData(prova.timestamp.timestamp) : 'Não disponível'} Data de verificação: {formatarData(new Date().toISOString())} IP: {prova.verificacao?.ip || prova.prova?.metadata?.ipAddress || 'Não disponível'} Porta: {prova.prova?.metadata?.clientPort || prova.prova?.metadata?.connectionInfo?.socketPort || prova.prova?.metadata?.userInfo?.ipAddress?.split(':')[1] || 'Não disponível'} {prova.prova?.reportPath && ( )} )} ); }; export default VerificarProva;