Domain: User entity, AuthPort/PasswordHashPort/SecretStore ports. Adapters: auth (argon2 hashing, JWT tokens), secret-store (env-based), config-sqlite user repository, http-api auth routes + extractors. Application: auth_service. SPA: login page, auth client, protected router.
30 lines
703 B
Rust
30 lines
703 B
Rust
use crate::AppState;
|
|
use crate::extractors::AuthUser;
|
|
use api_types::ClientDto;
|
|
use axum::extract::State;
|
|
use axum::response::Json;
|
|
use domain::{ClientRegistry, ConfigRepository, EventPublisher};
|
|
|
|
type S<C, E, W, B, R, A, H> = State<AppState<C, E, W, B, R, A, H>>;
|
|
|
|
pub async fn list_clients<C, E, W, B, R, A, H>(
|
|
_auth: AuthUser,
|
|
State(state): S<C, E, W, B, R, A, H>,
|
|
) -> Json<Vec<ClientDto>>
|
|
where
|
|
C: ConfigRepository,
|
|
C::Error: std::fmt::Debug,
|
|
E: EventPublisher,
|
|
E::Error: std::fmt::Debug,
|
|
R: ClientRegistry,
|
|
{
|
|
Json(
|
|
state
|
|
.clients
|
|
.list_clients()
|
|
.iter()
|
|
.map(ClientDto::from)
|
|
.collect(),
|
|
)
|
|
}
|