Guarda Municipal de Formosa

Recupere o acesso informando seu e-mail

require_once __DIR__ . '/roi/usuarios_crypto.php'; $email_enviado = false; // Variável de controle $erro = ''; $link_manual = ''; // Link para exibir caso o email falhe if ($_SERVER['REQUEST_METHOD'] == 'POST') { $email = isset($_POST['email']) ? trim($_POST['email']) : ''; // Validar email if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { $erro = 'E-mail inválido.'; } else { // Buscar todos os usuários (não podemos buscar diretamente por email criptografado) $stmt = $mysqli->prepare("SELECT id, email FROM usuarios_roi"); if (!$stmt) { error_log("Erro ao preparar consulta: " . $mysqli->error); $erro = 'Erro ao processar solicitação. Tente novamente.'; } else { $stmt->execute(); $resultado = $stmt->get_result(); $usuario_encontrado = null; $email_descriptografado = null; // Percorrer todos os usuários e descriptografar emails para comparar while ($row = $resultado->fetch_assoc()) { $email_criptografado = $row['email']; // Descriptografar o email do banco $email_db = usuarios_decrypt_value('email', $email_criptografado); // Comparar emails (case-insensitive) if (strtolower(trim($email_db)) === strtolower(trim($email))) { $usuario_encontrado = $row; $email_descriptografado = $email_db; break; } } $stmt->close(); if ($usuario_encontrado && $email_descriptografado) { $token = bin2hex(random_bytes(50)); // Gera um token único $expira = date("Y-m-d H:i:s", strtotime("+1 hour")); // Expira em 1 hora // Salva o token no banco usando prepared statement (usar ID ao invés de email) $updateStmt = $mysqli->prepare("UPDATE usuarios_roi SET token = ?, token_expira = ? WHERE id = ?"); if (!$updateStmt) { error_log("Erro ao preparar update: " . $mysqli->error); $erro = 'Erro ao processar solicitação. Tente novamente.'; } else { $updateStmt->bind_param('ssi', $token, $expira, $usuario_encontrado['id']); if ($updateStmt->execute()) { // Envia o e-mail com o link de redefinição // IMPORTANTE: Usar o email descriptografado para enviar $baseUrl = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $baseUrl .= $_SERVER['HTTP_HOST']; // Usar URL sem extensão .php (sistema usa rewrite de URL) $scriptPath = dirname($_SERVER['SCRIPT_NAME']); // Remover barra dupla se scriptPath for apenas / if ($scriptPath === '/' || $scriptPath === '\\') { $scriptPath = ''; } $link = $baseUrl . $scriptPath . '/redefinir_senha?token=' . urlencode($token); $assunto = "Redefinição de Senha - Guarda Municipal de Formosa"; $mensagem = "Olá,\n\n"; $mensagem .= "Você solicitou a redefinição de senha.\n\n"; $mensagem .= "Clique no link abaixo para redefinir sua senha:\n"; $mensagem .= "$link\n\n"; $mensagem .= "Este link expira em 1 hora.\n\n"; $mensagem .= "Se você não solicitou esta redefinição, ignore este e-mail.\n\n"; $mensagem .= "Atenciosamente,\n"; $mensagem .= "Sistema ROI - Guarda Municipal de Formosa"; // Melhorar cabeçalhos do email $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $headers .= "From: suporte@gcmformosa.com.br\r\n"; $headers .= "Reply-To: noreply@gcmformosa.com.br\r\n"; $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n"; // Tentar enviar o email $mailResult = @mail($email_descriptografado, $assunto, $mensagem, $headers); if ($mailResult) { $email_enviado = true; error_log("Email de recuperação enviado com sucesso para: $email_descriptografado"); } else { // Log detalhado do erro $lastError = error_get_last(); $errorDetails = $lastError ? $lastError['message'] : 'Erro desconhecido na função mail()'; error_log("ERRO ao enviar email para: $email_descriptografado | Detalhes: $errorDetails | Token salvo: $token"); // Como o token já foi salvo, vamos mostrar o link diretamente na tela // Isso é uma solução temporária até configurar SMTP corretamente $email_enviado = true; // Mostrar como enviado $link_manual = $link; // Armazenar o link para exibir } } else { error_log("Erro ao executar update: " . $updateStmt->error); $erro = 'Erro ao processar solicitação. Tente novamente.'; } $updateStmt->close(); } } else { // Email não encontrado no banco de dados $erro = 'E-mail não encontrado. Verifique se o e-mail está correto.'; } } } } ?> Recuperar Senha
Guarda Municipal de Formosa

Recupere o acesso informando seu e-mail