Přeskočit obsah

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:

{
  "user_id": "uuid...",
  "company_id": "uuid...",
  "message": "Firma úspěšně registrována"
}

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:

{
  "requires_2fa": true,
  "session_token": "abc123..."
}


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:

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "token_type": "bearer"
}

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)

curl -s http://192.168.1.55:8000/auth/license \
  -H "Authorization: Bearer <access_token>"

Odpověď 200 OK:

{
  "offline_jwt": "eyJhbGciOiJSUzI1NiJ9..."
}

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í:

Authorization: Bearer <access_token>

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