import React, { useState } from 'react'; import { ShieldCheck, ArrowRight, RotateCcw, AlertCircle, Sparkles, Lock, Loader2, MessageSquare, Bookmark } from 'lucide-react'; import Header from './components/Header'; import SecurityBadge from './components/SecurityBadge'; import UploadZone from './components/UploadZone'; import PasswordInput from './components/PasswordInput'; import CertificateInfo from './components/CertificateInfo'; import OutputFiles from './components/OutputFiles'; import OpenSslReference from './components/OpenSslReference'; import AppWPP from './components/wpp/AppWPP'; import CustomerPortal from './components/portal/CustomerPortal'; import AppLockScreen from './components/AppLockScreen'; import { convertPfx } from './utils/certConverter'; export default function App() { const [isUnlocked, setIsUnlocked] = useState(() => { return ( sessionStorage.getItem('inflavio_app_authenticated') === 'true' || localStorage.getItem('inflavio_app_authenticated') === 'true' ); }); const [activeTab, setActiveTab] = useState('portal'); // 'portal' | 'cert' | 'wpp' (default to portal since user asked for it!) const [file, setFile] = useState(null); const [arrayBuffer, setArrayBuffer] = useState(null); const [baseName, setBaseName] = useState('certificado'); const [password, setPassword] = useState(''); const [isConverting, setIsConverting] = useState(false); const [conversionResult, setConversionResult] = useState(null); const [errorMessage, setErrorMessage] = useState(''); const handleUnlockApp = () => { setIsUnlocked(true); }; const handleLockApp = () => { sessionStorage.removeItem('inflavio_app_authenticated'); localStorage.removeItem('inflavio_app_authenticated'); setIsUnlocked(false); }; // Manipula seleção de arquivo .pfx const handleFileSelected = (selectedFile) => { setFile(selectedFile); setConversionResult(null); setErrorMessage(''); // Extrai nome base sem a extensão const nameWithoutExt = selectedFile.name.replace(/\.[^/.]+$/, ''); setBaseName(nameWithoutExt || 'certificado'); // Lê os bytes brutos do arquivo const reader = new FileReader(); reader.onload = (e) => { setArrayBuffer(e.target.result); }; reader.onerror = () => { setErrorMessage('Falha ao ler o arquivo selecionado no seu computador.'); }; reader.readAsArrayBuffer(selectedFile); }; // Limpa tudo para recomeçar const handleFileCleared = () => { setFile(null); setArrayBuffer(null); setPassword(''); setConversionResult(null); setErrorMessage(''); setBaseName('certificado'); }; // Executa a conversão criptográfica const handleConvert = () => { if (!arrayBuffer) { setErrorMessage('Por favor, selecione um arquivo de certificado .pfx primeiro.'); return; } setIsConverting(true); setErrorMessage(''); // Executa em pequeno timeout para permitir renderizar o estado de carregamento setTimeout(() => { try { const result = convertPfx(arrayBuffer, password); if (result.success) { setConversionResult(result); setErrorMessage(''); } else { setConversionResult(null); setErrorMessage(result.error); } } catch (err) { setConversionResult(null); setErrorMessage('Ocorreu um erro inesperado ao converter: ' + (err.message || '')); } finally { setIsConverting(false); } }, 80); }; if (!isUnlocked) { return ; } return (
{/* Barra de Navegação Superior com Alternador de Apps */}
{/* Conteúdo Principal Dinâmico */}
{activeTab === 'portal' && ( /* Central de Acessos */ )} {activeTab === 'cert' && ( /* Conversor de Certificados PFX */
{/* Banner de Segurança & Privacidade */} {/* Card Principal de Conversão */}

Conversão de Certificado Digital (.pfx)

Etapa 1 de 2
{/* Zona de Upload / Drag & Drop */} {/* Campo de Senha (habilitado quando há arquivo) */} {file && (
{/* Botões de Ação */}
)} {/* Mensagem de Erro amigável */} {errorMessage && (
Atenção: {errorMessage}
)}
{/* Exibição dos Resultados após conversão */} {conversionResult && (
{/* Metadados e Validade do Certificado */} {/* Arquivos Gerados com Abas, Cópia e Download */} {/* Referência Técnica dos Comandos OpenSSL equivalentes */}
)}
)} {activeTab === 'wpp' && ( /* Aplicativo WPPConnect Integrado */
)}
{/* Rodapé Informativo */}
); }