Construire un module

Backend (Rust / Axum)

Le backend d'un module est un service Axum (Rust 2021) adossé à PostgreSQL via SQLx. Quelques règles impératives garantissent qualité et sécurité.

Le bootstrap (main.rs) #

// 1. Charger la config (variables KC__… ou config.toml)
// 2. Créer le pool PgPool et lancer les migrations (schéma du module)
// 3. Construire le routeur Axum
// 4. S'enregistrer auprès du core (/internal/modules/…) avec X-Internal-Secret
// 5. Boucler le heartbeat ; se désenregistrer à l'arrêt

Règles de qualité #

  • Zéro unwrap() hors tests — utilisez ? ou expect() au seul bootstrap.
  • Toute erreur DB loggée (tracing::error!) avant retour ; validez les entrées avant toute opération DB.
  • Transactions atomiques pour le multi-tables.
  • Schéma <module> uniquement — aucune table hors de votre schéma.
  • cargo clippy -- -D warnings doit passer.

Authentification reçue du core #

Le module ne valide pas lui-même les JWT. Le core authentifie la requête, puis la proxifie en injectant l'identité dans les en-têtes — votre middleware n'a qu'à vérifier le secret interne et lire l'utilisateur :

X-Internal-Secret : <secret partagé>     # remplace l'Authorization
X-Kubuno-User-Id  : <uuid>
X-Kubuno-User-Role: user | admin
X-Kubuno-User-Email: <email>

Sécurité des routes #

  • Jamais de mot de passe ni de refresh token dans les logs ou le JSON.
  • Routes publiques : pas de fuite d'information (ne distinguez pas « email inexistant » de « mauvais mot de passe »).
  • /internal/* refuse toute requête sans X-Internal-Secret valide.