#[cfg(feature = "dev")]
use security_core::types::{ActorId, TenantId};
#[cfg(feature = "dev")]
use crate::authenticator::{private, AuthenticationRequest};
#[cfg(feature = "dev")]
use crate::error::IdentityError;
#[cfg(feature = "dev")]
pub struct DevAuthenticator {
pub actor_id: ActorId,
pub tenant_id: Option<TenantId>,
pub roles: Vec<String>,
}
#[cfg(feature = "dev")]
impl DevAuthenticator {
pub fn new(actor_id: ActorId, tenant_id: Option<TenantId>, roles: Vec<String>) -> Self {
tracing::warn!("DevAuthenticator in use — not for production");
Self {
actor_id,
tenant_id,
roles,
}
}
}
#[cfg(feature = "dev")]
impl private::Sealed for DevAuthenticator {}
#[cfg(feature = "dev")]
impl crate::authenticator::Authenticator for DevAuthenticator {
async fn authenticate(
&self,
_request: &AuthenticationRequest,
) -> Result<security_core::identity::AuthenticatedIdentity, IdentityError> {
use std::collections::HashMap;
use time::OffsetDateTime;
Ok(security_core::identity::AuthenticatedIdentity {
actor_id: self.actor_id.clone(),
tenant_id: self.tenant_id.clone(),
roles: self.roles.clone(),
attributes: HashMap::new(),
authenticated_at: OffsetDateTime::now_utc(),
})
}
}