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:
- Implementieren Sie den Dienst auf der „Gitrust-Core“-Seite, indem Sie die Framework-Grundelemente wiederverwenden (z. B. „PasswordService::hash_password“ für Hashing).
- 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
- 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.