ones-oidc 0.3.5

ONES OpenID Connect client for Rust
Documentation
use serde::{Deserialize, Serialize};
use super::errors::OidcError;
use super::http_client::default_client;

#[derive(Serialize, Deserialize)]
pub struct IdpResponse {
    pub subject: String,
    pub username: String,
    pub client_id: String,
}

#[derive(Serialize, Deserialize)]
struct IdentifierBody {
    identifier: String,
}

pub async fn fetch_unknown_user_from_idp(
    issuer_url: &str,
    identifier: &str,
    device_access_token: openidconnect::AccessToken,
) -> Result<Option<IdpResponse>, OidcError> {
    let client = default_client()?;
    let response = client
        .post(format!("{}/from-identifier", issuer_url))
        .json(&IdentifierBody {
            identifier: identifier.to_string(),
        })
        .header(
            "Authorization",
            format!("Bearer {}", device_access_token.secret()),
        )
        .send()
        .await?
        .error_for_status()?
        .json::<IdpResponse>()
        .await?;

    Ok(Some(response))
}