# Registrace účtů — AzerothCore Jednoduchá PHP registrační stránka pro AzerothCore server. Vytváří účet přímo v `acore_auth`.`account` tabulce se správně spočítaným SRP6 salt/verifierem, takže se hráč může rovnou přihlásit ve hře. ## Ochrana proti spamu/botům - **Cloudflare Turnstile** — captcha ověřená server-side (volitelná: pokud necháš `TURNSTILE_SITE_KEY`/`TURNSTILE_SECRET_KEY` prázdné, widget se nezobrazí a ověření se přeskočí — pro produkci ale doporučuji vyplnit). - **Honeypot pole** — skryté pole `website`, které boti často vyplní; formulář pak předstírá úspěch, ale nic se nezapíše. - **Rate limiting** — max. N registračních pokusů z jedné IP za časové okno (výchozí 5 / hodinu), ukládá se do lokální SQLite (`data/ratelimit.sqlite`), nezasahuje do AzerothCore databáze. - **CSRF token** na formuláři. ## Požadavky na serveru - PHP 8.1+ - PHP rozšíření: `pdo_mysql`, `pdo_sqlite`, `gmp`, `session`, `openssl` - Webserver (Apache s `mod_php`/PHP-FPM, nebo nginx + PHP-FPM) - Síťový/lokální přístup k MySQL, kde běží `acore_auth` ## Instalace 1. Zkopíruj `.env.example` do `.env` a vyplň: - `DB_HOST`, `DB_PORT`, `DB_DATABASE` (typicky `acore_auth`), `DB_USERNAME`, `DB_PASSWORD` - `TURNSTILE_SITE_KEY` / `TURNSTILE_SECRET_KEY` z Cloudflare dashboardu 2. Vytvoř v MySQL **dedikovaného uživatele** jen s právy na tabulku `account` (neházej tam root přístup): ```sql CREATE USER 'acore_reg'@'localhost' IDENTIFIED BY 'silne-nahodne-heslo'; GRANT SELECT, INSERT ON acore_auth.account TO 'acore_reg'@'localhost'; FLUSH PRIVILEGES; ``` 3. Nastav webserver tak, aby **DocumentRoot mířil na `public/`**, ne na kořen projektu — `includes/`, `data/` a `.env` tak nebudou z webu dostupné vůbec. Příklad Apache vhost: ```apache ServerName registrace.tvuj-server.cz DocumentRoot /cesta/k/wowserver-registrace/public AllowOverride All Require all granted ``` 4. Uprav práva zápisu na `data/` (potřebuje tam vzniknout `ratelimit.sqlite`): ```bash chown -R www-data:www-data data chmod 750 data ``` 5. Ověř, že GMP na serveru počítá SRP6 verifier správně (porovná se s nezávisle spočítanou referenční hodnotou): ```bash php includes/srp6_selftest.php ``` Očekávaný výstup je `OK - shoduje se s referenční implementací.` Pokud vypíše chybu, něco je špatně s PHP/GMP na serveru a registrace by vytvářela účty, se kterými se nepůjde přihlásit — než to nespadne, dál nepokračuj. 6. Otevři stránku v prohlížeči, vyzkoušej registraci, ověř že se v `account` tabulce objevil nový řádek a že se přihlásíš herním klientem. ## Poznámky k herním pravidlům - Uživatelské jméno i heslo se před výpočtem SRP6 verifieru převádí na velká písmena (`strtoupper`) a jméno se tak i ukládá — přesně jak to dělá samotný AzerothCore/klient, aby přihlášení fungovalo case-insensitive. - Heslo je omezené na tisknutelná ASCII znaky (`REG_PASSWORD_MIN/MAX` v `.env`, výchozí 8–16 znaků) — WoW klient jiné znaky v hesle nepodporuje. - `expansion`, `locale` a další sloupce tabulky `account` se nechávají na výchozích hodnotách definovaných v DB schématu AzerothCore — uprav `public/register.php`, pokud chceš nový účet zařadit jinak (např. jiný expansion level). - Pokud web neběží přímo na stejném stroji jako MySQL, zvaž TLS pro DB spojení nebo tunelování (SSH tunel / VPN), ať heslo/verifier neputuje po síti čistě. ## Struktura projektu ``` includes/ # PHP logika mimo webroot (DB, SRP6, Turnstile, rate limiter) public/ # webroot — index.php (formulář), register.php (zpracování) data/ # SQLite pro rate limiting (zapisovatelné webserverem) .env # tajné údaje, needituj do gitu ```