From 4a57f27749a41c423994bc2e5bce78b3d5e0be50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vav=C5=99=C3=ADk?= Date: Sun, 18 Dec 2022 11:18:10 +0100 Subject: [PATCH] OIDC Client Reactive Filter - fix register provider with config property #29788 follow-up I re-checked PR amd mentioned regression for combination of `@RegisterProvider(OidcClientRequestReactiveFilter.class)` and `quarkus.oidc-client-reactive-filter.client-name` config property. Classic is ok, but I added test anyway. --- .../filter/ConfigPropertyOidcClientResource.java | 12 +++++++++++- .../filter/NamedOidcClientFilterDevModeTest.java | 11 +++++++++-- ...erviceCustomProviderConfigPropOidcClient.java | 16 ++++++++++++++++ ...plication-named-oidc-client-filter.properties | 3 ++- .../OidcClientReactiveFilterBuildStep.java | 7 ++----- .../filter/NamedOidcClientFilterDevModeTest.java | 9 ++++++++- .../reactive/filter/OidcClientResource.java | 10 ++++++++++ ...erviceCustomProviderConfigPropOidcClient.java | 16 ++++++++++++++++ ...cation-oidc-client-reactive-filter.properties | 3 ++- .../filter/OidcClientRequestReactiveFilter.java | 11 +++++++++++ 10 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java create mode 100644 extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java diff --git a/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ConfigPropertyOidcClientResource.java b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ConfigPropertyOidcClientResource.java index 4ec506a74dd40..659168be30c6e 100644 --- a/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ConfigPropertyOidcClientResource.java +++ b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ConfigPropertyOidcClientResource.java @@ -13,9 +13,19 @@ public class ConfigPropertyOidcClientResource { @RestClient ProtectedResourceServiceConfigPropertyOidcClient protectedResourceServiceConfigPropertyOidcClient; + @Inject + @RestClient + ProtectedResourceServiceCustomProviderConfigPropOidcClient protectedResourceServiceCustomProviderConfigPropOidcClient; + @GET - @Path("user-name") + @Path("/annotation/user-name") public String userName() { return protectedResourceServiceConfigPropertyOidcClient.getUserName(); } + + @GET + @Path("/custom-provider/user-name") + public String customProviderConfigPropertyUserName() { + return protectedResourceServiceCustomProviderConfigPropOidcClient.getUserName(); + } } diff --git a/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/NamedOidcClientFilterDevModeTest.java b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/NamedOidcClientFilterDevModeTest.java index e4ec94d279172..58e38e74b8f92 100644 --- a/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/NamedOidcClientFilterDevModeTest.java +++ b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/NamedOidcClientFilterDevModeTest.java @@ -17,6 +17,7 @@ public class NamedOidcClientFilterDevModeTest { ProtectedResource.class, ProtectedResourceServiceNamedOidcClient.class, ProtectedResourceServiceConfigPropertyOidcClient.class, + ProtectedResourceServiceCustomProviderConfigPropOidcClient.class, NamedOidcClientResource.class, ConfigPropertyOidcClientResource.class }; @@ -35,8 +36,14 @@ public void testGerUserConfigPropertyAndAnnotation() { .statusCode(200) .body(equalTo("jdoe")); - // OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` - RestAssured.when().get("/config-property-oidc-client/user-name") + // @OidcClientFilter: OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` + RestAssured.when().get("/config-property-oidc-client/annotation/user-name") + .then() + .statusCode(200) + .body(equalTo("alice")); + + // @RegisterProvider(OidcClientRequestFilter.class): OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` + RestAssured.when().get("/config-property-oidc-client/custom-provider/user-name") .then() .statusCode(200) .body(equalTo("alice")); diff --git a/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java new file mode 100644 index 0000000000000..2d1eeda97ab58 --- /dev/null +++ b/extensions/oidc-client-filter/deployment/src/test/java/io/quarkus/oidc/client/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java @@ -0,0 +1,16 @@ +package io.quarkus.oidc.client.filter; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +@RegisterProvider(OidcClientRequestFilter.class) +@RegisterRestClient +@Path("/") +public interface ProtectedResourceServiceCustomProviderConfigPropOidcClient { + + @GET + String getUserName(); +} diff --git a/extensions/oidc-client-filter/deployment/src/test/resources/application-named-oidc-client-filter.properties b/extensions/oidc-client-filter/deployment/src/test/resources/application-named-oidc-client-filter.properties index 9cb7a6ead4064..617c54e26d925 100644 --- a/extensions/oidc-client-filter/deployment/src/test/resources/application-named-oidc-client-filter.properties +++ b/extensions/oidc-client-filter/deployment/src/test/resources/application-named-oidc-client-filter.properties @@ -20,4 +20,5 @@ quarkus.oidc-client.named.grant-options.password.username=jdoe quarkus.oidc-client.named.grant-options.password.password=jdoe io.quarkus.oidc.client.filter.ProtectedResourceServiceNamedOidcClient/mp-rest/url=http://localhost:8080/protected -io.quarkus.oidc.client.filter.ProtectedResourceServiceConfigPropertyOidcClient/mp-rest/url=http://localhost:8080/protected \ No newline at end of file +io.quarkus.oidc.client.filter.ProtectedResourceServiceConfigPropertyOidcClient/mp-rest/url=http://localhost:8080/protected +io.quarkus.oidc.client.filter.ProtectedResourceServiceCustomProviderConfigPropOidcClient/mp-rest/url=http://localhost:8080/protected \ No newline at end of file diff --git a/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java b/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java index 6bd8674246459..f3bebe1e72b87 100644 --- a/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java +++ b/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java @@ -40,9 +40,6 @@ public class OidcClientReactiveFilterBuildStep { void oidcClientFilterSupport(CombinedIndexBuildItem indexBuildItem, BuildProducer generatedBean, BuildProducer producer) { final var helper = new OidcClientFilterDeploymentHelper<>(AbstractOidcClientRequestReactiveFilter.class, generatedBean); - final var defaultFilter = oidcClientReactiveFilterConfig.clientName.isPresent() - ? helper.getOrCreateFilter(oidcClientReactiveFilterConfig.clientName.get()) - : OIDC_CLIENT_REQUEST_REACTIVE_FILTER; Collection instances = indexBuildItem.getIndex().getAnnotations(OIDC_CLIENT_FILTER); for (AnnotationInstance instance : instances) { @@ -50,13 +47,13 @@ void oidcClientFilterSupport(CombinedIndexBuildItem indexBuildItem, BuildProduce // get client name from annotation @OidcClientFilter("clientName") final String clientName = OidcClientFilterDeploymentHelper.getClientName(instance); final AnnotationValue valueAttr; - if (clientName != null) { + if (clientName != null && !clientName.equals(oidcClientReactiveFilterConfig.clientName.orElse(null))) { // create and use custom filter for named OidcClient // we generate exactly one custom filter for each named client specified through annotation valueAttr = createClassValue(helper.getOrCreateFilter(clientName)); } else { // use default filter for either default OidcClient or the client configured with config properties - valueAttr = createClassValue(defaultFilter); + valueAttr = createClassValue(OIDC_CLIENT_REQUEST_REACTIVE_FILTER); } final AnnotationValue priorityAttr = AnnotationValue.createIntegerValue("priority", Priorities.AUTHENTICATION); diff --git a/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/NamedOidcClientFilterDevModeTest.java b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/NamedOidcClientFilterDevModeTest.java index bb4a0c3f4cd90..ef401cbe4d80d 100644 --- a/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/NamedOidcClientFilterDevModeTest.java +++ b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/NamedOidcClientFilterDevModeTest.java @@ -17,6 +17,7 @@ public class NamedOidcClientFilterDevModeTest { ProtectedResource.class, ProtectedResourceServiceAnnotationOidcClient.class, ProtectedResourceServiceConfigPropertyOidcClient.class, + ProtectedResourceServiceCustomProviderConfigPropOidcClient.class, OidcClientResource.class }; @@ -36,11 +37,17 @@ public void testGerUserConfigPropertyAndAnnotation() { .statusCode(200) .body(equalTo("jdoe")); - // OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` + // @OidcClientFilter: OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` RestAssured.when().get("/oidc-client/config-property/user-name") .then() .statusCode(200) .body(equalTo("alice")); + + // @RegisterProvider(OidcClientRequestReactiveFilter.class): OidcClient selected via `quarkus.oidc-client-filter.client-name=config-property` + RestAssured.when().get("/oidc-client/custom-provider-config-property/user-name") + .then() + .statusCode(200) + .body(equalTo("alice")); } } diff --git a/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/OidcClientResource.java b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/OidcClientResource.java index e88bf2bf74db2..4e36adab6ae26 100644 --- a/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/OidcClientResource.java +++ b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/OidcClientResource.java @@ -17,6 +17,10 @@ public class OidcClientResource { @RestClient ProtectedResourceServiceConfigPropertyOidcClient protectedResourceServiceConfigPropertyOidcClient; + @Inject + @RestClient + ProtectedResourceServiceCustomProviderConfigPropOidcClient protectedResourceServiceCustomProviderConfigPropOidcClient; + @GET @Path("/annotation/user-name") public String annotationUserName() { @@ -28,4 +32,10 @@ public String annotationUserName() { public String configPropertyUserName() { return protectedResourceServiceConfigPropertyOidcClient.getUserName(); } + + @GET + @Path("/custom-provider-config-property/user-name") + public String customProviderConfigPropertyUserName() { + return protectedResourceServiceCustomProviderConfigPropOidcClient.getUserName(); + } } diff --git a/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java new file mode 100644 index 0000000000000..d07bcc2c0a26c --- /dev/null +++ b/extensions/oidc-client-reactive-filter/deployment/src/test/java/io/quarkus/oidc/client/reactive/filter/ProtectedResourceServiceCustomProviderConfigPropOidcClient.java @@ -0,0 +1,16 @@ +package io.quarkus.oidc.client.reactive.filter; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +@RegisterProvider(OidcClientRequestReactiveFilter.class) +@RegisterRestClient +@Path("/") +public interface ProtectedResourceServiceCustomProviderConfigPropOidcClient { + + @GET + String getUserName(); +} diff --git a/extensions/oidc-client-reactive-filter/deployment/src/test/resources/application-oidc-client-reactive-filter.properties b/extensions/oidc-client-reactive-filter/deployment/src/test/resources/application-oidc-client-reactive-filter.properties index 008e89aaa1e13..f894867de0919 100644 --- a/extensions/oidc-client-reactive-filter/deployment/src/test/resources/application-oidc-client-reactive-filter.properties +++ b/extensions/oidc-client-reactive-filter/deployment/src/test/resources/application-oidc-client-reactive-filter.properties @@ -20,4 +20,5 @@ quarkus.oidc-client.annotation.grant-options.password.username=jdoe quarkus.oidc-client.annotation.grant-options.password.password=jdoe io.quarkus.oidc.client.reactive.filter.ProtectedResourceServiceAnnotationOidcClient/mp-rest/url=http://localhost:8080/protected -io.quarkus.oidc.client.reactive.filter.ProtectedResourceServiceConfigPropertyOidcClient/mp-rest/url=http://localhost:8080/protected \ No newline at end of file +io.quarkus.oidc.client.reactive.filter.ProtectedResourceServiceConfigPropertyOidcClient/mp-rest/url=http://localhost:8080/protected +io.quarkus.oidc.client.reactive.filter.ProtectedResourceServiceCustomProviderConfigPropOidcClient/mp-rest/url=http://localhost:8080/protected diff --git a/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientRequestReactiveFilter.java b/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientRequestReactiveFilter.java index 725fa38fd51ba..ca61a0b88576e 100644 --- a/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientRequestReactiveFilter.java +++ b/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientRequestReactiveFilter.java @@ -1,11 +1,22 @@ package io.quarkus.oidc.client.reactive.filter; +import java.util.Optional; + import javax.annotation.Priority; +import javax.inject.Inject; import javax.ws.rs.Priorities; import io.quarkus.oidc.client.reactive.filter.runtime.AbstractOidcClientRequestReactiveFilter; +import io.quarkus.oidc.client.reactive.filter.runtime.OidcClientReactiveFilterConfig; @Priority(Priorities.AUTHENTICATION) public class OidcClientRequestReactiveFilter extends AbstractOidcClientRequestReactiveFilter { + @Inject + OidcClientReactiveFilterConfig config; + + @Override + protected Optional clientId() { + return config.clientName; + } }