403Webshell
Server IP : 193.86.120.172  /  Your IP : 216.73.216.215
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/kadernictvidenisa_cz/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/kadernictvidenisa_cz/api/auth.php
<?php
// ============================================
//  api/auth.php
//  POST /api/auth/login   – přihlásit admina
//  POST /api/auth/logout  – odhlásit
// ============================================

// Tato funkce se volá z jiných souborů pro ověření
function admin_required(): void {
    $token = null;

    // Bearer token z hlavičky Authorization
    $auth_header = $_SERVER['HTTP_AUTHORIZATION'] ?? ($_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ?? '');
    if (preg_match('/Bearer\s+(.+)/i', $auth_header, $m)) {
        $token = $m[1];
    }

    if (!$token) {
        json_error('Přístup odepřen. Přihlaste se.', 401);
    }

    // Ověření tokenu v DB (session tokeny)
    $stmt = db()->prepare("
        SELECT au.id FROM admin_session s
        JOIN admin_uzivatele au ON au.id = s.user_id
        WHERE s.token = ? AND s.platnost_do > NOW()
    ");
    $stmt->execute([$token]);
    if (!$stmt->fetch()) {
        json_error('Relace vypršela. Přihlaste se znovu.', 401);
    }
}

// --- Login / Logout ---
if (!isset($resource)) { $resource = ''; }

$sub = $parts[1] ?? '';

if ($method === 'POST' && $sub === 'login') {
    $uzivatelske_jmeno = sanitize($input['uzivatelske_jmeno'] ?? '');
    $heslo             = $input['heslo'] ?? '';

    if (!$uzivatelske_jmeno || !$heslo) {
        json_error('Vyplňte uživatelské jméno a heslo.');
    }

    $stmt = db()->prepare("SELECT id, heslo_hash FROM admin_uzivatele WHERE uzivatelske_jmeno = ?");
    $stmt->execute([$uzivatelske_jmeno]);
    $user = $stmt->fetch();

    if (!$user || !password_verify($heslo, $user['heslo_hash'])) {
        // Záměrné zpomalení proti brute-force
        sleep(1);
        json_error('Nesprávné přihlašovací údaje.', 401);
    }

    // Vygeneruj session token
    $remember_me = !empty($input['remember_me']);
    $interval    = $remember_me ? 'INTERVAL 90 DAY' : 'INTERVAL 24 HOUR';
    $session_token = generate_token();
    db()->prepare("
        INSERT INTO admin_session (user_id, token, platnost_do)
        VALUES (?, ?, DATE_ADD(NOW(), $interval))
    ")->execute([$user['id'], $session_token]);

    json_response(['ok' => true, 'token' => $session_token, 'uzivatel' => $uzivatelske_jmeno, 'remember_me' => $remember_me]);
}

if ($method === 'POST' && $sub === 'logout') {
    $auth_header = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
    if (preg_match('/Bearer\s+(.+)/i', $auth_header, $m)) {
        db()->prepare("DELETE FROM admin_session WHERE token = ?")->execute([$m[1]]);
    }
    json_response(['ok' => true]);
}

// GET /api/auth/check — ověř platnost tokenu
if ($method === 'GET' && $sub === 'check') {
    $auth_header = $_SERVER['HTTP_AUTHORIZATION'] ?? ($_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ?? '');
    preg_match('/Bearer\s+(.+)/i', $auth_header, $m);
    $check_token = $m[1] ?? '';
    if (!$check_token) json_error('Chybí token.', 401);
    $stmt = db()->prepare("
        SELECT au.uzivatelske_jmeno
        FROM admin_session s
        JOIN admin_uzivatele au ON au.id = s.user_id
        WHERE s.token = ? AND s.platnost_do > NOW()
    ");
    $stmt->execute([$check_token]);
    $user = $stmt->fetch();
    if (!$user) json_error('Token vypršel.', 401);
    // Obnov platnost tokenu o 30 dní
    db()->prepare("UPDATE admin_session SET platnost_do = DATE_ADD(NOW(), INTERVAL 90 DAY) WHERE token = ?")
       ->execute([$check_token]);
    json_response(['ok' => true, 'uzivatel' => $user['uzivatelske_jmeno']]);
}

// Pouze při přímém volání /api/auth/* vrátíme chybu
if ($resource === 'auth') {
    json_error('Neznámý auth endpoint.', 404);
}

Youez - 2016 - github.com/yon3zu
LinuXploit