..
src
Cargo.toml 425 B
README.md 10 kB

README.md

rustwarden-cli

Wizard interactif en ligne de commande pour creer et maintenir des projets applicatifs bases sur le framework Rustwarden.

Installation

Depuis la racine du workspace Rustwarden :

cargo build -p rustwarden-cli

Le binaire est genere dans target/debug/rustwarden-cli.

Pour un binaire optimise reutilisable :

cargo build -p rustwarden-cli --release
# => target/release/rustwarden-cli

Utilisation

# Lancement direct (compile + execute)
cargo run -p rustwarden-cli -- <commande>

# Ou via le binaire
./target/release/rustwarden-cli <commande>

Commandes disponibles :

CommandeDescription
start-projectCreer un nouveau projet applicatif Rustwarden
update-projectMettre a jour les crates du framework dans un projet existant

Primitives fournies par le framework

Chaque projet genere embarque l'ensemble des primitives du framework. Elles sont toutes accessibles via rustwarden_core::prelude::* :

DomaineTypes clesReference
AuthentificationAuthUser, Claims, JwtServiceSERVICES_REFERENCE.md §4
RBACRoleService, PermissionServiceSERVICES_REFERENCE.md §5
Mots de passePasswordService, PasswordChangeService, PasswordResetServiceSERVICES_REFERENCE.md §6
Tokens de sessionRefreshTokenService, JwtBlacklistServiceSERVICES_REFERENCE.md §7
Personal Access TokensPersonalTokenService<S>, TokenScope, PersonalTokenCleanupProcessor<S>SERVICES_REFERENCE.md §7
TeamsTeamService, TeamSlug, TeamRoleSERVICES_REFERENCE.md §9
Ressources partageesResourceService, PrincipalSERVICES_REFERENCE.md §8
OAuth / SSOOAuthService, providers Google/GitHub/Discord/MicrosoftSERVICES_REFERENCE.md §14
EmailEmailService, EmailValidationService, templates AskamaSERVICES_REFERENCE.md §12
Rate limitingRateLimitService (sliding window generique)SERVICES_REFERENCE.md §15
Notifications temps-reel (SSE)NotificationBus, InMemoryBus, sse_responseSERVICES_REFERENCE.md §16
Hooks lifecycleRustwardenHooks (on_user_, on_team_, on_totp_, on_resource_, on_audit_event)SERVICES_REFERENCE.md §17, DEVELOPER.md §12

Le main.rs genere contient un bloc commente listant les primitives optionnelles a activer (PAT cleanup, hooks, SSE). Voir DEVELOPER.md du projet genere pour les exemples concrets d'integration.

cargo run --bin change_password -- admin "ChangeMe123!" 2>&1 | tail -5 cargo run --bin migrate 2>&1 | tail -10

  • ralph | Password: happydays123
    • joanie | Password: happydays123

cargo run --bin change_password -- admin "ChangeMe123!" cargo run --bin change_password -- joanie "happydays123" cargo run --bin change_password -- richie "happydays123"

Commande start-project

Le wizard pose une serie de questions pour configurer le projet, puis genere un dossier complet pret a l'emploi.

Questions posees

EtapeQuestionExemple
1Nom du projet (nom technique, sans espaces)mon-app
2Nom affiche dans l'interface (APP_NAME)Mon Application
3DescriptionApplication de gestion propulsee par Rustwarden
4Dossier cible/home/user/projects
5Mode (interface web ou API seule)Interface web
6Migrations automatiques au demarrageOui
7Port du serveur3000
8Nom de la base de donneesmon_app
9Utilisateur PostgreSQLmon_app_user
10Mot de passe PostgreSQL(genere aleatoirement)
11Username adminadmin
12Email adminadmin@localhost
13Mot de passe admin(genere aleatoirement)
14Configurer SMTP ? (optionnel)Non
15Activer OAuth / SSO ? (optionnel)Non

Si SMTP est active, le wizard demande egalement :

  • Hote, port, identifiants SMTP
  • Adresse et nom d'expediteur
  • TLS / STARTTLS

Si OAuth est active :

  • URL de base pour les callbacks
  • Configuration par provider (Google, GitHub, Discord, Microsoft)

Structure generee

mon-app/
├── Cargo.toml              # Workspace autonome
├── src/
│   └── main.rs             # Point d'entree avec routes personnalisees
├── crates/
│   ├── rustwarden-core/    # Framework d'authentification (copie locale)
│   └── rustwarden-ui/      # Interface web (copie locale, si mode UI)
├── locales/                # Fichiers de traduction (fr, en, de, es)
├── static/                 # Fichiers statiques (CSS, JS, images)
├── database/
│   ├── docker-compose.yml  # PostgreSQL avec Docker
│   └── .env                # Identifiants DB pour Docker
├── .env                    # Configuration complete de l'application
├── .env.example            # Reference de toutes les variables d'environnement
├── .rustwarden-version     # Version du framework (pour update-project)
├── README.md               # Guide de demarrage rapide
└── DEVELOPER.md            # Guide complet pour ajouter de la logique metier

Fichiers generes automatiquement

FichierContenu
Cargo.tomlWorkspace avec les crates locales
src/main.rsBuilder Rustwarden configure + route exemple /api/hello
.envVariables d'environnement remplies avec les reponses du wizard
.env.exampleReference avec toutes les variables et valeurs d'exemple
database/.envCredentials PostgreSQL pour Docker Compose
.rustwarden-versionHash git + date du framework au moment de la generation
README.mdDemarrage rapide, routes, commandes
DEVELOPER.mdArchitecture, ajout de routes/modeles, hooks, i18n, configuration

Traitement post-copie

Apres la copie des crates et des ressources, le wizard effectue automatiquement :

  1. Rebrand des templates : remplacement de toute occurrence de "RustWarden" dans les fichiers HTML par le nom d'application choisi
  2. Page d'accueil personnalisee : remplacement de home.html par une page hero section avec le nom de l'application
  3. Configuration APP_NAME : injection du nom dans le .env pour que l'UI et les emails utilisent le bon branding

Demarrage du projet genere

cd mon-app

# 1. PostgreSQL n'ecoute que 127.0.0.1:5432. Copier env.sample vers .env
#    et definir POSTGRES_PASSWORD (obligatoire, pas de mot de passe par defaut).
cp database/env.sample database/.env
cd database && docker compose up -d && cd ..

# 2. Lancer l'application
cargo run

# 3. Ouvrir http://localhost:3000

L'admin initial est deja configure avec les identifiants fournis pendant le wizard.

Commande update-project

Met a jour les crates du framework (rustwarden-core, rustwarden-ui) et les ressources partagees (locales, static, database) dans un projet existant, sans toucher aux fichiers specifiques du projet.

cargo run -p rustwarden-cli -- update-project

Fonctionnement

  1. Detection : demande le chemin du projet et verifie qu'il s'agit bien d'un projet Rustwarden
  2. Versions : affiche la version actuelle (depuis .rustwarden-version) et la nouvelle (git hash du framework)
  3. Detection des templates personnalises : compare les templates HTML du projet avec ceux du framework pour identifier les modifications
  4. Plan de mise a jour : affiche ce qui sera mis a jour et ce qui sera preserve
  5. Confirmation : demande validation avant de proceder
  6. Backup : cree un dossier .rustwarden-backup-YYYYMMDD_HHMMSS/ avec une copie complete des fichiers qui vont etre remplaces
  7. Mise a jour : remplace les crates et ressources par les versions du framework source
  8. Version : met a jour .rustwarden-version

Fichiers mis a jour

ElementAction
crates/rustwarden-core/Supprime et recopie depuis le framework
crates/rustwarden-ui/Supprime et recopie (si present dans le projet)
locales/Remplace
static/Remplace (si le projet a une UI)
database/Remplace en preservant database/.env
docs/SERVICES_REFERENCE.mdEcrase depuis le framework (source de verite API)
docs/MIGRATION_GUIDE.mdEcrase depuis le framework (breaking + actions consommateur)
docs/fediverse-consumer-guide.mdEcrase si le projet a la federation

Fichiers jamais touches

FichierRaison
Cargo.tomlConfiguration workspace du projet
src/main.rsLogique metier du projet
.envCredentials et configuration specifiques
.env.examplePeut avoir ete personnalise
database/.envCredentials PostgreSQL du projet
README.mdDocumentation specifique au projet
DEVELOPER.mdGuide personnalise

Apres la mise a jour

Le CLI affiche les etapes a suivre :

# 1. Verifier la compilation
cargo check

# 2. Corriger les eventuels breaking changes
cargo clippy -- -D warnings

# 3. Verifier les migrations
cargo run --bin migrate

# 4. Lire les notes consommateur (dont Security 1.0.1)
#    docs/MIGRATION_GUIDE.md puis docs/SERVICES_REFERENCE.md (bandeau)

# 5. Lancer les tests
cargo test

Si des templates personnalises ont ete ecrases, ils sont recuperables dans le dossier de backup.

Architecture du CLI

tools/rustwarden-cli/
├── Cargo.toml            # Dependencies : clap, dialoguer, console, rand, chrono
└── src/
    ├── main.rs           # Point d'entree, parsing des sous-commandes
    ├── start_project.rs  # Wizard de creation (questions, copie, generation)
    ├── update_project.rs # Logique de mise a jour (backup, remplacement, detection)
    ├── templates.rs      # Templates des fichiers generes (Cargo.toml, main.rs, .env, etc.)
    └── version.rs        # Gestion du fichier .rustwarden-version (lecture, ecriture, calcul)

Dependencies

CrateRole
clapParsing des arguments et sous-commandes
dialoguerPrompts interactifs (Input, Select, Confirm)
consoleStyles et couleurs dans le terminal
randGeneration de mots de passe et secrets JWT aleatoires
chronoTimestamp pour les noms de dossiers de backup

Etendre le CLI

Pour ajouter une nouvelle sous-commande, ajoutez une variante dans l'enum Commands de main.rs :

#[derive(Subcommand)]
enum Commands {
    /// Creer un nouveau projet applicatif Rustwarden
    StartProject,
    /// Mettre a jour les crates du framework dans un projet existant
    UpdateProject,
    /// Votre nouvelle commande
    MaCommande,
}

Puis implementez la logique dans un nouveau module.