Contribua para o Rustwarden¶
Este documento descreve as interações entre o gitrust e a estrutura rustwarden-core e explica como estender a estrutura no lado do gitrust sem modificar suas fontes.
Serviços de estrutura usados¶
| 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¶
O gancho on_user_deleted em gitrust-hooks exclui o diretório do usuário no sistema de arquivos (repos_base_path/username/) antes da cascata do banco de dados. Chamado automaticamente por UserService::delete_user.
Regra fundamental¶
Nunca modifique crates/rustwarden-core/. Esta caixa é a estrutura compartilhada. Qualquer extensão passa por:
- wrappers no lado
gitrust-core(serviços que delegam ao framework) - Impls traits (
RustwardenHooksemgitrust-hooks) - Extensões via mecanismos de injeção Axum (
Extension,State)
Nenhum desvio em andamento¶
Todas as soluções alternativas antigas (entidades diretas, hashes manuais) foram substituídas por serviços de estrutura após a atualização de 26/03/2026.
Adicionar um recurso que exige um serviço de estrutura ausente¶
Se um serviço necessário não existir no Rustwarden-core:
- Implemente o serviço no lado
gitrust-corereutilizando as primitivas da estrutura (ex:PasswordService::hash_passwordpara hashing) - Se a funcionalidade for genérica e beneficiar a própria estrutura, abra um problema ou um PR upstream no repositório Rustwarden-core
- Não duplique a lógica de autenticação, sessão ou JWT — essas áreas pertencem exclusivamente à estrutura
Padrão de extensão via ganchos¶
Os ganchos (gitrust-hooks/src/lib.rs) implementam RustwardenHooks e são injetados no roteador Axum na inicialização:
// 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 reagir a um novo evento do framework, adicione o método correspondente no impl RustwardenHooks de gitrust-hooks, sem tocar no código do framework que emite o evento.