diff --git a/auth/install.php b/auth/install.php index 11af156..5c2bde1 100644 --- a/auth/install.php +++ b/auth/install.php @@ -36,11 +36,11 @@ $uspech = false; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Načtení hodnot z formuláře - $email = trim($_POST['email'] ?? ''); - $heslo = $_POST['heslo'] ?? ''; + $email = trim($_POST['email'] ?? ''); + $heslo = $_POST['heslo'] ?? ''; $heslo2 = $_POST['heslo2'] ?? ''; - // Základní validace emailu + // Validace emailu if (empty($email)) { $chyba = 'Email nesmí být prázdný.'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { @@ -66,43 +66,45 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // ------------------------------------------------ // Tabulka uživatelů přihlašovacího systému - // utf8mb4 = plná podpora Unicode (diakritika, emoji) + // utf8mb4 = plná podpora Unicode (diakritika, emoji, ...) $pdo->exec(" CREATE TABLE IF NOT EXISTS `" . DB_TABULKA_UZIVATELE . "` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `email` VARCHAR(255) NOT NULL, - `heslo` VARCHAR(255) NOT NULL, - `admin` TINYINT(1) NOT NULL DEFAULT 0, - `vytvoreno` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `email` VARCHAR(255) NOT NULL, + `heslo` VARCHAR(255) NOT NULL, + `admin` TINYINT(1) NOT NULL DEFAULT 0, + `vytvoreno` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); // Tabulka remember me tokenů - // selector = veřejný identifikátor pro vyhledání záznamu v DB + // selector = veřejný identifikátor pro vyhledání záznamu v DB // token_hash = bcrypt hash tajného tokenu (samotný token je jen v cookie) $pdo->exec(" CREATE TABLE IF NOT EXISTS `" . DB_TABULKA_TOKENY . "` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `uzivatel_id` INT UNSIGNED NOT NULL, - `selector` VARCHAR(32) NOT NULL, - `token_hash` VARCHAR(255) NOT NULL, - `expiruje` DATETIME NOT NULL, + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `uzivatel_id` INT UNSIGNED NOT NULL, + `selector` VARCHAR(32) NOT NULL, + `token_hash` VARCHAR(255) NOT NULL, + `expiruje` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `selector` (`selector`), - FOREIGN KEY (`uzivatel_id`) REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) ON DELETE CASCADE + FOREIGN KEY (`uzivatel_id`) + REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) + ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); // Tabulka brute force záznamů - // Ukládají se neúspěšné pokusy o přihlášení + // Ukládají se neúspěšné pokusy o přihlášení (IP adresa, email, čas) $pdo->exec(" CREATE TABLE IF NOT EXISTS `" . DB_TABULKA_BRUTE . "` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `ip_adresa` VARCHAR(45) NOT NULL, - `email` VARCHAR(255) NOT NULL, - `cas` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `ip_adresa` VARCHAR(45) NOT NULL, + `email` VARCHAR(255) NOT NULL, + `cas` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `ip_adresa` (`ip_adresa`), KEY `email` (`email`) @@ -110,29 +112,33 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { "); // Tabulka tokenů pro obnovu hesla - // Token je platný jen omezenou dobu (viz config.php) + // Token je jednorázový a platí omezenou dobu (viz config.php) $pdo->exec(" CREATE TABLE IF NOT EXISTS `" . DB_TABULKA_RESET . "` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `uzivatel_id` INT UNSIGNED NOT NULL, - `token_hash` VARCHAR(255) NOT NULL, - `expiruje` DATETIME NOT NULL, + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `uzivatel_id` INT UNSIGNED NOT NULL, + `token_hash` VARCHAR(255) NOT NULL, + `expiruje` DATETIME NOT NULL, PRIMARY KEY (`id`), - FOREIGN KEY (`uzivatel_id`) REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) ON DELETE CASCADE + FOREIGN KEY (`uzivatel_id`) + REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) + ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); - // Tabulka uživatelů konkrétní služby (pokud je nastavena) - // Tato tabulka slouží pro data specifická pro tvůj projekt - // (jméno, nastavení, kontaktní údaje apod.) + // Tabulka uživatelů konkrétní služby (pokud je nastavena v config.php) + // Tato tabulka slouží pro data specifická pro tvůj projekt. + // Zatím obsahuje jen vazbu na auth_users – sloupce si přidáš sám. if (DB_TABULKA_SLUZBA !== '') { $pdo->exec(" CREATE TABLE IF NOT EXISTS `" . DB_TABULKA_SLUZBA . "` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `uzivatel_id` INT UNSIGNED NOT NULL, + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `uzivatel_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uzivatel_id` (`uzivatel_id`), - FOREIGN KEY (`uzivatel_id`) REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) ON DELETE CASCADE + FOREIGN KEY (`uzivatel_id`) + REFERENCES `" . DB_TABULKA_UZIVATELE . "` (`id`) + ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); } @@ -141,6 +147,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // VYTVOŘENÍ PRVNÍHO ADMIN UŽIVATELE // ------------------------------------------------ + // Heslo zahashujeme pomocí bcrypt – nikdy neukládáme plaintext! $heslo_hash = password_hash($heslo, PASSWORD_DEFAULT); $stmt = $pdo->prepare(" @@ -156,7 +163,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $novy_uzivatel_id = $pdo->lastInsertId(); - // Pokud existuje tabulka služby, vytvoříme prázdný řádek + // Pokud existuje tabulka služby, vytvoříme k novému uživateli prázdný řádek if (DB_TABULKA_SLUZBA !== '') { $stmt2 = $pdo->prepare(" INSERT INTO `" . DB_TABULKA_SLUZBA . "` @@ -288,10 +295,10 @@ const POPISKY_SILY = [ 'Velmi silné' ]; -const inputHeslo = document.getElementById('heslo'); -const spanSila = document.getElementById('heslo-sila'); -const tlacitko = document.getElementById('tlacitko-odeslat'); -const spanDuvod = document.getElementById('tlacitko-duvod'); +const inputHeslo = document.getElementById('heslo'); +const spanSila = document.getElementById('heslo-sila'); +const tlacitko = document.getElementById('tlacitko-odeslat'); +const spanDuvod = document.getElementById('tlacitko-duvod'); inputHeslo.addEventListener('input', function () { const hodnota = this.value;