use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SignIn {
Email,
Code,
Oidc,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Role {
Admin,
Member,
Viewer,
}
impl Role {
pub fn as_str(self) -> &'static str {
match self {
Role::Admin => "admin",
Role::Member => "member",
Role::Viewer => "viewer",
}
}
fn rank(self) -> u8 {
match self {
Role::Admin => 2,
Role::Member => 1,
Role::Viewer => 0,
}
}
pub fn at_least(self, other: Role) -> bool {
self.rank() >= other.rank()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Via {
Session,
AdminToken,
Token,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Member {
pub email: String,
pub role: Role,
pub fixed: bool,
pub created: String,
pub last_seen: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Invite {
pub email: String,
pub role: Role,
pub created_by: String,
pub expires: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AccessToken {
pub id: String,
pub name: String,
pub created: String,
pub last_used: Option<String>,
pub expires: Option<String>,
pub expired: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditEntry {
pub at: String,
pub actor: String,
pub action: String,
pub detail: String,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct AuditQuery {
pub limit: Option<usize>,
pub before: Option<String>,
pub actor: Option<String>,
pub action: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AuditPage {
pub entries: Vec<AuditEntry>,
pub next: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SecretInfo {
pub name: String,
pub source: String,
pub hint: Option<String>,
pub updated: Option<String>,
pub updated_by: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceRequest {
pub client: String,
pub expires: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DevicePoll {
Pending,
Approved {
token: String,
email: String,
expires: Option<String>,
},
Denied,
Expired,
}
pub const TOKEN_DAYS: u32 = 90;