- A26 — champ `standalone` mort supprimé (0 lecteur) ; `sqlite:////data/…` ne produit plus de chemin UNC sous Windows ; `.env.example` ne promet plus PostgreSQL ; raise au boot si `APP_SECRET_KEY` vaut la valeur par défaut - A33 — rate limit : préfixes manquants (`/scim/v2/`, `/workspace/`, `/db/` + non-GET sur `/s/` et `/f/`), limite lue dans `settings.rate_limit_requests` (60 annoncés / 100 codés en dur), clé `X-Forwarded-For` seulement derrière un proxy local (anti-spoof), `_store` épuré (mémoire bornée) + test dédié - A34 — `_spawn()` : les 10 schedulers loggent leur exception et redémarrent après 10 s au lieu de mourir en silence ; 2 `logger.debug` de scheduler → warning - A35 — OpenAPI régénéré 439 → 511 chemins (`info.version 7.3.9`), README (était v6.7.0), compteur API_GUIDE, titre dupliqué retiré du ROADMAP ; le drift Python 3.12/3.13 reste noté (rebuild d'image à valider) - A36 — 4 dépendances mortes purgées de requirements.txt (aiosqlite, slowapi, loguru, packaging = 0 import) ; pyproject reste sans [project] : Docker et la CI installent requirements.txt, dupliquer les 22 deps créerait 2 sources - A43 — 15 `datetime.utcnow()` → `now(UTC).replace(tzinfo=None)` (format ISO naïf identique, warnings de dépréciation divisés : 2374 → 926) suite **1029/1029** · `ruff check app tests` OK · docs/ROADMAP/CHANGELOG/WORKLOAD à jour
102 lines
3.9 KiB
Markdown
102 lines
3.9 KiB
Markdown
# FlowDeck
|
||
|
||
Clone complet de **Notion** intégré nativement à **Gitea** — Databases, Pages, Kanban, Calendar, Gallery, Timeline, List, Multi-Users.
|
||
|
||
> **7.3.9** — audit sécurité P0→P2 (A1–A26, A33–A36, A43 : auth 401 partout, CSRF sans exemption cookie-auth, SSRF, autoescape, logs d'exceptions) · avant : v6.7.x SSO/SAML + OIDC, v6.6.x agent API, v6.5.x synced blocks, v6.4.0 realtime, PWA offline
|
||
|
||
## Quick Start
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
# Éditer .env avec votre token Gitea
|
||
docker compose up -d
|
||
# → http://localhost:8080
|
||
```
|
||
|
||
## Features
|
||
|
||
### Database & Properties (v1.3–v1.5)
|
||
- **Collections**: databases indépendantes de Gitea, schéma JSON
|
||
- **21 types de propriétés**: title, text, number, select, status, date, person, checkbox, url, email, phone, files, unique_id, relation, rollup, formula + auto-props
|
||
- **Relations bidirectionnelles** + **Rollups** (12 agrégations) + **Formulas** (19 fonctions)
|
||
- **GiteaBoardCompat**: adaptateur boards Gitea legacy → Collections
|
||
|
||
### Vues Multiples (v1.6–v1.7)
|
||
- **Table**: colonnes SSR, triables
|
||
- **Board (Kanban)**: colonnes, groupes, drag & drop
|
||
- **Calendar**: grid mensuel, navigation, événements
|
||
- **Gallery**: cartes visuelles, card_size configurable
|
||
- **List**: vue compacte avec preview
|
||
- **Timeline**: barres Gantt horizontales
|
||
- **Status Overview**: Donut chart SVG
|
||
- **Team Load**: Barres empilées
|
||
|
||
### Sub-items & Dépendances (v1.8)
|
||
- **Sub-items**: parent_id auto-référence, hiérarchie illimitée
|
||
- **Status aggregate**: parent = Done si tous enfants Done
|
||
- **Dependencies**: Blocking/Blocked by, contrainte de transition
|
||
|
||
### My Tasks (v1.9)
|
||
- Dashboard cross-collection agrégeant toutes les tâches assignées
|
||
- Vues: All, Today, Overdue, Next 7 days
|
||
|
||
### Multi-User & Collaboratif (v2.0)
|
||
- **Workspaces**: espaces partagés avec rôles (admin, editor, commenter, viewer)
|
||
- **Comments**: commentaires threadés sur les pages
|
||
- **Page History**: historique des modifications avec snapshots
|
||
- **Favorites**: favoris par utilisateur
|
||
- **Templates**: database + page templates
|
||
- **CSV Import/Export**
|
||
- **Public Sharing**: lien de partage lecture seule
|
||
|
||
### API & Intégrations (v6.3–v6.6)
|
||
- **API publique REST v2**: `/api/v2` — CRUD complet, Bearer + scopes `read/write/admin`, pagination, filtres, erreurs RFC 7807, idempotence, audit — [guide](docs/API_GUIDE_V6.md) · OpenAPI `/docs`
|
||
- **API agent publique (v6.6)**: `/api/v2/agents/*` — agents, conversations, **run synchrone JSON**, journal d'actions + rollback, `trigger` externe
|
||
- **Marketplace de skills (v6.6)**: export/import portable + galerie de 6 presets installables (`/api/v2/skills/*`), section « Galerie » dans la palette `/` de l'agent
|
||
- **API publique v1**: `/api/v1` (lecture seule, compat)
|
||
- **Webhooks sortants**: gestion + dispatcher d'événements (CRUD v2)
|
||
- **Web Clipper**: extension navigateur Manifest V3 (article/sélection/bookmark/screenshot)
|
||
- **PWA**: manifest.json + service worker, offline support
|
||
|
||
### UI Notion-Style (v1.1–v1.2)
|
||
- Sidebar gauche avec sections hiérarchiques
|
||
- Topbar avec breadcrumbs (workspace > projet > page)
|
||
- Dark mode Notion: `#191919` fond, `#222222` sidebar
|
||
- Éditeur de blocs: slash menu (/), navigation clavier, placeholders
|
||
|
||
### Intégration Gitea
|
||
- Issues Gitea → cartes, sync labels, milestones, assignees, due dates
|
||
- OAuth2 Gitea, CSRF, rate limiting, webhooks
|
||
|
||
## Stack
|
||
|
||
| Couche | Techno |
|
||
|--------|--------|
|
||
| Frontend | Jinja2 + HTMX + Alpine.js + SortableJS + CSS |
|
||
| Backend | Python 3.12 + FastAPI + httpx |
|
||
| BDD | SQLite (WAL, 21 tables) — `/data/flowdeck.db` |
|
||
| Déploiement | Docker (python:3.12-slim), docker-compose |
|
||
|
||
## Configuration
|
||
|
||
```env
|
||
GITEA_URL=https://git.dracodev.net
|
||
GITEA_TOKEN=votre_token
|
||
APP_PORT=8080
|
||
DATABASE_URL=sqlite:////data/flowdeck.db
|
||
```
|
||
|
||
## Tests
|
||
|
||
```bash
|
||
python3 -m pytest tests/ -v # 764/764 passent (0 skip)
|
||
```
|
||
|
||
## Roadmap
|
||
|
||
Voir [ROADMAP.md](ROADMAP.md) — 7/7 blocs complétés, 52/52 features ✅
|
||
|
||
## Licence
|
||
|
||
MIT
|