use serde::{Deserialize, Serialize};
use crate::ApiKey;
use crate::Client;
use crate::Endpoint;
use crate::IdpPostBody;
use crate::Result;
#[derive(Serialize)]
pub struct SignInWithOAuthCredentialRequestBodyPayload {
#[serde(rename = "requestUri")]
request_uri: String,
#[serde(rename = "postBody")]
post_body: IdpPostBody,
#[serde(rename = "returnSecureToken")]
return_secure_token: bool,
#[serde(rename = "returnIdpCredential")]
return_ipd_credential: bool,
}
impl SignInWithOAuthCredentialRequestBodyPayload {
pub fn new(
request_uri: String,
post_body: IdpPostBody,
return_ipd_credential: bool,
) -> Self {
Self {
request_uri,
post_body,
return_secure_token: true,
return_ipd_credential,
}
}
}
#[derive(Deserialize, Debug)]
pub struct SignInWithOAuthCredentialResponsePayload {
#[serde(rename = "federatedId")]
pub federated_id: String,
#[serde(rename = "providerId")]
pub provider_id: String,
#[serde(rename = "localId")]
pub local_id: String,
#[serde(rename = "emailVerified")]
pub email_verified: bool,
#[serde(rename = "email")]
pub email: String,
#[serde(rename = "oauthIdToken")]
pub oauth_id_token: Option<String>,
#[serde(rename = "oauthAccessToken")]
pub oauth_access_token: Option<String>,
#[serde(rename = "oauthTokenSecret")]
pub oauth_token_secret: Option<String>,
#[serde(rename = "rawUserInfo")]
pub raw_user_info: String,
#[serde(rename = "firstName")]
pub first_name: Option<String>,
#[serde(rename = "lastName")]
pub last_name: Option<String>,
#[serde(rename = "fullName")]
pub full_name: Option<String>,
#[serde(rename = "displayName")]
pub display_name: Option<String>,
#[serde(rename = "photoUrl")]
pub photo_url: Option<String>,
#[serde(rename = "idToken")]
pub id_token: String,
#[serde(rename = "refreshToken")]
pub refresh_token: String,
#[serde(rename = "expiresIn")]
pub expires_in: String,
#[serde(rename = "needConfirmation")]
pub need_confirmation: Option<bool>,
#[serde(rename = "kind")]
pub kind: Option<String>,
}
pub async fn sign_in_with_oauth_credential(
client: &Client,
api_key: &ApiKey,
request_payload: SignInWithOAuthCredentialRequestBodyPayload,
) -> Result<SignInWithOAuthCredentialResponsePayload> {
client.send_post::<
SignInWithOAuthCredentialRequestBodyPayload,
SignInWithOAuthCredentialResponsePayload,
>(
Endpoint::SignInWithIdp,
api_key,
request_payload,
None,
)
.await
}