# Konstansok, REST és abilities

> A beállítások rögzítése wp-config.php-ban, a vészkapcsolók, a hookok, az admin REST-végpontok és az LW Site Manager abilityk.

## Beállítás rögzítése a wp-config.php-ban

Bármelyik beállítás rögzíthető egy `LW_FIREWALL_` + nagybetűs kulcsnév konstanssal. A kulcsneveket a `wp lw-firewall config list` mutatja.

```php title="wp-config.php"
define( 'LW_FIREWALL_RATE_LIMIT', 60 );
define( 'LW_FIREWALL_BLOCKED_COUNTRIES', [ 'CN', 'RU' ] );
define( 'LW_FIREWALL_TRUSTED_PROXIES', [ '127.0.0.1' ] );
```

- A konstans mindig nyer: a felület, a WP-CLI és az importálás sem írja felül. A felületen a mező zárolva látszik.
- Az értéket a bővítmény nem írja az adatbázisba. Ha törlöd a konstanst, a korábban mentett érték lép életbe.
- A bővítmény a `wp-config.php`-t soha nem írja.
- Bedrockban a `config/application.php`-ban, a szokásos módon: `Config::define( 'LW_FIREWALL_RATE_LIMIT', 60 );`.

## Különleges konstansok

| Konstans | Érték | Hatás |
|---|---|---|
| `LW_FIREWALL_TWOFA_ENABLED` | `false` | **Vészkapcsoló:** a kétlépcsős belépés azonnal kikapcsol. |
| `LW_FIREWALL_DISABLE_WORKER` | `true` | **Worker-vészkapcsoló:** a worker semmit nem ellenőriz. Az Állapot fül jelzi. Felületen nem állítható. |
| `LW_FIREWALL_LOGGEDIN_MULTIPLIER` | egész szám, alap 10 | A bejelentkezett felhasználók REST-, szűrő- és kosárkeretének szorzója a **Rate limit**hez képest. Felületen nem állítható és nem látszik. |

## Hookok

| Hook | Típus | Mire jó |
|---|---|---|
| `lw_firewall_passkey_allowed_origins` | szűrő | További host név engedélyezése a hozzáférési kulcshoz, pl. egy `www` alias. |
| `lw_firewall_2fa_passed` (`$user_id`, `$method`) | akció | Sikeres második lépés után fut. A `wp_login` a második lépés után nem fut újra, ezért erre érdemes kötni. |
| `lw_firewall_2fa_factor_changed` (`$user_id`, `$change`, `$factor`) | akció | Faktor hozzáadva vagy eltávolítva. |
| `lw_firewall_2fa_enrolled` (`$user_id`, `'totp'`) | akció | A kötelező beállítás befejeződött. |

Az LW Cookie (1.9.7-től) a tűzfal `lwfw_v` és `lwfw_c` sütijét magától „szigorúan szükséges”-ként sorolja be.

## Admin REST-végpontok

Alap: `/wp-json/lw-firewall/v1/admin/`. Adminisztrátori jog (`manage_options`) kell, multisite-on a hálózati írásokhoz hálózati adminisztrátori jog. Alkalmazásjelszóval is hívható.

| Metódus | Útvonal | Mire |
|---|---|---|
| GET / POST | `/admin/settings` | Beállítások. A POST részleges: csak a küldött kulcsok változnak. Érvénytelen értéknél 400, és semmi nem mentődik. |
| GET | `/admin/bans` | Kitiltások, tároló, felhasználónév-zárolások. |
| POST | `/admin/bans` | Kézi kitiltás: `ip`, opcionálisan `duration` (mp). Whitelistes vagy saját címnél 409. |
| POST | `/admin/bans/unban` | Feloldás: `ips` (tömb), `users` (tömb) vagy `all: true`. |
| GET / DELETE | `/admin/logs` | Napló (`page`, `per_page`, `reason`, `search`) / törlés. |
| POST | `/admin/worker/reinstall` | Worker újratelepítése. |
| POST | `/admin/geo/update` | Országlisták frissítése (`countries` opcionális). |
| POST | `/admin/alerts/scan`, `/admin/alerts/test` | Admin-összevetés most / teszt e-mail. |
| GET / POST | `/admin/export`, `/admin/import` | Export / import (legfeljebb 256 KB). |
| GET | `/admin/status` | Az Állapot fül adatai. |
| GET | `/admin/2fa/summary` | Kétlépcsős statisztika. |

```bash title="Állapot lekérése"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" \
  https://pelda.hu/wp-json/lw-firewall/v1/admin/status
```

```bash title="Kéréskorlát módosítása (csak a küldött kulcsok változnak)"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST \
  -H "Content-Type: application/json" \
  -d '{"rate_limit":60,"protect_rest_api":true}' \
  https://pelda.hu/wp-json/lw-firewall/v1/admin/settings
```

```bash title="Egy cím kézi kitiltása 1 órára"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST \
  -H "Content-Type: application/json" \
  -d '{"ip":"203.0.113.42","duration":3600}' \
  https://pelda.hu/wp-json/lw-firewall/v1/admin/bans
```

Ha a hívó fióknál kétlépcsős belépés van, és az **Alkalmazásjelszavak tiltása** be van kapcsolva, az alkalmazásjelszó nem működik.

A Profil oldal és a belépőoldal saját kétlépcsős és hozzáférésikulcs-végpontokat használ. Ezek nem integrációs célúak.

## Abilities (az LW Site Manager mellett)

Ha az [LW Site Manager](https://hub.hellowp.io/hu/docs/lw-plugins/) is aktív, az LW Firewall öt képességet regisztrál „Tűzfal” kategóriában. MCP-n keresztül is elérhetők. Mindegyik adminisztrátori jogot kér.

| Ability | Típus | Bemenet |
|---|---|---|
| `lw-firewall/get-options` | olvas | nincs |
| `lw-firewall/get-log` | olvas | `limit` (1–100, alap 25) |
| `lw-firewall/list-blocked` | olvas | nincs; csak a kézi blacklistet adja |
| `lw-firewall/block-ip` | ír | `ip` (IP vagy CIDR), a blacklistre teszi |
| `lw-firewall/unblock-ip` | ír | `ip` |

A WordPress Abilities REST-felületén hívhatók: `/wp-json/wp-abilities/v1/abilities/<név>/run`, olvasáshoz GET, íráshoz POST `{"input": {...}}` törzzsel.

```bash title="Cím felvétele a blacklistre"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST \
  -H "Content-Type: application/json" \
  -d '{"input":{"ip":"203.0.113.42"}}' \
  https://pelda.hu/wp-json/wp-abilities/v1/abilities/lw-firewall/block-ip/run
```

Az automatikus kitiltások abilityvel nem kezelhetők.
