use serde::{Deserialize, Serialize};
pub use crate::server::{
AccessToken, AuditEntry, AuditPage, AuditQuery, DeviceRequest, Invite, Member, Role,
SecretInfo, SignIn,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "mode", rename_all = "lowercase")]
pub enum Me {
Local,
Server {
signed_in: bool,
email: Option<String>,
role: Option<Role>,
sign_in: SignIn,
#[serde(default)]
sign_in_methods: Vec<SignIn>,
#[serde(default, skip_serializing_if = "Option::is_none")]
oidc_label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
oidc_brand: Option<String>,
public_url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
gateway_url: Option<String>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmailRequest {
pub email: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RedeemRequest {
pub token: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodeRequest {
pub email: String,
pub code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WithCode {
pub ok: bool,
pub message: String,
pub code: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemberRole {
pub email: String,
pub role: Role,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Invited {
pub ok: bool,
pub message: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Members {
pub members: Vec<Member>,
pub invites: Vec<Invite>,
pub sign_in: SignIn,
#[serde(default)]
pub sign_in_methods: Vec<SignIn>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Tokens {
pub tokens: Vec<AccessToken>,
}
fn default_token_days() -> Option<u32> {
Some(crate::server::TOKEN_DAYS)
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NewToken {
pub name: String,
#[serde(default = "default_token_days")]
pub expires_in_days: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenCreated {
pub ok: bool,
pub message: String,
pub token: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Secrets {
pub secrets: Vec<SecretState>,
pub can_store: bool,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SecretState {
Elsewhere(SecretSource),
Stored {
#[serde(flatten)]
info: SecretInfo,
label: String,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
replaces_deployment: bool,
},
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SecretSource {
pub source: String,
pub name: String,
pub label: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecretRequest {
pub name: String,
#[serde(default)]
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceStartRequest {
pub client: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceStart {
pub device_code: String,
pub user_code: String,
pub verify_url: String,
pub interval: u64,
pub expires_in: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceTokenRequest {
pub device_code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "status", rename_all = "lowercase")]
pub enum DeviceToken {
Pending,
Approved {
token: String,
email: String,
expires: Option<String>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceCodeQuery {
pub code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceApprove {
pub code: String,
pub approve: bool,
}