setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbTokens->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (Exception $e) { $erro_token_db = $e->getMessage(); registrarAcessoEbook('ERRO_CRITICO_BANCO', '', $erro_token_db); } // ============================================================================ // BLOCO 9: VERIFICAÇÃO DO TOKEN // ============================================================================ $token_submetido = isset($_GET['token']) ? trim($_GET['token']) : ''; $token_submetido = preg_replace('/[^a-z0-9_]/', '', $token_submetido); $tokenData = null; $tokenValido = false; $tokenExpirado = false; $tokenRevogado = false; $tokenNaoExiste = false; $tokenSemValidade = false; $tokenValidade = null; $tokenUserName = null; if (!empty($token_submetido) && $dbTokens) { try { $stmt = $dbTokens->prepare(" SELECT token, validade, revogado, revoked, user_name, tipo_de_token, observacoes, access_token, expires_at FROM tokens WHERE token = ? OR access_token = ? LIMIT 1 "); $stmt->execute([$token_submetido, $token_submetido]); $tokenData = $stmt->fetch(); if (!$tokenData) { $tokenNaoExiste = true; registrarAcessoEbook('INVALIDO', $token_submetido, 'Token não encontrado no banco'); } else { if (($tokenData['revogado'] ?? 0) == 1 || ($tokenData['revoked'] ?? 0) == 1) { $tokenRevogado = true; registrarAcessoEbook('REVOGADO', $token_submetido); } else { $validade = $tokenData['validade'] ?? $tokenData['expires_at'] ?? null; $tokenValidade = $validade; $tokenUserName = $tokenData['user_name'] ?? 'Usuário'; if ($validade) { $validadeObj = new DateTime($validade); $validadeObj->setTime(23, 59, 59); $agora = new DateTime(); if ($agora <= $validadeObj) { $tokenValido = true; registrarAcessoEbook('AUTORIZADO', $token_submetido, 'Usuário: ' . $tokenUserName); } else { $tokenExpirado = true; registrarAcessoEbook('EXPIRADO', $token_submetido); } } else { $tokenSemValidade = true; registrarAcessoEbook('SEM_VALIDADE', $token_submetido); } } } } catch (Exception $e) { $erro_token_db = $e->getMessage(); registrarAcessoEbook('ERRO_VALIDACAO', $token_submetido, $erro_token_db); } } // ============================================================================ // BLOCO 10: BUSCAR E-BOOK // ============================================================================ $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; $ebook = null; $ebookSimples = null; $capitulos = []; $totalCapitulos = 0; $totalVersiculos = 0; $erro_ebook = null; if ($id > 0) { $dbPath = '/home/link6350/arquivos_restritos/banco_de_dados/sqlite/ebooks/ebooks_database.sqlite'; try { if (!file_exists($dbPath)) { throw new Exception('Banco de dados de e-books não encontrado'); } $db = new PDO('sqlite:' . $dbPath); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $stmt = $db->prepare("SELECT id, titulo, subtitulo, tipo_midia, formato_arquivo, sinopse FROM ebooks WHERE id = ?"); $stmt->execute([$id]); $ebookSimples = $stmt->fetch(); if ($tokenValido) { $stmt = $db->prepare("SELECT * FROM ebooks WHERE id = ?"); $stmt->execute([$id]); $ebook = $stmt->fetch(); if (!$ebook) { $erro_ebook = 'E-book não encontrado'; } else { $stmt = $db->prepare(" SELECT id, numero_capitulo, titulo_capitulo, descricao_capitulo FROM ebooks_capitulos WHERE id_ebook = ? ORDER BY numero_capitulo ASC "); $stmt->execute([$id]); $capitulosData = $stmt->fetchAll(); $totalCapitulos = count($capitulosData); $capitulos = []; $totalVersiculos = 0; foreach ($capitulosData as $cap) { $stmt = $db->prepare(" SELECT id, numero_versiculo, conteudo_versiculo FROM ebooks_versiculos WHERE id_capitulo = ? ORDER BY numero_versiculo ASC "); $stmt->execute([$cap['id']]); $versiculos = $stmt->fetchAll(); $totalVersiculos += count($versiculos); $capitulos[$cap['numero_capitulo']] = [ 'titulo' => $cap['titulo_capitulo'], 'descricao' => $cap['descricao_capitulo'], 'versiculos' => $versiculos ]; } } } } catch (Exception $e) { $erro_ebook = 'Erro ao carregar e-book: ' . $e->getMessage(); } } // ============================================================================ // BLOCO 11: FUNÇÃO PARA INCLUIR COMPONENTES COMUNS // ============================================================================ function incluirComponentesComuns() { global $E_REQUISICAO_AJAX; if ($E_REQUISICAO_AJAX) { return; } if (ob_get_length() > 0) { ob_clean(); } $menuPath = $_SERVER['DOCUMENT_ROOT'] . '/menu_principal___menuzinho_hamburguer_simples.php'; $voltarTopoPath = $_SERVER['DOCUMENT_ROOT'] . '/voltar_ao_topo.php'; if (file_exists($menuPath)) { require_once $menuPath; } if (file_exists($voltarTopoPath)) { require_once $voltarTopoPath; } } incluirComponentesComuns(); ?> <?= $ebook && $tokenValido ? htmlspecialchars($ebook['titulo']) : '📚 E-book - Acesso Protegido' ?>
🔑 📅 📖 Início
0%
Voltar

SQLite 🔑 Acesso Protegido 🔴 Offline

ID: 🔑
🔴

Sistema Indisponível

O sistema de autenticação está temporariamente indisponível.

Erro:
💬 Reportar Problema
🔐

🤔 Você precisa de um token

Insira o token recebido no momento da compra para visualizar o conteúdo completo.

0): ?>
📖 E-book ID:

Exemplo:

Não tem token? Adquira o acesso agora:

💬 Comprar Acesso
🔒 Sistema de proteção por token via SQLite

Token Inválido

O token informado não foi encontrado. Verifique se você o copiou corretamente.

🔑 Token informado:

Exemplo:

Não tem token? Adquira o acesso agora:

💬 Comprar Acesso
🚫

Token Revogado

Este token foi revogado e não pode mais ser usado.

📌 Motivo: O token foi desativado pelo administrador.

Para obter um novo token, entre em contato:

💬 Solicitar Novo Token

Token Expirado

Sua assinatura expirou em .

📌 Para renovar o acesso: Clique no botão abaixo para falar com o administrador.
💬 Renovar Assinatura
⚠️

Token sem Validade Definida

Este token não possui data de validade configurada no sistema.

📌 O que fazer: Entre em contato com o administrador para regularizar seu acesso.
💬 Falar com Administrador
Voltar
capítulos versículos SQLite
🔍 0 resultado(s)

Conteúdo do E-book ( versículos)

$cap): ?>
Capítulo
Versículo

Este e-book não possui versículos cadastrados.

Fonte: SQLite | ID: | Usuário: