use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::DataTenantId;
use crate::auth::{AbsoluteUrl, PrincipalId, PrincipalKindTag, SecretBearer};
use crate::ids::TenantSlug;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserLoginRequest {
pub tenant: TenantSlug,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserLoginResponse {
pub authorization_url: AbsoluteUrl,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserApiKeyRequest {
pub tenant: TenantSlug,
#[schemars(with = "String")]
pub api_key: SecretBearer,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::IntoParams))]
#[cfg_attr(feature = "server", into_params(parameter_in = Query))]
#[serde(deny_unknown_fields)]
pub struct BrowserSessionQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tenant: Option<TenantSlug>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserLogoutRequest {
pub tenant: TenantSlug,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum BrowserCredential {
Sso,
ApiKey,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserSessionView {
pub tenant: TenantSlug,
pub tenant_id: DataTenantId,
pub tenant_name: String,
pub principal_id: PrincipalId,
pub principal_kind: PrincipalKindTag,
pub credential: BrowserCredential,
pub permissions: Vec<String>,
pub expires_at: DateTime<Utc>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct BrowserSessionsResponse {
pub sessions: Vec<BrowserSessionView>,
}