1 API
Morozovka Admin edited this page 2026-10-21 07:11:43 +03:00

HTTP API

Авторизация

  • Cookie-сессия: session (Flask) + UserSession в БД
  • Проверка: @login_required (302 на /login) или @require_role([...]) (403)
  • OAuth2: Gitea → /auth/callback
Метод Путь Ответ
GET /healthz JSON {"status":"ok","db":"ok","llm":"disabled"}
GET / HTML — главная
GET /schedule HTML — расписание
GET /schedule/export.ics text/calendar — ICS
POST /api/assistant JSON {"reply":"...","source":"regex"}
GET /api/public-status JSON {"status":"free","delay_minutes":0,"message":null}
GET /feed HTML
GET /projects HTML
GET /workshops HTML
GET /login, /register, /forgot_password HTML

Auth

Метод Путь Форма Ответ
POST /register username, email, password, full_name, organization 200 (HTML)
POST /login username, password 302 → /dashboard
GET /login/gitea — 302 на Gitea OAuth
GET /auth/callback ?code=... 302 → /dashboard или /onboarding
GET /logout — 302 → /
POST /forgot_password email 200 (HTML)
POST /reset_password/<token> password 302 → /login
GET /sessions — HTML
POST /sessions/logout_all — 302
GET /profile — HTML
POST /subscribe/toggle action, notify_status, notify_events, next 302
GET /unsubscribe/<token> — HTML (confirm)
POST /unsubscribe/<token> — HTML (done)

Расписание

Метод Путь Права
GET /admin/schedule admin/professor
POST /admin/schedule/status admin/professor
POST /admin/schedule/event/add admin/professor
GET/POST /admin/schedule/event/<id>/edit admin/professor
POST /admin/schedule/event/<id>/delete admin/professor
POST /admin/schedule/event/cancel_nearest admin/professor
GET/POST /admin/schedule/import admin/professor

Форма события: title, event_type, start_time, end_time, location, description, audience, reason, status, is_public

Проекты

Метод Путь Права
POST /projects/new admin/professor/lead
GET /projects/<id> по видимости
GET /projects/<id>/board по видимости
GET /projects/<id>/gitea-stats по видимости
POST /projects/<id>/edit can_manage
POST /projects/<id>/delete owner/admin
POST /projects/<id>/members/add can_manage
POST /projects/<id>/members/<uid>/permissions can_manage
POST /projects/<id>/members/<uid>/remove can_manage
POST /projects/<id>/posts/new can_post_feed
POST /projects/<id>/posts/<pid>/edit can_edit_*
POST /projects/<id>/posts/<pid>/delete can_edit_*
POST /projects/<id>/tasks/new can_edit
GET/POST /projects/<id>/tasks/<tid>/edit can_edit
POST /projects/<id>/tasks/<tid>/delete can_manage
POST /projects/<id>/tasks/<tid>/move can_edit (JSON)
POST /projects/<id>/files/upload can_upload
POST /projects/<id>/subscribe logged in

JSON для task move: {"status":"in_progress","position":2}

Мастер-классы

Метод Путь Права
GET/POST /workshops/new admin
GET /workshops/<id> по видимости
GET/POST /workshops/<id>/edit can_manage
POST /workshops/<id>/delete can_delete_workshop
POST /workshops/<id>/assistants/add lead/admin
POST /workshops/<id>/assistants/<uid>/remove lead/admin
POST /workshops/<id>/sessions/add can_manage
POST /workshops/<id>/sessions/<sid>/delete can_manage
POST /workshops/<id>/materials/add can_manage
POST /workshops/<id>/materials/<mid>/delete can_manage
POST /workshops/<id>/posts/new can_post
POST /workshops/<id>/posts/<pid>/edit can_manage
POST /workshops/<id>/posts/<pid>/delete can_manage
POST /workshops/<id>/register logged in
POST /workshops/<id>/unregister logged in
POST /workshops/<id>/attendance/<reg_id> can_manage
POST /workshops/<id>/subscribe logged in

Файлы v2.0

Метод Путь Права
GET /files logged in
POST /files/space/new admin/professor/lead
GET /files/space/<id> can_view
GET/POST /files/space/<id>/edit can_manage
POST /files/space/<id>/delete owner/admin
POST /files/folder/new can_upload
GET /files/folder/<id> can_view
POST /files/folder/<id>/delete can_delete
POST /files/upload can_upload
GET /files/download/<id> can_download
GET /files/preview/<id> can_download
GET/POST /files/<id>/edit can_edit
POST /files/<id>/delete can_delete
GET /files/<id>/history can_view
POST /files/<id>/new_version can_edit
GET /files/<id>/version/<vid>/download can_download
POST /files/<id>/revert/<vid> can_edit
GET/POST /files/<id>/move can_edit
GET /files/search?q=&space_id= logged in
GET /files/space/<id>/acl can_manage
POST /files/space/<id>/acl/add can_manage
POST /files/space/<id>/acl/<aid>/remove can_manage
GET /files/folder/<id>/acl can_manage
POST /files/folder/<id>/acl/add can_manage
POST /files/folder/<id>/acl/<aid>/save can_manage
POST /files/folder/<id>/acl/<aid>/remove can_manage

Уведомления

Метод Путь Ответ
GET /api/notifications JSON {items:[], unread:N}
GET /api/notifications/count JSON {unread:N}
POST /api/notifications/<id>/read JSON {ok:true}
POST /api/notifications/read-all JSON {ok:true}
GET /notifications HTML

Онбординг

Метод Путь Тело
GET /onboarding —
POST /onboarding/mark JSON {"key":"visited_schedule","value":true}
POST /onboarding/skip —
POST /onboarding/complete —

Дашборд

Метод Путь Права
GET /dashboard logged in

Админка

Метод Путь Права
GET /admin/users?q= admin
POST /admin/users/<id>/role admin
POST /admin/users/<id>/toggle_active admin
POST /admin/users/<id>/delete admin

Вебхук

Метод Путь Заголовки
POST /webhooks/gitea X-Gitea-Event, X-Gitea-Signature (HMAC-SHA256 hex)

Тело: JSON от Gitea.

Ответ: {"ok":true,"event":"push","repo":"...","cache_invalidated_keys":N,"linked_projects":[...]}

Проверка подписи: если GITEA_WEBHOOK_SECRET пустой — любой запрос проходит. Если задан — HMAC-SHA256 должен совпасть. Иначе 401.