| 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/hotel_jservices_cz/api/ |
Upload File : |
<?php
// ============================================================
// Hotel DEMO — api/heslo.php
// Změna vlastního hesla (každý přihlášený uživatel)
// ============================================================
$user = auth_check();
$input = json_decode(file_get_contents('php://input'), true) ?? [];
$action = $_GET['action'] ?? 'zmenit';
match ($action) {
'zmenit' => heslo_zmenit($user, $input),
default => api_response(false, null, 'Neznámá akce', 400),
};
function heslo_zmenit(array $user, array $input): never {
// Demo účet nemůže měnit heslo
if ($user['zmena_hesla_zakaz'] ?? false) {
api_response(false, null, 'Tento účet má zákaz změny hesla.', 403);
}
$heslo_stare = $input['heslo_stare'] ?? '';
$heslo_nove = $input['heslo_nove'] ?? '';
$heslo_znovu = $input['heslo_znovu'] ?? '';
if (!$heslo_stare || !$heslo_nove || !$heslo_znovu) {
api_response(false, null, 'Vyplňte všechna pole.', 400);
}
if ($heslo_nove !== $heslo_znovu) {
api_response(false, null, 'Nová hesla se neshodují.', 400);
}
if (mb_strlen($heslo_nove) < 8) {
api_response(false, null, 'Heslo musí mít alespoň 8 znaků.', 400);
}
// Ověření starého hesla
$hash = db_val('SELECT heslo_hash FROM uzivatele WHERE id = ?', [$user['id']]);
if (!password_verify($heslo_stare, $hash)) {
api_response(false, null, 'Současné heslo není správné.', 401);
}
// Uložení nového hesla
$novy_hash = password_hash($heslo_nove, PASSWORD_BCRYPT, ['cost' => 12]);
db_query('UPDATE uzivatele SET heslo_hash = ? WHERE id = ?', [$novy_hash, $user['id']]);
// Zneplatnění všech ostatních session (bezpečnostní opatření)
$token_aktualni = $_COOKIE['session_token'] ?? $_SERVER['HTTP_X_SESSION_TOKEN'] ?? '';
db_query(
'DELETE FROM uzivatel_session WHERE uzivatel_id = ? AND token != ?',
[$user['id'], $token_aktualni]
);
api_response(true, null, '');
}