Tul xxx Tul
User / IP
:
216.73.216.191
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
gimnasiofitnes
/
app
/
Views
/
layout
/
Viewing: principal.php
<!DOCTYPE html> <html lang="en"> <head> <?php $companyLogoPath = FCPATH . 'assets/admin/images/logo.png'; $companyLogoUrl = file_exists($companyLogoPath) ? app_url('assets/admin/images/logo.png') . '?v=' . (@filemtime($companyLogoPath) ?: time()) : app_url('assets/frontend/favicon.svg'); $manifestUrl = app_url('manifest.webmanifest'); $appleIconUrl = app_url('pwa-icon/180'); $appUrl = app_url(); ?> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="theme-color" content="#0a0a0a"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-title" content="<?= esc($company['name']); ?>"> <title><?= $this->renderSection('title'); ?></title> <link rel="shortcut icon" href="<?= $companyLogoUrl; ?>" type="image/png"> <link rel="apple-touch-icon" href="<?= $appleIconUrl; ?>"> <link rel="manifest" href="<?= $manifestUrl; ?>"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-LN+7fdVzj6u52u30Kp6M/trliBMCMKTyK833zpbD+pXdCLuTusPj697FH4R/5mcr" crossorigin="anonymous"> <link rel="stylesheet" href="<?= base_url('assets/frontend/'); ?>css/style.css"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Catamaran:wght@600;700;800;900&family=Rubik:wght@400;500;800&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" /> <link rel="stylesheet" href="<?= base_url('assets/admin/css/tarjeta.css'); ?>"> <style> .footer-install-wrap { margin-top: 1.5rem; } .footer-install-card { display: inline-flex; flex-direction: column; align-items: flex-start; gap: .65rem; padding: 1rem 1.1rem; border-radius: 18px; background: rgba(255, 255, 255, .05); border: 1px solid rgba(255, 255, 255, .08); box-shadow: 0 10px 30px rgba(0, 0, 0, .18); } .footer-install-btn { display: inline-flex; align-items: center; justify-content: center; gap: .6rem; min-width: 180px; } .footer-install-hint { font-size: 1.3rem; line-height: 1.5; color: rgba(255, 255, 255, .72); margin: 0; } .footer-install-btn[hidden], .footer-install-wrap[hidden] { display: none !important; } .footer-brand .logo-mark { width: 42px; height: 42px; object-fit: contain; margin-right: 10px; border-radius: 10px; background: rgba(255, 255, 255, .08); padding: 4px; } .header .logo-mark { width: 36px; height: 36px; object-fit: contain; margin-right: 10px; border-radius: 10px; } </style> <?= $this->renderSection('css'); ?> <link rel="preload" as="image" href="<?= base_url('assets/frontend/'); ?>images/hero-banner.png"> <link rel="preload" as="image" href="<?= base_url('assets/frontend/'); ?>images/hero-circle-one.png"> <link rel="preload" as="image" href="<?= base_url('assets/frontend/'); ?>images/hero-circle-two.png"> <link rel="preload" as="image" href="<?= base_url('assets/frontend/'); ?>images/heart-rate.svg"> <link rel="preload" as="image" href="<?= base_url('assets/frontend/'); ?>images/calories.svg"> </head> <body id="top"> <header class="header" data-header> <div class="container"> <a href="<?= base_url(); ?>" class="logo"> <img src="<?= $companyLogoUrl; ?>" alt="<?= esc($company['name']); ?>" class="logo-mark"> <span class="span"><?= $company['name']; ?></span> </a> <nav class="navbar" data-navbar> <button class="nav-close-btn" aria-label="close menu" data-nav-toggler> <ion-icon name="close-sharp" aria-hidden="true"></ion-icon> </button> <ul class="navbar-list"> <?php $current = uri_string(); ?> <li> <a href="<?= $current == '' ? '#about' : base_url() . '#about'; ?>" class="navbar-link" data-nav-link>Sobre nosotros</a> </li> <li> <a href="<?= $current == '' ? '#class' : base_url() . '#class'; ?>" class="navbar-link" data-nav-link>Clases</a> </li> <li> <a href="<?= $current == '' ? '#planes' : base_url() . '#planes'; ?>" class="navbar-link" data-nav-link>Planes</a> </li> <li> <a href="javascript:void(0);" class="navbar-link" data-bs-toggle="modal" data-bs-target="#modalConsultaCarnet">Consulta tu Carnet</a> </li> <li> <a href="<?= $current == '' ? '#contact-section' : base_url() . '#contact-section'; ?>" class="navbar-link" data-nav-link>Contacto</a> </li> </ul> </nav> <a href="<?= base_url('login'); ?>" class="btn btn-secondary">Login</a> <button class="nav-open-btn" aria-label="open menu" data-nav-toggler> <span class="line"></span> <span class="line"></span> <span class="line"></span> </button> </div> </header> <main> <article> <?= $this->renderSection('content'); ?> </article> </main> <footer class="footer"> <div class="section footer-top bg-dark has-bg-image"> <div class="container"> <div class="footer-brand"> <a href="<?= base_url(); ?>" class="logo"> <img src="<?= $companyLogoUrl; ?>" alt="<?= esc($company['name']); ?>" class="logo-mark"> <span class="span"><?= $company['name']; ?></span> </a> <p class="footer-brand-text"> <?= $company['message']; ?> </p> <div class="footer-install-wrap" id="footerInstallWrap"> <div class="footer-install-card"> <button type="button" class="btn btn-primary footer-install-btn" id="installAppBtn"> <ion-icon name="download-outline" aria-hidden="true"></ion-icon> <span>Instalar App</span> </button> <p class="footer-install-hint" id="installHintText">Instala <?= esc($company['name']); ?> y entra como una app real desde tu celular o PC.</p> </div> </div> </div> <ul class="footer-list"> <li> <p class="footer-list-title has-before">Enlaces</p> </li> <?php $current = uri_string(); ?> <li> <a href="<?= $current == '' ? '#about' : base_url() . '#about'; ?>" class="footer-link">Sobre nosotros</a> </li> <li> <a href="<?= $current == '' ? '#class' : base_url() . '#class'; ?>" class="footer-link">Clases</a> </li> <li> <a href="<?= $current == '' ? '#planes' : base_url() . '#planes'; ?>" class="footer-link">Planes</a> </li> <li> <a href="<?= $current == '' ? '#contact-section' : base_url() . '#contact-section'; ?>" class="footer-link">Contacto</a> </li> </ul> <ul class="footer-list"> <li> <p class="footer-list-title has-before">Contacto</p> </li> <li class="footer-list-item"> <div class="icon"> <ion-icon name="location" aria-hidden="true"></ion-icon> </div> <address class="address footer-link"> <?= $company['address']; ?> </address> </li> <li class="footer-list-item"> <div class="icon"> <ion-icon name="call" aria-hidden="true"></ion-icon> </div> <div> <a href="tel:<?= $company['phone']; ?>" class="footer-link"><?= $company['phone']; ?></a> </div> </li> <li class="footer-list-item"> <div class="icon"> <ion-icon name="mail" aria-hidden="true"></ion-icon> </div> <div> <a href="mailto:<?= $company['email']; ?>" class="footer-link"><?= $company['email']; ?></a> </div> </li> </ul> <ul class="footer-list"> <li> <p class="footer-list-title has-before">Suscribirse</p> </li> <li> <form action="" class="footer-form"> <input type="email" name="email_address" aria-label="email" placeholder="Email Address" required class="input-field"> <button type="submit" class="btn btn-primary" aria-label="Submit"> <ion-icon name="chevron-forward-sharp" aria-hidden="true"></ion-icon> </button> </form> </li> <li> <ul class="social-list"> <li> <a href="<?= $company['facebook']; ?>" class="social-link"> <ion-icon name="logo-facebook"></ion-icon> </a> </li> <li> <a href="<?= $company['instagram']; ?>" class="social-link"> <ion-icon name="logo-instagram"></ion-icon> </a> </li> <li> <a href="<?= $company['twitter']; ?>" class="social-link"> <ion-icon name="logo-twitter"></ion-icon> </a> </li> </ul> </li> </ul> </div> </div> <div class="footer-bottom"> <div class="container"> <p class="copyright"> © <?= date('Y') . ' ' . $company['name']; ?>. All Rights Reserved By <a href="<?= $company['website'] ?>" class="copyright-link">Sito web.</a> </p> <ul class="footer-bottom-list"> <li> <a href="#" class="footer-bottom-link has-before">Privacy Policy</a> </li> <li> <a href="#" class="footer-bottom-link has-before">Terms & Condition</a> </li> </ul> </div> </div> </footer> <!-- Modal Consulta Carnet --> <div class="modal fade" id="modalConsultaCarnet" tabindex="-1" aria-labelledby="modalConsultaCarnetLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="modalConsultaCarnetLabel">Consulta tu Carnet</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="formConsultaCarnet"> <div class="mb-3"> <label for="dni_consulta" class="form-label">Ingresa tu DNI</label> <input type="text" class="form-control" id="dni_consulta" name="dni" placeholder="Ej: 12345678" required> </div> <div class="d-grid"> <button type="submit" class="btn btn-primary">Buscar Carnet</button> </div> </form> <div id="resultadoConsulta" class="mt-4 text-center" style="display: none;"> <hr> <div id="cardPreview" class="mb-3"></div> <div class="mb-3 text-start"> <label for="foto_carnet" class="form-label">Cambiar foto del carnet</label> <input type="file" class="form-control" id="foto_carnet" accept="image/png,image/jpeg,image/jpg,image/webp"> <small class="text-muted">Formatos permitidos: JPG, PNG, WEBP (máximo 4MB).</small> </div> <button id="btnActualizarFotoCarnet" class="btn btn-primary">Guardar Nueva Foto</button> <button id="btnDescargarCarnetWeb" class="btn btn-success">Descargar Carnet</button> </div> </div> </div> </div> </div> <!-- Div oculto para renderizar la tarjeta antes de descargar --> <div id="hiddenCardContainer" style="position: fixed; top: -9999px; left: -9999px;"></div> <a href="#top" class="back-top-btn" aria-label="back to top" data-back-top-btn> <ion-icon name="caret-up-sharp" aria-hidden="true"></ion-icon> </a> <script src="<?= base_url('assets/frontend/'); ?>js/script.js" defer></script> <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script> <script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js" integrity="sha384-ndDqU0Gzau9qJ1lfW4pNLlhNTkCfHzAVBReH9diLvGRem5+R9g2FzA8ZGN954O5Q" crossorigin="anonymous"></script> <script src="<?= base_url('assets/frontend/'); ?>js/all.min.js"></script> <script src="https://unpkg.com/aos@next/dist/aos.js"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js"></script> <script> const base_url = "<?= base_url(); ?>"; const appUrl = "<?= esc($appUrl, 'js'); ?>"; const companyName = "<?= esc($company['name'], 'js'); ?>"; const installAppBtn = document.getElementById('installAppBtn'); const footerInstallWrap = document.getElementById('footerInstallWrap'); const installHintText = document.getElementById('installHintText'); let deferredInstallPrompt = null; function isRunningAsInstalledApp() { return window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true; } function isIosDevice() { return /iphone|ipad|ipod/i.test(window.navigator.userAgent); } function isAndroidDevice() { return /android/i.test(window.navigator.userAgent); } function updateInstallHint(message) { if (installHintText) { installHintText.textContent = message; } } function hideInstallButton() { if (installAppBtn) { installAppBtn.hidden = true; } if (footerInstallWrap) { footerInstallWrap.hidden = true; } } function showInstallButton() { if (footerInstallWrap && !isRunningAsInstalledApp()) { footerInstallWrap.hidden = false; } if (installAppBtn && !isRunningAsInstalledApp()) { installAppBtn.hidden = false; } } function showInstallFallbackInstructions() { let title = 'Instala la app'; let html = ` <div style="text-align:left;font-size:14px;line-height:1.7;"> <p style="margin-bottom:10px;">Si tu navegador no muestra el instalador automático todavía, hazlo manualmente:</p> <ol style="padding-left:18px;margin:0;"> <li>Abre el menú del navegador.</li> <li>Busca <strong>Instalar app</strong>, <strong>Agregar a pantalla principal</strong> o <strong>Crear acceso directo</strong>.</li> <li>Confirma la instalación.</li> </ol> </div> `; if (isIosDevice()) { title = 'Instalar en iPhone / iPad'; html = ` <div style="text-align:left;font-size:14px;line-height:1.7;"> <p style="margin-bottom:10px;">En Safari sigue estos pasos:</p> <ol style="padding-left:18px;margin:0;"> <li>Toca el botón <strong>Compartir</strong>.</li> <li>Selecciona <strong>Agregar a pantalla de inicio</strong>.</li> <li>Toca <strong>Agregar</strong>.</li> </ol> </div> `; } if (isAndroidDevice()) { updateInstallHint(`Si no aparece el instalador automático, usa el menú del navegador y toca “Instalar app” o “Agregar a pantalla principal”.`); } else if (isIosDevice()) { updateInstallHint(`En iPhone o iPad, instala desde Safari con “Compartir” y luego “Agregar a pantalla de inicio”.`); } else { updateInstallHint(`Si tu navegador no lo ofrece aún, usa el menú superior y busca “Instalar app”.`); } Swal.fire({ icon: 'info', title, html, confirmButtonText: 'Entendido', confirmButtonColor: '#0a0a0a' }); } if (isRunningAsInstalledApp()) { hideInstallButton(); } else { showInstallButton(); updateInstallHint(`Instala <?= esc($company['name'], 'js'); ?> y úsala como una app rápida, elegante y sin distracciones.`); } window.addEventListener('beforeinstallprompt', (event) => { event.preventDefault(); deferredInstallPrompt = event; showInstallButton(); updateInstallHint(`Tu dispositivo ya está listo. Toca “Instalar App” para agregar <?= esc($company['name'], 'js'); ?>.`); }); window.addEventListener('appinstalled', () => { deferredInstallPrompt = null; hideInstallButton(); alertaPesonalizada('success', `${companyName} fue instalada correctamente`); }); if (installAppBtn) { installAppBtn.addEventListener('click', async () => { if (!deferredInstallPrompt) { showInstallFallbackInstructions(); return; } deferredInstallPrompt.prompt(); const choiceResult = await deferredInstallPrompt.userChoice; if (choiceResult.outcome !== 'accepted') { showInstallButton(); updateInstallHint(`Cuando quieras, vuelve a tocar “Instalar App” o usa el menú del navegador para instalarla.`); } deferredInstallPrompt = null; }); } if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register(`${appUrl}/service-worker.js`, { scope: `${appUrl}/` }).catch((error) => { console.error('No se pudo registrar el service worker', error); }); }); } function alertaPesonalizada(tipo, mensaje) { Swal.fire({ position: "top-end", icon: tipo, title: mensaje, showConfirmButton: false, timer: 1500, toast: true }); } const formConsultaCarnet = document.getElementById('formConsultaCarnet'); const resultadoConsulta = document.getElementById('resultadoConsulta'); const cardPreview = document.getElementById('cardPreview'); const fotoCarnetInput = document.getElementById('foto_carnet'); const btnActualizarFotoCarnet = document.getElementById('btnActualizarFotoCarnet'); const btnDescargarCarnetWeb = document.getElementById('btnDescargarCarnetWeb'); let currentCarnetDni = ''; function renderCarnetCard(user) { const company = user.company; const avatarUrl = user.avatar ? `${base_url}/assets/admin/uploads/avatars/${user.avatar}` : `${base_url}/assets/admin/images/avatars/default.png`; const qrUrl = `${base_url}/assets/admin/uploads/qrcodes/${user.qrCode}.png`; const cardHtml = ` <div class="card profile-card-3 mx-auto" id="webCardDownload"> <div class="side-accent"></div> <div class="main-content"> <div class="watermark">FITNESS CARD</div> <div class="header-card"> <div class="gym-brand"> <span class="gym-name">${company.name}</span> </div> <div class="membership-badge">${user.membership_name}</div> </div> <div class="user-section"> <img src="${avatarUrl}" alt="profile-image" class="profile" /> <div class="user-info"> <h2>${user.name} ${user.lastname}</h2> <span class="client-email">${user.email}</span> <div class="client-data"> <span class="data-pill"><i class="bi bi-card-text"></i> ${user.dni}</span> <span class="data-pill"><i class="bi bi-phone"></i> ${user.phone}</span> </div> </div> </div> <div class="footer-card"> <div class="contact-info"> <div class="location-label">Nuestra Sede</div> <span class="gym-detail"><i class="bi bi-geo-alt-fill"></i> ${company.address}</span> <span class="gym-detail"><i class="bi bi-telephone-fill"></i> ${company.phone}</span> </div> <div class="qr-section"> <img class="qr-image" src="${qrUrl}" alt="qr-image" /> </div> </div> </div> </div> `; cardPreview.innerHTML = cardHtml; resultadoConsulta.style.display = 'block'; currentCarnetDni = user.dni || currentCarnetDni; } function consultarCarnetPorDni(dni) { return fetch(`${base_url}/consulta-carnet/${dni}`) .then(res => res.json()) .then(data => { if (data.status === 'success') { renderCarnetCard(data.user); } else { alertaPesonalizada('error', data.msg); resultadoConsulta.style.display = 'none'; } }) .catch(err => { console.error(err); alertaPesonalizada('error', 'Error al consultar el carnet'); resultadoConsulta.style.display = 'none'; }); } formConsultaCarnet.addEventListener('submit', function(e) { e.preventDefault(); const dni = document.getElementById('dni_consulta').value.trim(); if (!dni) { alertaPesonalizada('warning', 'Ingresa un DNI para continuar'); return; } currentCarnetDni = dni; consultarCarnetPorDni(dni); }); btnActualizarFotoCarnet.addEventListener('click', async function() { if (!currentCarnetDni) { alertaPesonalizada('warning', 'Primero consulta tu carnet'); return; } const selectedFile = fotoCarnetInput.files?.[0]; if (!selectedFile) { alertaPesonalizada('warning', 'Selecciona una foto antes de guardar'); return; } const confirm = await Swal.fire({ title: '¿Guardar nueva foto?', text: 'Tu carnet se actualizará con esta imagen.', icon: 'question', showCancelButton: true, confirmButtonText: 'Sí, guardar', cancelButtonText: 'Cancelar', confirmButtonColor: '#198754' }); if (!confirm.isConfirmed) { return; } const formData = new FormData(); formData.append('dni', currentCarnetDni); formData.append('avatar', selectedFile); const originalText = btnActualizarFotoCarnet.innerText; btnActualizarFotoCarnet.disabled = true; btnActualizarFotoCarnet.innerText = 'Guardando...'; try { const response = await fetch(`${base_url}/consulta-carnet/foto`, { method: 'POST', body: formData }); const data = await response.json(); if (data.status !== 'success') { alertaPesonalizada('error', data.msg || 'No se pudo actualizar la foto'); return; } await Swal.fire({ icon: 'success', title: 'Foto actualizada', text: 'Tu nueva foto se guardó correctamente.', timer: 1800, showConfirmButton: false }); fotoCarnetInput.value = ''; await consultarCarnetPorDni(currentCarnetDni); } catch (error) { console.error(error); alertaPesonalizada('error', 'Error al guardar la nueva foto'); } finally { btnActualizarFotoCarnet.disabled = false; btnActualizarFotoCarnet.innerText = originalText; } }); btnDescargarCarnetWeb.addEventListener('click', function() { const card = document.getElementById('webCardDownload'); if (!card) { alertaPesonalizada('warning', 'Primero consulta tu carnet'); return; } html2canvas(card, { useCORS: true, allowTaint: true, backgroundColor: null, scale: 2 }).then(canvas => { const link = document.createElement('a'); link.download = `carnet_${document.getElementById('dni_consulta').value}.png`; link.href = canvas.toDataURL('image/png'); link.click(); }); }); </script> <script> // Interceptar fetch() nativo para agregar anti-cache automáticamente (Frontend) (function() { const originalFetch = window.fetch; window.fetch = function(url, options) { options = options || {}; // Agregar timestamp para romper la cache const separator = (typeof url === 'string' && url.includes('?')) ? '&' : '?'; if (typeof url === 'string') { url = url + separator + '_nocache=' + Date.now(); } // Agregar headers anti-cache options.headers = Object.assign({}, options.headers || {}, { 'X-Requested-With': 'XMLHttpRequest', 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache' }); return originalFetch.call(this, url, options); }; })(); </script> <?= $this->renderSection('js'); ?> </body> </html>
Coded With 💗 by
0x6ick