use crate::errors::OidcError;
use serde::{Deserialize, Serialize};
#[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 = reqwest::Client::new();
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))
}