cloudreve_api/api/v4/models/
auth.rs

1//! Authentication and user-related models for Cloudreve API v4
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// User information
7#[derive(Debug, Serialize, Deserialize, Clone)]
8pub struct User {
9    pub id: String,
10    pub email: String,
11    pub nickname: String,
12    #[serde(default)]
13    pub status: Option<String>,
14    #[serde(default)]
15    pub avatar: Option<String>,
16    pub created_at: String,
17    #[serde(default)]
18    pub group: Option<UserGroup>,
19}
20
21/// User group information
22#[derive(Debug, Serialize, Deserialize, Clone)]
23pub struct UserGroup {
24    pub id: String,
25    pub name: String,
26    #[serde(default)]
27    pub permission: Option<String>,
28    #[serde(default)]
29    pub direct_link_batch_size: Option<u64>,
30    #[serde(default)]
31    pub trash_retention: Option<u64>,
32}
33
34/// JWT token information
35#[derive(Debug, Serialize, Deserialize, Clone)]
36pub struct Token {
37    pub access_token: String,
38    pub refresh_token: String,
39    pub access_expires: String,
40    pub refresh_expires: String,
41}
42
43/// Login response containing user and token
44#[derive(Debug, Serialize, Deserialize)]
45pub struct LoginData {
46    pub user: User,
47    pub token: Token,
48}
49
50/// Extended user information
51#[derive(Debug, Serialize, Deserialize, Clone)]
52pub struct NewUser {
53    pub id: String,
54    pub email: Option<String>,
55    pub nickname: Option<String>,
56    pub created_at: String,
57    #[serde(default)]
58    pub anonymous: Option<bool>,
59    #[serde(default)]
60    pub group: Option<NewGroup>,
61    #[serde(default)]
62    pub status: Option<UserStatus>,
63    #[serde(default)]
64    pub avatar: Option<AvatarType>,
65    #[serde(default)]
66    pub preferred_theme: Option<String>,
67    #[serde(default)]
68    pub credit: Option<i64>,
69    #[serde(default)]
70    pub language: Option<String>,
71    #[serde(default)]
72    pub disable_view_sync: Option<String>,
73    #[serde(default)]
74    pub share_links_in_profile: Option<ShareLinkVisibility>,
75}
76
77/// Extended group information
78#[derive(Debug, Serialize, Deserialize, Clone, Default)]
79#[serde(default)]
80pub struct NewGroup {
81    #[serde(default)]
82    pub id: String,
83    #[serde(default)]
84    pub name: String,
85    #[serde(default)]
86    pub permission: String,
87    #[serde(default)]
88    pub direct_link_batch_size: Option<i64>,
89    #[serde(default)]
90    pub trash_retention: Option<i64>,
91}
92
93/// User status enum
94#[derive(Debug, Serialize, Deserialize, Clone)]
95pub enum UserStatus {
96    #[serde(rename = "active")]
97    Active,
98    #[serde(rename = "inactive")]
99    Inactive,
100    #[serde(rename = "manual_banned")]
101    ManualBanned,
102    #[serde(rename = "sys_banned")]
103    SysBanned,
104}
105
106/// Avatar type enum
107#[derive(Debug, Serialize, Deserialize, Clone)]
108pub enum AvatarType {
109    #[serde(rename = "file")]
110    File,
111    #[serde(rename = "gravatar")]
112    Gravatar,
113}
114
115/// Share link visibility enum
116#[derive(Debug, Serialize, Deserialize, Clone)]
117pub enum ShareLinkVisibility {
118    #[serde(rename = "")]
119    Empty,
120    #[serde(rename = "all_share")]
121    AllShare,
122    #[serde(rename = "hide_share")]
123    HideShare,
124}
125
126/// Login request
127#[derive(Debug, Serialize)]
128pub struct LoginRequest<'a> {
129    pub email: &'a str,
130    pub password: &'a str,
131}
132
133/// Two-factor login request
134#[derive(Debug, Serialize)]
135pub struct TwoFactorLoginRequest<'a> {
136    pub email: &'a str,
137    pub password: &'a str,
138    pub code: &'a str,
139    pub ticket: Option<&'a str>,
140}
141
142/// Token refresh request
143#[derive(Debug, Serialize)]
144pub struct RefreshTokenRequest<'a> {
145    pub refresh_token: &'a str,
146}
147
148/// Two-factor setup response
149#[derive(Debug, Serialize, Deserialize)]
150pub struct TwoFactorSetup {
151    pub secret: String,
152    pub qr_code: String,
153    pub recovery_codes: Vec<String>,
154}
155
156/// Two-factor verification request
157#[derive(Debug, Serialize, Deserialize)]
158pub struct TwoFactorVerify {
159    pub code: String,
160}
161
162/// CAPTCHA response
163#[derive(Debug, Deserialize)]
164pub struct CaptchaResponse {
165    pub image: String,
166    pub ticket: String,
167}
168
169/// Login preparation data
170#[derive(Debug, Deserialize)]
171pub struct LoginPreparation {
172    #[serde(default)]
173    pub webauthn_enabled: bool,
174    #[serde(default)]
175    pub sso_enabled: Option<bool>,
176    #[serde(default)]
177    pub password_enabled: bool,
178    #[serde(default)]
179    pub qq_enabled: Option<bool>,
180}
181
182/// OpenID preparation request
183#[derive(Debug, Serialize)]
184pub struct OpenIdPrepareRequest<'a> {
185    pub hint: Option<&'a str>,
186    pub linking: Option<bool>,
187    pub provider: i32,
188}
189
190/// OpenID finish request
191#[derive(Debug, Serialize)]
192pub struct OpenIdFinishRequest<'a> {
193    pub code: &'a str,
194    pub session_id: &'a str,
195    pub provider_id: i32,
196}
197
198/// Passkey sign-in preparation
199#[derive(Debug, Deserialize)]
200pub struct PasskeySignInPreparation {
201    pub session_id: String,
202    pub options: Value,
203}
204
205/// Passkey sign-in request
206#[derive(Debug, Serialize)]
207pub struct PasskeySignInRequest<'a> {
208    pub response: &'a str,
209    pub session_id: &'a str,
210}
211
212/// Complete login response
213#[derive(Debug, Deserialize)]
214pub struct LoginResponse {
215    pub user: NewUser,
216    pub token: Token,
217}
218
219/// Register request
220#[derive(Debug, Serialize)]
221pub struct RegisterRequest<'a> {
222    pub username: &'a str,
223    pub password: &'a str,
224    pub email: Option<&'a str>,
225}