Routes a API
Aplikace má čtyři vrstvy routes:
- Veřejné — server-rendered HTML, fallback catch-all.
- Admin SPA — Vue 3 SPA z embedovaných assetů.
- JSON API
/api/* — vše, čím SPA komunikuje se serverem.
- OAuth2 + MCP — strojový přístup pro Claude a další klienty.
Veřejné routes
| Path | Metoda | Popis |
/files/{hash} | GET | Plný soubor (content-addressed, cache-friendly) |
/files/{hash}/nahled | GET | Thumbnail |
/tag/{name} | GET | Stránky s daným tagem |
/search?q=… | GET | Fulltextové vyhledávání |
/sitemap.xml | GET | Sitemap |
/static/{*path} | GET | Namespaced statické assety (assets/<NAMESPACE>/{css,js,img}) |
/{*path} | GET | Catch-all — viz níže |
Catch-all logika
GET /{*path}
1. match v menus → render menu markdown (skip pokud private a host nepřihlášen)
2. match v pages → render stránky (skip pokud private a host nepřihlášen)
3. → 404
Admin SPA
| Path | Metoda | Popis |
/admin | GET | Vstup do SPA — vrací index.html |
/admin/{*path} | GET | Statické soubory z client/dist/ přes rust-embed; chybějící cesty → fallback na index.html (deep linky pro Vue Router) |
SPA pokrývá: stránky, tagy, soubory, galerie, menu, tokeny, AI assistant chat, LLM providery a modely, vlastní MCP servery, tool permissions.
JSON API /api/*
Vyžaduje session cookie site_session (HTTP-only, Lax, 24 h). Middleware require_login_api vrací 401 JSON, pokud chybí.
| Skupina | Routes |
| auth | POST /api/auth/login, POST /api/auth/logout, GET /api/auth/me |
| pages | CRUD (GET, POST, GET/:id, PUT/:id, DELETE/:id); GET /api/pages/paths; POST /api/pages/:id/revisions/:rev_id/restore |
| tags | CRUD |
| files | CRUD; POST je multipart upload (limit 50 MB) |
| galleries | CRUD; GET /api/galleries/paths |
| menu | CRUD |
| tokens | GET, POST, DELETE/:id (správa service tokenů) |
| markdown | POST /api/markdown/render (markdown → HTML s expanzí direktiv) |
| paths | POST /api/paths/children (enumerace složek + obsah) |
| assistant | Chat sessions, zprávy, streaming odpovědí (viz about/blog/ai) |
| llm | GET/POST /api/llm/providers, GET/POST /api/llm/models (CRUD) |
| tool-permissions | CRUD pravidel pro AI nástroje |
OAuth2 + MCP
| Path | Metoda | Popis |
POST /mcp | POST | MCP JSON-RPC 2.0 endpoint (Bearer auth) |
POST /oauth/register | POST | RFC 7591 dynamic client registration |
GET /oauth/authorize | GET | Login + consent stránka |
POST /oauth/authorize | POST | Vystaví auth code (10 min, PKCE) |
POST /oauth/token | POST | grant_type=authorization_code (PKCE verify) nebo refresh_token |
GET /.well-known/oauth-authorization-server | GET | Server metadata |
GET /.well-known/oauth-protected-resource | GET | Označuje /mcp jako chráněný resource |
Auth flow
| Klient | Mechanismus |
| Vue admin SPA | POST /api/auth/login → server nastaví cookie site_session (HTTP-only, Lax, 24 h) |
| Service skript / starý MCP klient | Service token z /admin/tokeny → Authorization: Bearer <token> |
| Claude Desktop / Claude.ai | OAuth2 PKCE flow → access_token (1 h) + refresh_token (bez expirace) → Authorization: Bearer <access_token> |
Hesla hashována Argon2 (src/auth.rs). MCP handler odvozuje user_id z bearer tokenu pro audit pole (created_by, modified_by).