use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "lowercase")]
pub enum OAuthProviderKind {
Github,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct OAuthProviderView {
pub id: Uuid,
pub kind: OAuthProviderKind,
pub name: String,
pub enabled: bool,
pub client_id: String,
pub secret_set: bool,
pub scopes: Vec<String>,
pub authorize_url: String,
pub token_url: String,
pub userinfo_url: String,
pub email_field: String,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PublicOAuthProvider {
pub name: String,
pub kind: OAuthProviderKind,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CreateOAuthProviderReq {
pub kind: OAuthProviderKind,
pub name: String,
pub client_id: String,
pub client_secret: String,
#[serde(default)]
pub scopes: Option<Vec<String>>,
#[serde(default)]
pub authorize_url: Option<String>,
#[serde(default)]
pub token_url: Option<String>,
#[serde(default)]
pub userinfo_url: Option<String>,
#[serde(default)]
pub email_field: Option<String>,
#[serde(default)]
pub enabled: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct UpdateOAuthProviderReq {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub client_id: Option<String>,
#[serde(default)]
pub client_secret: Option<String>,
#[serde(default)]
pub scopes: Option<Vec<String>>,
#[serde(default)]
pub authorize_url: Option<String>,
#[serde(default)]
pub token_url: Option<String>,
#[serde(default)]
pub userinfo_url: Option<String>,
#[serde(default)]
pub email_field: Option<String>,
#[serde(default)]
pub enabled: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct OAuthTestResult {
pub ok: bool,
pub detail: String,
}