Skip to main content

news_flash/models/
login_data.rs

1use 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}