use super::scopes::ScopeSet;
use crate::internal::domain::{LocalUserId, RequestId, SessionId};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum AuthContextSource {
LocalConfig,
RemoteOauth,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct LocalUser {
pub user_id: LocalUserId,
pub display_name: Option<String>,
pub allowed_scopes: ScopeSet,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct AuthContext {
pub source: AuthContextSource,
pub user_id: LocalUserId,
pub scopes: ScopeSet,
pub request_id: RequestId,
pub session_id: SessionId,
}
impl AuthContext {
#[must_use]
pub fn local(user: &LocalUser, request_id: RequestId, session_id: SessionId) -> Self {
Self {
source: AuthContextSource::LocalConfig,
user_id: user.user_id.clone(),
scopes: user.allowed_scopes.clone(),
request_id,
session_id,
}
}
}