Skip to main content

secrets_core/
auth.rs

1use async_trait::async_trait;
2use thiserror::Error;
3
4use crate::storage::StorageBackend;
5
6#[derive(Debug, Error)]
7pub enum AuthError {
8    #[error("invalid credentials")]
9    InvalidCredentials,
10    #[error("invalid request: {0}")]
11    InvalidRequest(String),
12    #[error("storage error: {0}")]
13    Storage(#[from] crate::storage::StorageError),
14    #[error("auth error: {0}")]
15    Other(String),
16}
17
18pub type AuthResult<T> = Result<T, AuthError>;
19
20pub enum LoginRequest {
21    UserPass { username: String, password: String },
22    OidcAuthCodeCallback { code: String, state: String },
23    OidcBearerJwt { jwt: String },
24}
25
26pub struct AuthOutcome {
27    pub policies: Vec<String>,
28    pub display_name: String,
29    pub ttl_seconds: Option<i64>,
30}
31
32#[async_trait]
33pub trait AuthMethod: Send + Sync {
34    async fn login(
35        &self,
36        storage: &dyn StorageBackend,
37        request: LoginRequest,
38    ) -> AuthResult<AuthOutcome>;
39}