use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct User {
pub id: String,
pub email: String,
pub nickname: String,
#[serde(default)]
pub status: Option<String>,
#[serde(default)]
pub avatar: Option<String>,
pub created_at: String,
#[serde(default)]
pub group: Option<UserGroup>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct UserGroup {
pub id: String,
pub name: String,
#[serde(default)]
pub permission: Option<String>,
#[serde(default)]
pub direct_link_batch_size: Option<u64>,
#[serde(default)]
pub trash_retention: Option<u64>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Token {
pub access_token: String,
pub refresh_token: String,
pub access_expires: String,
pub refresh_expires: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LoginData {
pub user: User,
pub token: Token,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct NewUser {
pub id: String,
pub email: Option<String>,
pub nickname: Option<String>,
pub created_at: String,
#[serde(default)]
pub anonymous: Option<bool>,
#[serde(default)]
pub group: Option<NewGroup>,
#[serde(default)]
pub status: Option<UserStatus>,
#[serde(default)]
pub avatar: Option<AvatarType>,
#[serde(default)]
pub preferred_theme: Option<String>,
#[serde(default)]
pub credit: Option<i64>,
#[serde(default)]
pub language: Option<String>,
#[serde(default)]
pub disable_view_sync: Option<String>,
#[serde(default)]
pub share_links_in_profile: Option<ShareLinkVisibility>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(default)]
pub struct NewGroup {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub permission: String,
#[serde(default)]
pub direct_link_batch_size: Option<i64>,
#[serde(default)]
pub trash_retention: Option<i64>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum UserStatus {
#[serde(rename = "active")]
Active,
#[serde(rename = "inactive")]
Inactive,
#[serde(rename = "manual_banned")]
ManualBanned,
#[serde(rename = "sys_banned")]
SysBanned,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum AvatarType {
#[serde(rename = "file")]
File,
#[serde(rename = "gravatar")]
Gravatar,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum ShareLinkVisibility {
#[serde(rename = "")]
Empty,
#[serde(rename = "all_share")]
AllShare,
#[serde(rename = "hide_share")]
HideShare,
}
#[derive(Debug, Serialize)]
pub struct LoginRequest<'a> {
pub email: &'a str,
pub password: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ticket: Option<&'a str>,
}
#[derive(Debug, Serialize)]
pub struct TwoFactorLoginRequest<'a> {
pub otp: &'a str,
pub session_id: &'a str,
}
#[derive(Debug, Serialize)]
pub struct RefreshTokenRequest<'a> {
pub refresh_token: &'a str,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TwoFactorSetup {
pub secret: String,
pub qr_code: String,
pub recovery_codes: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TwoFactorVerify {
pub code: String,
}
#[derive(Debug, Deserialize)]
pub struct CaptchaResponse {
pub image: String,
pub ticket: String,
}
#[derive(Debug, Deserialize)]
pub struct LoginPreparation {
#[serde(default)]
pub webauthn_enabled: bool,
#[serde(default)]
pub sso_enabled: Option<bool>,
#[serde(default)]
pub password_enabled: bool,
#[serde(default)]
pub qq_enabled: Option<bool>,
}
#[derive(Debug, Serialize)]
pub struct OpenIdPrepareRequest<'a> {
pub hint: Option<&'a str>,
pub linking: Option<bool>,
pub provider: i32,
}
#[derive(Debug, Serialize)]
pub struct OpenIdFinishRequest<'a> {
pub code: &'a str,
pub session_id: &'a str,
pub provider_id: i32,
}
#[derive(Debug, Deserialize)]
pub struct PasskeySignInPreparation {
pub session_id: String,
pub options: Value,
}
#[derive(Debug, Serialize)]
pub struct PasskeySignInRequest<'a> {
pub response: &'a str,
pub session_id: &'a str,
}
#[derive(Debug, Deserialize)]
pub struct LoginResponse {
pub user: NewUser,
pub token: Token,
}
#[derive(Debug, Serialize)]
pub struct RegisterRequest<'a> {
pub username: &'a str,
pub password: &'a str,
pub email: Option<&'a str>,
}