use std::fmt::Debug;
use serde::Deserialize;
const REDACTED: &str = "[redacted]";
#[derive(Clone)]
pub struct AuthorizeUrl {
pub url: oauth2::url::Url,
pub state: String,
pub pkce_verifier: String,
}
impl Debug for AuthorizeUrl {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("AuthorizeUrl")
.field("url", &REDACTED)
.field("state", &self.state)
.field("pkce_verifier", &REDACTED)
.finish()
}
}
#[derive(Debug, Default, Clone)]
pub struct UserInfo {
pub id: String,
pub name: Option<String>,
pub username: Option<String>,
pub email: Option<String>,
pub email_verified: Option<bool>,
pub avatar_url: Option<String>,
pub groups: Option<Vec<String>>,
}
#[derive(Clone)]
pub struct StandardTokenResponse {
pub access_token: String,
pub refresh_token: Option<String>,
pub expires_in: Option<std::time::Duration>,
}
impl Debug for StandardTokenResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("StandardTokenResponse")
.field("access_token", &REDACTED)
.field("refresh_token", &REDACTED)
.field("expires_in", &self.expires_in)
.finish()
}
}
#[derive(Clone)]
pub struct OAuthCredentials {
pub client_id: String,
pub client_secret: String,
}
impl OAuthCredentials {
pub fn new(client_id: impl Into<String>, client_secret: impl Into<String>) -> Self {
Self {
client_id: client_id.into(),
client_secret: client_secret.into(),
}
}
}
impl Debug for OAuthCredentials {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("OAuthCredentials")
.field("client_id", &self.client_id)
.field("client_secret", &REDACTED)
.finish()
}
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct OidcDiscovery {
pub issuer: String,
pub authorization_endpoint: String,
pub token_endpoint: String,
pub userinfo_endpoint: String,
}
#[derive(Debug, Deserialize)]
pub struct OidcUserInfo {
pub sub: String,
pub name: Option<String>,
pub preferred_username: Option<String>,
pub email: Option<String>,
pub email_verified: Option<bool>,
pub picture: Option<String>,
pub groups: Option<Vec<String>>,
}