#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, PartialEq)]
pub enum OAuthProvider {
Custom,
GitHub,
Google,
Keycloak,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AuthProvider {
None,
OAuth,
#[cfg(feature = "api-key")]
ApiKey,
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
#[cfg(feature = "api-key")]
pub struct GeneratedApiKey {
pub key: String,
pub key_id: String,
pub hash: String,
}
#[derive(Debug, Clone)]
pub struct AuthContext {
pub provider: AuthProvider,
pub user_id: Option<String>,
pub user_email: Option<String>,
#[cfg(feature = "api-key")]
pub api_key_id: Option<String>,
}
impl AuthContext {
#[must_use]
pub fn new(provider: AuthProvider) -> Self {
Self {
provider,
user_id: None,
user_email: None,
#[cfg(feature = "api-key")]
api_key_id: None,
}
}
#[must_use]
pub fn is_authenticated(&self) -> bool {
!matches!(self.provider, AuthProvider::None)
}
}