1use serde::{Deserialize, Serialize};
5
6pub use crate::server::{
7 AccessToken, AuditEntry, AuditPage, AuditQuery, DeviceRequest, Invite, Member, Role,
8 SecretInfo, SignIn,
9};
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(tag = "mode", rename_all = "lowercase")]
14pub enum Me {
15 Local,
16 Server {
17 signed_in: bool,
18 email: Option<String>,
19 role: Option<Role>,
20 sign_in: SignIn,
22 #[serde(default)]
23 sign_in_methods: Vec<SignIn>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 oidc_label: Option<String>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 oidc_brand: Option<String>,
30 public_url: String,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
33 gateway_url: Option<String>,
34 },
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct EmailRequest {
40 pub email: String,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct RedeemRequest {
46 pub token: String,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct CodeRequest {
52 pub email: String,
53 pub code: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct WithCode {
59 pub ok: bool,
60 pub message: String,
61 pub code: Option<String>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct MemberRole {
67 pub email: String,
68 pub role: Role,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct Invited {
74 pub ok: bool,
75 pub message: String,
76 #[serde(default, skip_serializing_if = "Option::is_none")]
77 pub code: Option<String>,
78}
79
80#[derive(Debug, Serialize, Deserialize)]
82pub struct Members {
83 pub members: Vec<Member>,
84 pub invites: Vec<Invite>,
85 pub sign_in: SignIn,
86 #[serde(default)]
87 pub sign_in_methods: Vec<SignIn>,
88}
89
90#[derive(Debug, Serialize, Deserialize)]
92pub struct Tokens {
93 pub tokens: Vec<AccessToken>,
94}
95
96fn default_token_days() -> Option<u32> {
97 Some(crate::server::TOKEN_DAYS)
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct NewToken {
103 pub name: String,
104 #[serde(default = "default_token_days")]
105 pub expires_in_days: Option<u32>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct TokenCreated {
111 pub ok: bool,
112 pub message: String,
113 pub token: String,
114}
115
116#[derive(Debug, Serialize, Deserialize)]
118pub struct Secrets {
119 pub secrets: Vec<SecretState>,
120 pub can_store: bool,
121}
122
123#[derive(Debug, Serialize, Deserialize)]
125#[serde(untagged)]
126pub enum SecretState {
127 Elsewhere(SecretSource),
128 Stored {
129 #[serde(flatten)]
130 info: SecretInfo,
131 label: String,
132 #[serde(default, skip_serializing_if = "std::ops::Not::not")]
134 replaces_deployment: bool,
135 },
136}
137
138#[derive(Debug, Serialize, Deserialize)]
140#[serde(deny_unknown_fields)]
141pub struct SecretSource {
142 pub source: String,
143 pub name: String,
144 pub label: String,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize)]
149pub struct SecretRequest {
150 pub name: String,
151 #[serde(default)]
152 pub value: String,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
157pub struct DeviceStartRequest {
158 pub client: String,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize)]
163pub struct DeviceStart {
164 pub device_code: String,
165 pub user_code: String,
166 pub verify_url: String,
167 pub interval: u64,
168 pub expires_in: u64,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct DeviceTokenRequest {
174 pub device_code: String,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
179#[serde(tag = "status", rename_all = "lowercase")]
180pub enum DeviceToken {
181 Pending,
182 Approved {
183 token: String,
184 email: String,
185 expires: Option<String>,
186 },
187}
188
189#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct DeviceCodeQuery {
192 pub code: String,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct DeviceApprove {
198 pub code: String,
199 pub approve: bool,
200}