Contribuir a Rustwarden¶
Este documento describe las interacciones entre gitrust y el marco Rustwarden-core, y explica cómo extender el marco en el lado de gitrust sin modificar sus fuentes.
Servicios marco utilizados¶
| 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 |
Gancho on_user_deleted implementado¶
El gancho on_user_deleted en gitrust-hooks elimina el directorio de usuario en el sistema de archivos (repos_base_path/username/) antes de la cascada de base de datos. Llamado automáticamente por UserService::delete_user.
Regla fundamental¶
Nunca modifique crates/rustwarden-core/. Esta caja es el marco compartido. Cualquier extensión pasa por:
- contenedores en el lado
gitrust-core(servicios que se delegan al marco) - Implifica rasgos (
RustwardenHooksengitrust-hooks) - Extensiones mediante mecanismos de inyección de Axum (
Extensión,Estado)
No hay derivación en progreso¶
Todas las soluciones alternativas antiguas (entidades directas, hashes manuales) han sido reemplazadas por servicios de marco después de la actualización del 26 de marzo de 2026.
Agregue una característica que requiera un servicio de marco faltante¶
Si no existe un servicio necesario en Rustwarden-core:
- Implemente el servicio en el lado
gitrust-corereutilizando las primitivas del marco (por ejemplo:PasswordService::hash_passwordpara hash) - Si la funcionalidad es genérica y beneficiaría al marco en sí, abra un problema o un PR ascendente en el repositorio de Rustwarden-core.
- No duplique la lógica de autenticación, sesión o JWT: estas áreas pertenecen exclusivamente al marco
Patrón de extensión mediante ganchos.¶
Los ganchos (gitrust-hooks/src/lib.rs) implementan RustwardenHooks y se inyectan en el enrutador Axum al iniciar:
// 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
Para reaccionar a un nuevo evento del marco, agregue el método correspondiente en la impl RustwardenHooks de gitrust-hooks, sin tocar el código del marco que emite el evento.