news_flash/models/
login_data.rs1use crate::models::PluginID;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Serialize, Deserialize)]
5pub enum LoginData {
6 Direct(DirectLogin),
7 OAuth(OAuthData),
8 None(PluginID),
9}
10
11impl LoginData {
12 pub fn id(&self) -> PluginID {
13 match self {
14 Self::OAuth(data) => data.id.clone(),
15 Self::Direct(direct) => direct.id(),
16 Self::None(id) => id.clone(),
17 }
18 }
19}
20
21#[derive(Clone, Debug, Serialize, Deserialize)]
22pub enum DirectLogin {
23 Password(PasswordLogin),
24 Token(TokenLogin),
25}
26
27impl DirectLogin {
28 pub fn id(&self) -> PluginID {
29 match self {
30 Self::Password(data) => data.id.clone(),
31 Self::Token(data) => data.id.clone(),
32 }
33 }
34}
35
36#[derive(Clone, Debug, Serialize, Deserialize)]
37pub struct TokenLogin {
38 pub id: PluginID,
39 #[serde(default)]
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub url: Option<String>,
42 pub token: String,
43 #[serde(default)]
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub basic_auth: Option<BasicAuth>,
46}
47
48#[derive(Clone, Debug, Serialize, Deserialize)]
49pub struct OAuthData {
50 pub id: PluginID,
51 pub url: String,
52 pub custom_api_secret: Option<ApiSecret>,
53}
54
55#[derive(Clone, Debug, Serialize, Deserialize)]
56pub struct ApiSecret {
57 pub client_id: String,
58 pub client_secret: String,
59}
60
61#[derive(Clone, Debug, Serialize, Deserialize)]
62pub struct PasswordLogin {
63 pub id: PluginID,
64 #[serde(default)]
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub url: Option<String>,
67 pub user: String,
68 pub password: String,
69 #[serde(default)]
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub basic_auth: Option<BasicAuth>,
72}
73
74#[derive(Clone, Debug, Serialize, Deserialize)]
75pub struct BasicAuth {
76 pub user: String,
77 #[serde(default)]
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub password: Option<String>,
80}