API — Manager (Web)
Endpointy /api/* obsługujące panel Manager-Content. Wykorzystywane przez frontend HTMX/Alpine.js do autentykacji i integracji.
POST /api/auth/verify-code
Weryfikuje jednorazowy kod logowania wygenerowany w aplikacji mobilnej (przez POST /app/auth/manager-code). Rodzic wpisuje ten kod na stronie /login panelu.
Request:
{
"code": "8A3F2KN5"
}Response 200:
Serwer ustawia cookie sesji (Set-Cookie: session=...) i zwraca dane użytkownika.
{
"data": {
"session_id": "sess_abc123",
"user": {
"id": "prof_d4e5f6",
"email": "anna@example.com",
"role": "parent",
"children": [
{
"profile_id": "prof_a1b2c3",
"display_name": "Odkrywca",
"avatar_url": "https://cdn.lumos-islands.pl/avatars/prof_a1b2c3.png"
}
]
},
"redirect_url": "/dashboard"
}
}Błędy:
| HTTP | code | Kiedy |
|---|---|---|
| 400 | INVALID_CODE | Nieprawidłowy lub wygasły kod |
| 429 | RATE_LIMITED | Za dużo prób (maks. 5 na minutę) |
POST /api/auth/send-email-code
Wysyła kod weryfikacyjny na e-mail rodzica. Alternatywna metoda logowania do panelu, gdy rodzic nie ma dostępu do aplikacji mobilnej.
Request:
{
"email": "anna@example.com"
}Response 200:
{
"data": {
"message": "Kod weryfikacyjny został wysłany.",
"expires_in_seconds": 600
}
}Po otrzymaniu kodu rodzic wywołuje POST /api/auth/verify-email-code (obsługiwane przez formularz HTMX na stronie /login):
Request (weryfikacja):
{
"email": "anna@example.com",
"code": "K4M9T2X7"
}Response 200:
{
"data": {
"session_id": "sess_def456",
"user": {
"id": "prof_d4e5f6",
"email": "anna@example.com",
"role": "parent",
"children": [
{
"profile_id": "prof_a1b2c3",
"display_name": "Odkrywca",
"avatar_url": "https://cdn.lumos-islands.pl/avatars/prof_a1b2c3.png"
}
]
},
"redirect_url": "/dashboard"
}
}Błędy:
| HTTP | code | Kiedy |
|---|---|---|
| 400 | INVALID_EMAIL | Nieprawidłowy format e-mail |
| 404 | NOT_FOUND | E-mail nie jest zarejestrowany |
| 429 | RATE_LIMITED | Za dużo prób wysyłki (maks. 3 na 10 minut) |
Uwagi dotyczące sesji
Panel Manager-Content korzysta z sesji cookie (HttpOnly, SameSite=Strict, Secure). Wszystkie kolejne żądania do stron i fragmentów HTMX są autoryzowane na podstawie cookie sesji — nie wymagają nagłówka Authorization.
Sesja wygasa po 24 godzinach nieaktywności.