diff --git a/lib/Cargo.toml b/lib/Cargo.toml index a7ba2fd..f41c00d 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rs-firebase-admin-sdk" -version = "4.0.1" +version = "4.1.0" rust-version = "1.85" edition = "2024" authors = ["Kostas Petrikas"] diff --git a/lib/src/auth/test.rs b/lib/src/auth/test.rs index 4ff13bb..91f5887 100644 --- a/lib/src/auth/test.rs +++ b/lib/src/auth/test.rs @@ -7,7 +7,6 @@ use super::{ }; use crate::App; use crate::client::ReqwestApiClient; -use crate::credentials::emulator::EmulatorCredentials; use serde::{Deserialize, Serialize}; use serde_json::Value; use serial_test::serial; @@ -17,7 +16,7 @@ use std::collections::BTreeMap; use time::Duration; use tokio; -fn get_auth_service() -> FirebaseAuth> { +fn get_auth_service() -> FirebaseAuth { App::emulated().auth("http://emulator:9099".parse().unwrap()) } diff --git a/lib/src/client/mod.rs b/lib/src/client/mod.rs index fa4b962..1b1e242 100644 --- a/lib/src/client/mod.rs +++ b/lib/src/client/mod.rs @@ -7,7 +7,7 @@ use crate::credentials::get_headers; use bytes::Bytes; use error::{ApiClientError, FireBaseAPIErrorResponse}; use error_stack::{Report, ResultExt}; -use google_cloud_auth::credentials::CredentialsProvider; +use google_cloud_auth::credentials::Credentials; use http::Method; use serde::{Serialize, de::DeserializeOwned}; use std::future::Future; @@ -67,13 +67,13 @@ impl SetReqBody for reqwest::RequestBuilder { } } -pub struct ReqwestApiClient { +pub struct ReqwestApiClient { client: reqwest::Client, - credentials: C, + credentials: Credentials, } -impl ReqwestApiClient { - pub fn new(client: reqwest::Client, credentials: C) -> Self { +impl ReqwestApiClient { + pub fn new(client: reqwest::Client, credentials: Credentials) -> Self { Self { client, credentials, @@ -117,7 +117,7 @@ impl ReqwestApiClient { } } -impl ApiHttpClient for ReqwestApiClient { +impl ApiHttpClient for ReqwestApiClient { async fn send_request( &self, url: String, diff --git a/lib/src/credentials/mod.rs b/lib/src/credentials/mod.rs index 96b746d..f7fa1dc 100644 --- a/lib/src/credentials/mod.rs +++ b/lib/src/credentials/mod.rs @@ -3,7 +3,7 @@ pub mod emulator; use error_stack::{Report, ResultExt}; -use google_cloud_auth::credentials::{CacheableResource, CredentialsProvider}; +use google_cloud_auth::credentials::{CacheableResource, Credentials}; use headers::HeaderMapExt; use headers::{Header, HeaderName, HeaderValue}; use http::{Extensions, HeaderMap}; @@ -47,7 +47,7 @@ impl Header for GoogleUserProject { } pub(crate) async fn get_project_id( - creds: &impl CredentialsProvider, + creds: &Credentials, ) -> Result> { let headers = get_headers(creds).await?; @@ -59,7 +59,7 @@ pub(crate) async fn get_project_id( } pub(crate) async fn get_headers( - creds: &impl CredentialsProvider, + creds: &Credentials, ) -> Result> { let headers = creds .headers(Extensions::new()) diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 34c05cb..c30108f 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -8,24 +8,22 @@ pub mod util; use auth::FirebaseAuth; use client::ReqwestApiClient; +use core::marker::PhantomData; use credentials::{GCPCredentialsError, emulator::EmulatorCredentials, get_project_id}; use error_stack::{Report, ResultExt}; -pub use google_cloud_auth::credentials::CredentialsProvider; use google_cloud_auth::credentials::{AccessTokenCredentials, Builder}; +pub use google_cloud_auth::credentials::{Credentials, CredentialsProvider}; const FIREBASE_AUTH_SCOPES: [&str; 2] = [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email", ]; -pub type LiveAuthAdmin = FirebaseAuth>; -/// Default Firebase Auth Emulator admin manager -pub type EmulatorAuthAdmin = FirebaseAuth>; - /// Base privileged manager for Firebase pub struct App { - credentials: C, + credentials: Credentials, project_id: String, + _credentials_provider: PhantomData, } impl App { @@ -34,15 +32,16 @@ impl App { let credentials = EmulatorCredentials::default(); Self { project_id: credentials.project_id.clone(), - credentials, + credentials: credentials.into(), + _credentials_provider: PhantomData, } } /// Firebase authentication manager for emulator - pub fn auth(&self, emulator_url: String) -> EmulatorAuthAdmin { + pub fn auth(&self, emulator_url: String) -> FirebaseAuth { let client = ReqwestApiClient::new(reqwest::Client::new(), self.credentials.clone()); - FirebaseAuth::emulated(emulator_url, &self.credentials.project_id, client) + FirebaseAuth::emulated(emulator_url, &self.project_id, client) } /// OIDC token verifier for emulator @@ -55,10 +54,11 @@ impl App { impl App { /// Create instance of Firebase app for live project pub async fn live() -> Result> { - let credentials = Builder::default() + let credentials: Credentials = Builder::default() .with_scopes(FIREBASE_AUTH_SCOPES) .build_access_token_credentials() - .change_context(GCPCredentialsError)?; + .change_context(GCPCredentialsError)? + .into(); let project_id = get_project_id(&credentials) .await @@ -67,11 +67,12 @@ impl App { Ok(Self { credentials, project_id, + _credentials_provider: PhantomData, }) } /// Create Firebase authentication manager - pub fn auth(&self) -> LiveAuthAdmin { + pub fn auth(&self) -> FirebaseAuth { let client = ReqwestApiClient::new(reqwest::Client::new(), self.credentials.clone()); FirebaseAuth::live(&self.project_id, client)