mod client_secret;
mod form_value;
mod jwt_bearer;
mod no_auth;
use std::sync::Arc;
use bon::Builder;
use http::{HeaderMap, Uri};
use crate::platform::{MaybeSend, MaybeSendSync};
pub use client_secret::{ClientSecret, ClientSecretError};
pub use form_value::FormValue;
pub use jwt_bearer::{Audience, JwtBearer, JwtBearerBuilder};
pub use no_auth::NoAuth;
pub trait ClientAuthentication: Clone + MaybeSendSync {
type Error: crate::Error;
fn authentication_params<'a>(
&'a self,
client_id: &'a str,
issuer: Option<&'a str>,
token_endpoint: &'a Uri,
allowed_methods: Option<&'a [String]>,
) -> impl Future<Output = Result<AuthenticationParams<'a>, Self::Error>> + MaybeSend;
}
impl<Auth: ClientAuthentication> ClientAuthentication for Arc<Auth> {
type Error = Auth::Error;
async fn authentication_params<'a>(
&'a self,
client_id: &'a str,
issuer: Option<&'a str>,
token_endpoint: &'a Uri,
allowed_methods: Option<&'a [String]>,
) -> Result<AuthenticationParams<'a>, Self::Error> {
self.as_ref()
.authentication_params(client_id, issuer, token_endpoint, allowed_methods)
.await
}
}
#[derive(Debug, Clone, Builder)]
pub struct AuthenticationParams<'a> {
pub headers: Option<HeaderMap>,
pub form_params: Option<Vec<(&'static str, FormValue<'a>)>>,
}