403Webshell
Server IP : 193.86.120.172  /  Your IP : 216.73.216.67
Web Server : Apache/2.4.63 (Unix)
System : Linux JServices 3.10.108 #86003 SMP Wed Oct 22 13:20:46 CST 2025 x86_64
User : kubec ( 1026)
PHP Version : 8.2.28
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /volume1/web/doskocil_jservices_cz/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/doskocil_jservices_cz/auth.php
<?php
/**
 * GPS Instalace — auth helper
 * Soubor: /auth.php
 * Includuj na začátek každého admin PHP souboru.
 */
if (!defined('GPS_ADMIN_CONTEXT')) define('GPS_ADMIN_CONTEXT', true);

if (!isset($pdo)) {
    require_once __DIR__ . '/config.php';
}

// Nastav session parametry před startem
session_name(SESSION_NAME);
session_set_cookie_params([
    'lifetime' => 0,           // cookie do zavření prohlížeče (trvalost řeší DB token)
    'path'     => '/',
    'secure'   => false,       // true až bude HTTPS
    'httponly' => true,
    'samesite' => 'Lax',
]);

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// ------------------------------------------------------------
// Pokus o obnovení session z remember-me tokenu
// ------------------------------------------------------------
if (empty($_SESSION['uzivatel_id']) && !empty($_COOKIE['gps_remember'])) {
    $token = $_COOKIE['gps_remember'];
    $stmt  = $pdo->prepare("
        SELECT s.uzivatel_id, u.jmeno, u.prijmeni, u.email, u.username, u.role, u.tema, u.barva_kalendar, u.aktivni
        FROM sessions s
        JOIN uzivatele u ON u.id = s.uzivatel_id
        WHERE s.token = ? AND s.vyprsi > NOW() AND u.aktivni = 1
        LIMIT 1
    ");
    $stmt->execute([hash('sha256', $token)]);
    $user = $stmt->fetch();

    if ($user) {
        // Obnov session
        $_SESSION['uzivatel_id']    = $user['uzivatel_id'];
        $_SESSION['jmeno']          = $user['jmeno'];
        $_SESSION['prijmeni']       = $user['prijmeni'];
        $_SESSION['email']          = $user['email'];
        $_SESSION['role']           = $user['role'];
        $_SESSION['tema']           = $user['tema'];
        $_SESSION['barva_kalendar'] = $user['barva_kalendar'];
        $_SESSION['username']       = $user['username'];

        // Prodluž platnost tokenu v DB (rolling window)
        $pdo->prepare("
            UPDATE sessions SET vyprsi = DATE_ADD(NOW(), INTERVAL 90 DAY)
            WHERE token = ?
        ")->execute([hash('sha256', $token)]);
    } else {
        // Neplatný token — smaž cookie
        setcookie('gps_remember', '', time() - 3600, '/', '', false, true);
    }
}

// ------------------------------------------------------------
// Není přihlášen → přesměruj na login
// ------------------------------------------------------------
if (empty($_SESSION['uzivatel_id'])) {
    // Pokud je to AJAX požadavek, vrať JSON
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
        json_response(false, ['error' => 'Nejste přihlášen.', 'redirect' => '/admin.html'], 401);
    }
    redirect('/admin.html');
}

// Uživatel není aktivní
if (!empty($_SESSION['uzivatel_id'])) {
    $stmt = $pdo->prepare("SELECT aktivni FROM uzivatele WHERE id = ?");
    $stmt->execute([$_SESSION['uzivatel_id']]);
    if (!$stmt->fetchColumn()) {
        session_destroy();
        redirect('/admin.html?chyba=deaktivovan');
    }
}

// ------------------------------------------------------------
// Pomocné funkce pro auth
// ------------------------------------------------------------

function aktualni_uzivatel(): array {
    return [
        'id'             => $_SESSION['uzivatel_id'],
        'jmeno'          => $_SESSION['jmeno'],
        'prijmeni'       => $_SESSION['prijmeni'],
        'email'          => $_SESSION['email'],
        'role'           => $_SESSION['role'],
        'tema'           => $_SESSION['tema'],
        'barva_kalendar' => $_SESSION['barva_kalendar'],
    ];
}

function je_admin(): bool {
    return ($_SESSION['role'] ?? '') === 'admin';
}

function je_majitel_nebo_admin(): bool {
    return in_array($_SESSION['role'] ?? '', ['admin', 'majitel']);
}

function vyzaduj_roli(array $role): void {
    if (!in_array($_SESSION['role'] ?? '', $role)) {
        if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
            json_response(false, ['error' => 'Nedostatečná oprávnění.'], 403);
        }
        redirect('/admin/?chyba=opravneni');
    }
}

function ma_opravneni(string $opravneni): bool {
    // Admin a majitel mají vždy vše
    if (je_majitel_nebo_admin()) return true;

    global $pdo;
    static $cache = null;
    if ($cache === null) {
        $stmt = $pdo->prepare("SELECT * FROM opravneni WHERE uzivatel_id = ?");
        $stmt->execute([$_SESSION['uzivatel_id']]);
        $cache = $stmt->fetch() ?: [];
    }
    return !empty($cache[$opravneni]);
}

Youez - 2016 - github.com/yon3zu
LinuXploit