Tragen Sie zu Rustwarden bei

Dieses Dokument beschreibt die Interaktionen zwischen Gitrust und dem Rustwarden-Core-Framework und erklärt, wie das Framework auf der Gitrust-Seite erweitert werden kann, ohne seine Quellen zu ändern.

Verwendete Framework-Dienste

Service Usage dans gitrust
UserService CRUD users, roles, delete_user, admin_reset_password, change_password_direct, unassign_role_from_user
RoleService Liste/création/suppression roles, get_role_by_name
PasswordService hash_password (async), verify_password (async), generate_secure_password
ResourceService register/unregister repos, set_public, effective_permission, find_by_type_and_id
AuthService authenticate_user (login)
JwtService generate_token (login)
EmailValidationService Vérification email
PasswordResetService Flux "mot de passe oublié"
AppSettingsService get_bool pour registration_enabled

Hook „on_user_deleted“ implementiert

Der Hook „on_user_deleted“ in „gitrust-hooks“ löscht das Benutzerverzeichnis im Dateisystem („repos_base_path/username/“) vor der DB-Kaskade. Wird automatisch von „UserService::delete_user“ aufgerufen.

Grundregel

Ändern Sie niemals „crates/rustwarden-core/“. Diese Kiste ist das gemeinsame Framework. Jede Erweiterung durchläuft:

  • Wrapper auf der „Gitrust-Core“-Seite (Dienste, die an das Framework delegieren)
  • Impls-Eigenschaften („RustwardenHooks“ in „gitrust-hooks“)
  • Erweiterungen über Axum-Injektionsmechanismen („Extension“, „State“)

Es wird kein Bypass ausgeführt

Alle alten Problemumgehungen (direkte Entitäten, manuelle Hashes) wurden nach dem Update vom 26.03.2026 durch Framework-Dienste ersetzt.

Fügen Sie eine Funktion hinzu, die einen fehlenden Framework-Dienst erfordert

Wenn ein notwendiger Dienst in rustwarden-core nicht vorhanden ist:

  1. Implementieren Sie den Dienst auf der „Gitrust-Core“-Seite, indem Sie die Framework-Grundelemente wiederverwenden (z. B. „PasswordService::hash_password“ für Hashing).
  2. Wenn die Funktionalität generisch ist und dem Framework selbst zugute kommen würde, öffnen Sie ein Issue oder eine Upstream-PR im Rustwarden-Core-Repository
  3. Duplizieren Sie keine Authentifizierungs-, Sitzungs- oder JWT-Logik – diese Bereiche gehören ausschließlich zum Framework

Verlängerungsmuster über Haken

Die Hooks („gitrust-hooks/src/lib.rs“) implementieren „RustwardenHooks“ und werden beim Start in den Axum-Router eingefügt:

// Dans main.rs
let hooks = Arc::new(GitrustHooks::new(config.clone()));
// Passé via .merge_routes(app_routes(hooks))
// Puis disponible via axum::Extension dans les handlers

Um auf ein neues Framework-Ereignis zu reagieren, fügen Sie die entsprechende Methode in der „RustwardenHooks“-Impl von „gitrust-hooks“ hinzu, ohne den Framework-Code zu berühren, der das Ereignis ausgibt.