- Added support for Google OAuth login, including new API endpoints for OAuth providers and callbacks. - Updated user authentication logic to handle OAuth-only users. - Enhanced README.md and deployment documentation with OAuth setup instructions. - Modified frontend components to include OAuth login options and improved error handling. - Updated configuration files to include new environment variables for OAuth integration.
59 lines
5.0 KiB
Markdown
59 lines
5.0 KiB
Markdown
# HTTP API
|
||
|
||
API доступно по префиксу `/map/api/`. Для запросов, требующих авторизации, используется cookie `session` (устанавливается при логине).
|
||
|
||
## Авторизация
|
||
|
||
- **POST /map/api/login** — вход. Тело: `{"user":"...","pass":"..."}`. При успехе возвращается JSON с данными пользователя и выставляется cookie сессии. При первом запуске возможен bootstrap: логин `admin` и пароль из `HNHMAP_BOOTSTRAP_PASSWORD` создают первого админа. Для пользователей, созданных через OAuth (без пароля), возвращается 401 с `{"error":"Use OAuth to sign in"}`.
|
||
- **GET /map/api/me** — текущий пользователь (по сессии). Ответ: `username`, `auths`, при необходимости `tokens`, `prefix`.
|
||
- **POST /map/api/logout** — выход (инвалидация сессии).
|
||
- **GET /map/api/setup** — проверка, нужна ли первичная настройка. Ответ: `{"setupRequired": true|false}`.
|
||
|
||
### OAuth
|
||
|
||
- **GET /map/api/oauth/providers** — список настроенных OAuth-провайдеров. Ответ: `["google", ...]`.
|
||
- **GET /map/api/oauth/{provider}/login** — редирект на страницу авторизации провайдера. Query: `redirect` — путь для редиректа после успешного входа (например `/map/profile`).
|
||
- **GET /map/api/oauth/{provider}/callback** — callback от провайдера (вызывается автоматически). Обменивает `code` на токены, создаёт или находит пользователя, создаёт сессию и редиректит на `/map/profile` или `redirect` из state.
|
||
|
||
## Кабинет
|
||
|
||
- **POST /map/api/me/tokens** — сгенерировать новый токен загрузки (требуется право `upload`). Ответ: `{"tokens": ["...", ...]}`.
|
||
- **POST /map/api/me/password** — сменить пароль. Тело: `{"pass":"..."}`.
|
||
|
||
## Карта и данные
|
||
|
||
- **GET /map/api/config** — конфиг для клиента (title, auths). Требуется сессия.
|
||
- **GET /map/api/v1/characters** — список персонажей на карте (требуется право `map` и при необходимости `markers`).
|
||
- **GET /map/api/v1/markers** — маркеры (требуется право `map` и при необходимости `markers`).
|
||
- **GET /map/api/maps** — список карт (с учётом прав и скрытых карт).
|
||
|
||
## Админ (все эндпоинты ниже требуют право `admin`)
|
||
|
||
- **GET /map/api/admin/users** — список имён пользователей.
|
||
- **POST /map/api/admin/users** — создать/обновить пользователя. Тело: `{"user":"...","pass":"...","auths":["admin","map",...]}`.
|
||
- **GET /map/api/admin/users/:name** — данные пользователя.
|
||
- **DELETE /map/api/admin/users/:name** — удалить пользователя.
|
||
- **GET /map/api/admin/settings** — настройки (prefix, defaultHide, title).
|
||
- **POST /map/api/admin/settings** — сохранить настройки. Тело: `{"prefix":"...","defaultHide":true|false,"title":"..."}` (поля опциональны).
|
||
- **GET /map/api/admin/maps** — список карт для админки.
|
||
- **POST /map/api/admin/maps/:id** — обновить карту (name, hidden, priority).
|
||
- **POST /map/api/admin/maps/:id/toggle-hidden** — переключить скрытие карты.
|
||
- **POST /map/api/admin/wipe** — очистить гриды, маркеры, тайлы, карты в БД.
|
||
- **POST /map/api/admin/rebuildZooms** — пересобрать зум-уровни тайлов.
|
||
- **GET /map/api/admin/export** — скачать экспорт данных (ZIP).
|
||
- **POST /map/api/admin/merge** — загрузить и применить merge (ZIP с гридами и маркерами).
|
||
- **GET /map/api/admin/wipeTile** — удалить тайл. Query: `map`, `x`, `y`.
|
||
- **GET /map/api/admin/setCoords** — сдвинуть координаты гридов. Query: `map`, `fx`, `fy`, `tx`, `ty`.
|
||
- **GET /map/api/admin/hideMarker** — скрыть маркер. Query: `id`.
|
||
|
||
## Коды ответов
|
||
|
||
- **200** — успех.
|
||
- **400** — неверный запрос (метод, тело, параметры).
|
||
- **401** — не авторизован (нет или недействительная сессия).
|
||
- **403** — нет прав.
|
||
- **404** — не найдено.
|
||
- **500** — внутренняя ошибка.
|
||
|
||
Формат ошибок — текст в теле ответа или стандартные HTTP-статусы без тела.
|