Auth API — Testování endpointů¶
Připojení¶
| Prostředí | Adresa |
|---|---|
| Dev server | http://192.168.1.55:8000 |
| Swagger UI | http://192.168.1.55:8000/docs |
Spuštění serveru (na dev serveru)¶
cd ~/avax-platform/backend
source ~/avax-venv/bin/activate
set -a && source ~/avax-platform/.env && set +a
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
Testovací příkazy (curl)¶
1. Registrace firmy¶
curl -s -X POST http://192.168.1.55:8000/auth/register/company \
-H "Content-Type: application/json" \
-d '{
"ico": "87654321",
"company_name": "Moje Firma s.r.o.",
"admin_email": "admin@firma.cz",
"admin_name": "Jan Novak",
"admin_password": "Heslo1234"
}'
Odpověď 201 Created:
Chybové stavy:
- 409 — IČO již existuje nebo e-mail je obsazen
- 422 — IČO nemá 8 číslic nebo heslo kratší než 8 znaků
2. Přidání uživatele do existující firmy¶
curl -s -X POST http://192.168.1.55:8000/auth/register/user \
-H "Content-Type: application/json" \
-d '{
"ico": "87654321",
"email": "zamestnanec@firma.cz",
"name": "Petr Novak",
"password": "Heslo5678"
}'
3. Přihlášení¶
curl -s -X POST http://192.168.1.55:8000/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@firma.cz",
"password": "Heslo1234"
}'
Odpověď bez 2FA 200 OK:
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"offline_jwt": "eyJ...",
"token_type": "bearer"
}
Odpověď s 2FA 200 OK:
4. Ověření 2FA kódu¶
curl -s -X POST http://192.168.1.55:8000/auth/2fa/verify \
-H "Content-Type: application/json" \
-d '{
"session_token": "<session_token z login odpovědi>",
"code": "123456"
}'
5. Obnovení access tokenu (refresh)¶
curl -s -X POST http://192.168.1.55:8000/auth/refresh \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "<refresh_token>"
}'
Odpověď 200 OK:
Refresh token je po použití okamžitě invalidován a nahrazen novým (rotace).
6. Odhlášení¶
curl -s -X POST http://192.168.1.55:8000/auth/logout \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "<refresh_token>"
}'
Odpověď 204 No Content.
7. Offline JWT (license)¶
Odpověď 200 OK:
Offline JWT je podepsán RS256 soukromým klíčem Avaxis. Launcher ho ověří veřejným klíčem bez připojení k API.
8. Nastavení 2FA¶
# Krok 1 — zahájení (vrátí TOTP URI + backup kódy)
curl -s -X POST http://192.168.1.55:8000/auth/2fa/setup \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"method": "totp", "code": ""}'
# Krok 2 — potvrzení (musí projít, jinak 2FA NEAKTIVNÍ)
curl -s -X POST http://192.168.1.55:8000/auth/2fa/setup/confirm \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"method": "totp", "code": "123456"}'
9. Vypnutí 2FA (jen super_admin / support_agent)¶
curl -s -X POST http://192.168.1.55:8000/auth/2fa/disable \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"user_id": "<uuid uživatele>",
"reason": "Ztráta telefonu — žádost zákazníka #1234"
}'
10. Reset hesla¶
# Krok 1 — žádost (token se v dev módu vypíše do server logu)
curl -s -X POST http://192.168.1.55:8000/auth/password-reset/request \
-H "Content-Type: application/json" \
-d '{"email": "admin@firma.cz"}'
# Krok 2 — potvrzení s tokenem z e-mailu / logu
curl -s -X POST http://192.168.1.55:8000/auth/password-reset/confirm \
-H "Content-Type: application/json" \
-d '{
"token": "<token z logu>",
"new_password": "NoveHeslo1234"
}'
Autorizační hlavička¶
Všechny chráněné endpointy vyžadují:
Access token platí 15 minut, refresh token 30 dní.
Ověřené výsledky (2026-04-22)¶
| Endpoint | Status | Poznámka |
|---|---|---|
POST /auth/register/company |
✓ 201 | Firma + admin + audit log |
POST /auth/login |
✓ 200 | access + refresh + offline JWT |
GET /auth/license |
✓ 200 | RS256 offline JWT |
| Duplicitní IČO | ✓ 409 | Správně zamítnuto |
| Špatné heslo | ✓ 401 | Správná chyba |
Aktualizováno: 2026-04-22