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 (RustwardenHooks en gitrust-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:

  1. Implemente el servicio en el lado gitrust-core reutilizando las primitivas del marco (por ejemplo: PasswordService::hash_password para hash)
  2. 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.
  3. 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.