Files
mesh/PROGRESS_2026-01-02.md
Gilles Soulier 1d177e96a6 first
2026-01-05 13:20:54 +01:00

9.5 KiB

Rapport d'Avancement - Mesh

Date: 2026-01-02 Phase: MVP - Infrastructure & Serveur Session: Développement backend serveur


Terminé Cette Session

1. Modèles de Base de Données (SQLAlchemy)

Fichier: server/src/db/models.py (140 lignes)

Modèles créés:

  • User - Gestion des utilisateurs

    • user_id (UUID), username, email, hashed_password
    • Relations: devices, room_memberships, owned_rooms
  • Device - Agents desktop par utilisateur

    • device_id (UUID), user_id, name, last_seen
  • Room - Salons de communication (2-4 personnes)

    • room_id (UUID), name, owner_id
    • Relations: members, messages
  • RoomMember - Appartenance aux rooms avec rôles

    • role (OWNER, MEMBER, GUEST)
    • presence_status (ONLINE, BUSY, OFFLINE)
  • Message - Messages de chat persistés

    • message_id (UUID), room_id, user_id, content
  • P2PSession - Sessions QUIC actives

    • session_id, kind (file/folder/terminal), session_token

2. Configuration Base de Données

  • server/src/db/base.py - SQLAlchemy engine et session
  • server/alembic.ini - Configuration Alembic
  • server/alembic/env.py - Environnement de migration
  • Auto-création des tables au démarrage (dev)

3. Module d'Authentification

Fichiers: server/src/auth/

  • security.py - Fonctions de sécurité (190 lignes)

    • get_password_hash() / verify_password() (bcrypt)
    • create_access_token() / decode_access_token() (JWT)
    • create_capability_token() / validate_capability_token()
    • Capability tokens avec TTL court (60-180s) ✓
  • schemas.py - Schémas Pydantic

    • UserCreate, UserLogin, Token
    • CapabilityTokenRequest, CapabilityTokenResponse
  • dependencies.py - Dépendances FastAPI

    • get_current_user() pour protéger les routes
    • get_current_active_user() avec vérification is_active

4. API REST Endpoints

Fichiers: server/src/api/

Authentification (auth.py - 170 lignes):

  • POST /api/auth/register - Création de compte
  • POST /api/auth/login - Connexion
  • GET /api/auth/me - Informations utilisateur
  • POST /api/auth/capability - Demande de capability token

Rooms (rooms.py - 180 lignes):

  • POST /api/rooms/ - Créer une room
  • GET /api/rooms/ - Lister mes rooms
  • GET /api/rooms/{room_id} - Détails d'une room
  • GET /api/rooms/{room_id}/members - Membres d'une room

5. WebSocket Temps Réel

Fichiers: server/src/websocket/

  • manager.py - ConnectionManager (150 lignes)

    • Gestion des connexions actives (peer_id → WebSocket)
    • Mapping peer → user_id
    • Mapping room_id → Set[peer_id]
    • send_personal_message(), broadcast_to_room()
  • events.py - Types d'événements (150 lignes)

    • Classe EventType avec toutes les constantes
    • WebSocketEvent (structure selon protocol_events_v_2.md)
    • Schémas de payload: SystemHello, RoomJoined, ChatMessage, etc.
  • handlers.py - Handlers d'événements (200 lignes)

    • handle_system_hello() - Identification peer
    • handle_room_join() / handle_room_left()
    • handle_chat_message_send() - Chat avec persistence
    • handle_rtc_signal() - Relay WebRTC (offer, answer, ice)

6. Application Principale

  • server/src/main.py - Point d'entrée FastAPI (150 lignes)
    • Inclusion des routers API
    • Endpoint WebSocket /ws?token=JWT_TOKEN
    • Authentification JWT sur WebSocket
    • Gestion peer_id unique par connexion
    • Handlers startup/shutdown
    • Auto-création des tables DB

7. Documentation & Tests

  • server/README.md - Documentation serveur complète
  • server/test_api.py - Script de test interactif (250 lignes)
    • Test santé, register, login
    • Test création room, liste, détails
    • Test capability token
    • Sortie colorée avec émojis

8. Dépendances

  • server/requirements.txt mis à jour
    • Ajout: alembic, bcrypt, pytest, pytest-asyncio

📊 Métriques

Métrique Valeur
Fichiers créés/modifiés 20+
Lignes de code Python ~1800
Endpoints API REST 9
Handlers WebSocket 6
Modèles de données 6
Schémas Pydantic 12+

🎯 Fonctionnalités Serveur Implémentées

Authentification ✓

  • Enregistrement utilisateur avec hash bcrypt
  • Connexion avec JWT
  • Middleware de protection des routes
  • Capability tokens (TTL court 60-180s)
  • Validation des tokens

Base de Données ✓

  • Modèles SQLAlchemy complets
  • Configuration Alembic
  • Auto-création des tables (dev)
  • Relations entre entités

API REST ✓

  • Endpoints d'authentification
  • CRUD rooms
  • Liste des membres
  • Health check

WebSocket ✓

  • Connection manager
  • Authentification par JWT
  • Event routing
  • Broadcast aux rooms
  • Messages personnels peer-to-peer

Événements ✓

  • system.hello / system.welcome
  • room.join / room.joined
  • chat.message.send / chat.message.created
  • rtc.offer / rtc.answer / rtc.ice (relay)
  • Gestion des erreurs

📈 Progression Globale

Serveur (Python/FastAPI)

Configuration & Base    ████████████████████  100%
Base de données         ████████████████████  100%
Authentification        ████████████████████  100%
API REST                ████████████████████  100%
WebSocket               ████████████████░░░░   85%
Signalisation WebRTC    ████████████░░░░░░░░   60%
Orchestration P2P       ████░░░░░░░░░░░░░░░░   20%
Notifications Gotify    ░░░░░░░░░░░░░░░░░░░░    0%
Tests                   ████░░░░░░░░░░░░░░░░   20%

Progression serveur globale: 70% du MVP

Projet Global

Serveur                 ██████████████░░░░░░   70%
Client                  ████░░░░░░░░░░░░░░░░   20%
Agent                   ███░░░░░░░░░░░░░░░░░   15%
Infrastructure          ████████████████░░░░   80%

Progression MVP globale: 45%


⏭️ Prochaines Étapes

Court Terme (Prochaine Session)

  1. Orchestration P2P (QUIC)

    • Endpoint POST /api/p2p/session pour créer sessions
    • Handler p2p.session.request
    • Génération des endpoints QUIC
    • Émission p2p.session.created
  2. Tests

    • Tests unitaires pour JWT et capability tokens
    • Tests d'intégration WebSocket
    • Tests E2E avec vraie DB
  3. Client Web

    • Implémenter l'authentification (formulaire + store)
    • Client WebSocket avec reconnexion
    • Composant Chat fonctionnel
  4. Agent Rust

    • Connexion WebSocket au serveur
    • Configuration QUIC endpoint
    • Handshake P2P_HELLO

Moyen Terme

  • Notifications Gotify
  • Terminal control handlers
  • Rate limiting
  • Logs structurés
  • Métriques

🔴 Risques & Blocages

Aucun Blocage Actuel

Le développement se déroule bien. Tous les composants de base sont en place.

Attention

  • ⚠️ Tests manquants - Ajouter tests unitaires et intégration
  • ⚠️ Migration Alembic - Pas encore générée (à faire avant prod)
  • ⚠️ Validation capability tokens - Implémentée mais pas utilisée partout
  • ⚠️ Gotify non connecté - Client créé mais pas d'envoi de notifications

📝 Notes Techniques

Architecture Respectée ✓

  • Control plane only - Le serveur ne transporte pas de données lourdes
  • Capability tokens - TTL court (60-180s) pour toutes actions P2P
  • WebSocket pour signaling - Events structurés selon protocol_events_v_2.md
  • Séparation des plans - Control (serveur), Media (WebRTC), Data (QUIC)

Code Quality ✓

  • Headers de traçabilité - Tous les fichiers ont leurs headers
  • Commentaires en français - Conformité avec CLAUDE.md
  • Logs en anglais - Pour compatibilité technique
  • Type hints - Pydantic pour validation, typing pour annotations
  • Async/await - FastAPI async pour performance

Base de Données

  • SQLite en dev (pratique, pas de serveur)
  • PostgreSQL recommandé en prod
  • Pas encore de migrations Alembic générées
  • Auto-création des tables au démarrage (dev only)

🚀 Commandes Utiles

Démarrer le serveur

cd server
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Éditer .env avec MESH_JWT_SECRET
python -m uvicorn src.main:app --reload

Tester l'API

python test_api.py

Documentation API

Ouvrir http://localhost:8000/docs


📚 Documentation Créée


Préparé par: Claude Date: 2026-01-02 Durée de session: ~2 heures Statut: Serveur fonctionnel pour chat basique et signalisation WebRTC