Contribuisci a Rustwarden¶
Questo documento descrive le interazioni tra gitrust e il framework Rustwarden-core e spiega come estendere il framework dal lato gitrust senza modificarne le fonti.
Servizi quadro utilizzati¶
| 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" implementato¶
L'hook on_user_deleted in gitrust-hooks elimina la directory dell'utente sul filesystem (repos_base_path/username/) prima della cascata del DB. Chiamato automaticamente da UserService::delete_user.
Regola fondamentale¶
Non modificare mai crates/rustwarden-core/. Questo crate è il framework condiviso. Qualsiasi estensione passa attraverso:
- wrapper sul lato
gitrust-core(servizi che delegano al framework) - Tratti impliciti (
RustwardenHooksingitrust-hooks) - Estensioni tramite meccanismi di iniezione Axum ("Estensione", "Stato")
Nessun bypass in corso¶
Tutte le vecchie soluzioni alternative (entità dirette, hash manuali) sono state sostituite dai servizi framework in seguito all'aggiornamento del 26-03-2026.
Aggiungi una funzionalità che richiede un servizio framework mancante¶
Se un servizio necessario non esiste in Rustwarden-Core:
- Implementa il servizio sul lato
gitrust-coreriutilizzando le primitive del framework (ad esempio:PasswordService::hash_passwordper l'hashing) - Se la funzionalità è generica e andrebbe a vantaggio del framework stesso, aprire un problema o un PR upstream sul repository Rustwarden-core
- Non duplicare l'autenticazione, la sessione o la logica JWT: queste aree appartengono esclusivamente al framework
Modello di estensione tramite ganci¶
Gli hook (gitrust-hooks/src/lib.rs) implementano RustwardenHooks e vengono inseriti nel router Axum all'avvio:
// 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
Per reagire a un nuovo evento del framework, aggiungi il metodo corrispondente nell'impl RustwardenHooks di gitrust-hooks, senza toccare il codice del framework che emette l'evento.