From 2171265dcd6d04f511221270d6f93623fb309eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Tue, 24 Jan 2023 17:47:56 +0100 Subject: [PATCH] Revert "Implement Clone on ClientCredentials" This reverts commit 1f3fe4fdbc3cd0394c59588272d847185df04076. --- .../oidc-client/src/types/client_credentials.rs | 17 +++++++++++------ crates/oidc-client/tests/it/main.rs | 2 +- .../tests/it/types/client_credentials.rs | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/oidc-client/src/types/client_credentials.rs b/crates/oidc-client/src/types/client_credentials.rs index 3d057621..45d63005 100644 --- a/crates/oidc-client/src/types/client_credentials.rs +++ b/crates/oidc-client/src/types/client_credentials.rs @@ -52,17 +52,17 @@ pub const CLIENT_SUPPORTED_AUTH_METHODS: &[OAuthClientAuthenticationMethod] = &[ /// A function that takes a map of claims and a signing algorithm and returns a /// signed JWT. -pub type JwtSigningFn = fn(HashMap, JsonWebSignatureAlg) -> Result; +pub type JwtSigningFn = + dyn Fn(HashMap, JsonWebSignatureAlg) -> Result + Send + Sync; /// The method used to sign JWTs with a private key. -#[derive(Clone)] pub enum JwtSigningMethod { /// Sign the JWTs with this library, by providing the signing keys. #[cfg(feature = "keystore")] Keystore(Keystore), /// Sign the JWTs in a callback. - Custom(JwtSigningFn), + Custom(Box), } impl JwtSigningMethod { @@ -75,8 +75,14 @@ impl JwtSigningMethod { /// Creates a new [`JwtSigningMethod`] from a [`JwtSigningFn`]. #[must_use] - pub fn with_custom_signing_method(signing_fn: JwtSigningFn) -> Self { - Self::Custom(signing_fn) + pub fn with_custom_signing_method(signing_fn: F) -> Self + where + F: Fn(HashMap, JsonWebSignatureAlg) -> Result + + Send + + Sync + + 'static, + { + Self::Custom(Box::new(signing_fn)) } /// Get the [`Keystore`] from this [`JwtSigningMethod`]. @@ -101,7 +107,6 @@ impl JwtSigningMethod { /// The credentials obtained during registration, to authenticate a client on /// endpoints that require it. -#[derive(Clone)] pub enum ClientCredentials { /// No client authentication is used. /// diff --git a/crates/oidc-client/tests/it/main.rs b/crates/oidc-client/tests/it/main.rs index e5da17ec..7b27876b 100644 --- a/crates/oidc-client/tests/it/main.rs +++ b/crates/oidc-client/tests/it/main.rs @@ -130,7 +130,7 @@ fn id_token(issuer: &str) -> (IdToken, PublicJsonWebKeySet) { fn client_credentials( auth_method: OAuthClientAuthenticationMethod, issuer: &Url, - custom_signing: Option, + custom_signing: Option>, ) -> ClientCredentials { match auth_method { OAuthClientAuthenticationMethod::None => ClientCredentials::None { diff --git a/crates/oidc-client/tests/it/types/client_credentials.rs b/crates/oidc-client/tests/it/types/client_credentials.rs index f4b78caf..55c2cc5c 100644 --- a/crates/oidc-client/tests/it/types/client_credentials.rs +++ b/crates/oidc-client/tests/it/types/client_credentials.rs @@ -372,7 +372,7 @@ async fn pass_private_key_jwt_with_custom_signing() { let client_credentials = client_credentials( OAuthClientAuthenticationMethod::PrivateKeyJwt, &issuer, - Some(|_claims, _alg| Ok("fake.signed.jwt".to_owned())), + Some(Box::new(|_claims, _alg| Ok("fake.signed.jwt".to_owned()))), ); let token_endpoint = issuer.join("token").unwrap(); let mut rng = rand_chacha::ChaCha8Rng::seed_from_u64(42); @@ -441,7 +441,7 @@ async fn fail_private_key_jwt_with_custom_signing() { let client_credentials = client_credentials( OAuthClientAuthenticationMethod::PrivateKeyJwt, &issuer, - Some(|_claims, _alg| Err("Something went wrong".into())), + Some(Box::new(|_claims, _alg| Err("Something went wrong".into()))), ); let token_endpoint = issuer.join("token").unwrap(); let mut rng = rand_chacha::ChaCha8Rng::seed_from_u64(42);