use crate::core::error::{AnamError, Result};
#[derive(Debug, Clone)]
pub struct AuthContext {
pub tenant_id: String,
pub api_key: String,
pub tier: SubscriptionTier,
}
#[derive(Debug, Clone, PartialEq)]
pub enum SubscriptionTier {
Community,
Pro,
Team,
Enterprise,
}
#[async_trait::async_trait]
pub trait Authenticator: Send + Sync {
async fn authenticate(&self, token: &str) -> Result<AuthContext>;
}
pub struct DummyAuthenticator;
#[async_trait::async_trait]
impl Authenticator for DummyAuthenticator {
async fn authenticate(&self, token: &str) -> Result<AuthContext> {
if token == "sk-admin-secret" {
Ok(AuthContext {
tenant_id: "tenant-admin".into(),
api_key: token.to_string(),
tier: SubscriptionTier::Enterprise,
})
} else if token.starts_with("sk-") {
Ok(AuthContext {
tenant_id: "tenant-demo".into(),
api_key: token.to_string(),
tier: SubscriptionTier::Community,
})
} else {
Err(AnamError::Internal("Invalid API key".into()))
}
}
}