11package io .quarkus .oidc .client .filter .deployment ;
22
3+ import static io .quarkus .oidc .client .deployment .OidcClientFilterDeploymentHelper .DEFAULT_OIDC_REQUEST_FILTER_NAME ;
34import static io .quarkus .oidc .client .deployment .OidcClientFilterDeploymentHelper .detectCustomFiltersThatRequireResponseFilter ;
45
56import java .util .Collection ;
2627import io .quarkus .oidc .client .filter .runtime .AbstractOidcClientRequestFilter ;
2728import io .quarkus .oidc .client .filter .runtime .DetectUnauthorizedClientResponseFilter ;
2829import io .quarkus .oidc .client .filter .runtime .OidcClientFilterConfig ;
29- import io .quarkus .restclient .deployment .RestClientAnnotationProviderBuildItem ;
3030import io .quarkus .restclient .deployment .RestClientPredicateProviderBuildItem ;
3131import io .quarkus .resteasy .common .spi .ResteasyJaxrsProviderBuildItem ;
3232
@@ -42,17 +42,16 @@ void registerProvider(BuildProducer<AdditionalBeanBuildItem> additionalBeans,
4242 BuildProducer <ReflectiveClassBuildItem > reflectiveClass ,
4343 NamedOidcClientFilterBuildItem namedOidcClientFilterBuildItem ,
4444 BuildProducer <ResteasyJaxrsProviderBuildItem > jaxrsProviders ,
45- BuildProducer <RestClientPredicateProviderBuildItem > restPredicateProvider ,
46- BuildProducer <RestClientAnnotationProviderBuildItem > restAnnotationProvider ) {
45+ BuildProducer <RestClientPredicateProviderBuildItem > restPredicateProvider ) {
4746
4847 additionalBeans .produce (AdditionalBeanBuildItem .unremovableOf (OidcClientRequestFilter .class ));
4948 reflectiveClass .produce (ReflectiveClassBuildItem .builder (OidcClientRequestFilter .class )
5049 .reason (getClass ().getName ())
5150 .methods ().fields ().build ());
52- final Set <String > namedFilterClientClasses = namedOidcClientFilterBuildItem .namedFilterClientClasses ;
5351
5452 // register default request filter provider against the rest of the clients (client != namedFilterClientClasses)
5553 if (config .registerFilter ()) {
54+ final Set <String > namedFilterClientClasses = namedOidcClientFilterBuildItem .namedFilterClientClasses ;
5655 if (namedFilterClientClasses .isEmpty ()) {
5756 // register default request filter as global rest client provider
5857 jaxrsProviders .produce (new ResteasyJaxrsProviderBuildItem (OidcClientRequestFilter .class .getName ()));
@@ -69,7 +68,7 @@ public boolean test(ClassInfo restClientClassInfo) {
6968 return !namedFilterClientClasses .contains (restClientClassInfo .name ().toString ());
7069 }
7170 };
72- // register all clients without @OidcClientFilter("clientName")
71+ // register all clients without @OidcClientFilter
7372 restPredicateProvider
7473 .produce (new RestClientPredicateProviderBuildItem (OidcClientRequestFilter .class .getName (),
7574 isNotNamedFilterClient ));
@@ -78,33 +77,6 @@ public boolean test(ClassInfo restClientClassInfo) {
7877 DetectUnauthorizedClientResponseFilter .class .getName (), isNotNamedFilterClient ));
7978 }
8079 }
81- } else {
82- if (namedFilterClientClasses .isEmpty ()) {
83- // register default request filter against all the Rest clients annotated with @OidcClientFilter
84- restAnnotationProvider .produce (new RestClientAnnotationProviderBuildItem (OIDC_CLIENT_FILTER ,
85- OidcClientRequestFilter .class ));
86- if (config .refreshOnUnauthorized ()) {
87- restAnnotationProvider .produce (new RestClientAnnotationProviderBuildItem (OIDC_CLIENT_FILTER ,
88- DetectUnauthorizedClientResponseFilter .class ));
89- }
90- } else {
91- // register default request filter against Rest client annotated with @OidcClientFilter without named ones
92- var isNotNamedFilterClient = new Predicate <ClassInfo >() {
93- // test whether the provider should be added restClientClassInfo
94- @ Override
95- public boolean test (ClassInfo restClientClassInfo ) {
96- // do not register default request filter as provider against Rest client with named filter
97- return restClientClassInfo .hasAnnotation (OIDC_CLIENT_FILTER )
98- && !namedFilterClientClasses .contains (restClientClassInfo .name ().toString ());
99- }
100- };
101- restPredicateProvider .produce (new RestClientPredicateProviderBuildItem (OidcClientRequestFilter .class .getName (),
102- isNotNamedFilterClient ));
103- if (config .refreshOnUnauthorized ()) {
104- restPredicateProvider .produce (new RestClientPredicateProviderBuildItem (
105- DetectUnauthorizedClientResponseFilter .class .getName (), isNotNamedFilterClient ));
106- }
107- }
10880 }
10981 }
11082
@@ -114,46 +86,44 @@ NamedOidcClientFilterBuildItem registerNamedProviders(BuildProducer<ReflectiveCl
11486 BuildProducer <RestClientPredicateProviderBuildItem > restPredicateProvider ,
11587 BuildProducer <GeneratedBeanBuildItem > generatedBean ) {
11688
117- // create and register named request filter for each @OidcClientFilter("clientName")
89+ // create and register request filter for each @OidcClientFilter annotation instance
11890 final var helper = new OidcClientFilterDeploymentHelper <>(AbstractOidcClientRequestFilter .class , generatedBean ,
11991 config .refreshOnUnauthorized ());
12092 Collection <AnnotationInstance > instances = indexBuildItem .getIndex ().getAnnotations (OIDC_CLIENT_FILTER );
12193 final Set <String > namedFilterClientClasses = new HashSet <>();
12294 for (AnnotationInstance instance : instances ) {
123- // get client name from annotation @OidcClientFilter("clientName")
124- final String clientName = OidcClientFilterDeploymentHelper .getClientName (instance );
125- // do not create & register named filter for the OidcClient registered through configuration property
126- // as default request filter got it covered
127- if (clientName != null && !clientName .equals (config .clientName ().orElse (null ))) {
128-
129- // create named filter class for named OidcClient
130- // we generate exactly one custom filter for each named client specified through annotation
131- final var generatedProvider = helper .getOrCreateNamedTokensProducerFor (clientName );
132- final var targetRestClient = instance .target ().asClass ().name ().toString ();
133- namedFilterClientClasses .add (targetRestClient );
134-
135- // register for reflection
136- reflectiveClass .produce (ReflectiveClassBuildItem .builder (generatedProvider ).methods ()
137- .reason (getClass ().getName ())
138- .fields ().serialization (true ).build ());
139-
140- var isAnnotatedRestClient = new Predicate <ClassInfo >() {
141- // test whether the provider should be added restClientClassInfo
142- @ Override
143- public boolean test (ClassInfo restClientClassInfo ) {
144- return targetRestClient .equals (restClientClassInfo .name ().toString ());
145- }
146- };
147-
148- // register named request filter provider against Rest client
149- restPredicateProvider .produce (new RestClientPredicateProviderBuildItem (generatedProvider ,
150- isAnnotatedRestClient ));
95+ // get client name from annotation @OidcClientFilter
96+ String clientName = OidcClientFilterDeploymentHelper .getClientName (instance );
97+ if (clientName == null ) {
98+ clientName = config .clientName ().orElse (DEFAULT_OIDC_REQUEST_FILTER_NAME );
99+ }
151100
152- if (config .refreshOnUnauthorized ()) {
153- restPredicateProvider
154- .produce (new RestClientPredicateProviderBuildItem (
155- DetectUnauthorizedClientResponseFilter .class .getName (), isAnnotatedRestClient ));
101+ // we generate exactly one custom filter for each @OidcClientFilter client specified through annotation
102+ final var generatedProvider = helper .getOrCreateNamedTokensProducerFor (clientName );
103+ final var targetRestClient = instance .target ().asClass ().name ().toString ();
104+ namedFilterClientClasses .add (targetRestClient );
105+
106+ // register for reflection
107+ reflectiveClass .produce (ReflectiveClassBuildItem .builder (generatedProvider ).methods ()
108+ .reason (getClass ().getName ())
109+ .fields ().serialization (true ).build ());
110+
111+ var isAnnotatedRestClient = new Predicate <ClassInfo >() {
112+ // test whether the provider should be added restClientClassInfo
113+ @ Override
114+ public boolean test (ClassInfo restClientClassInfo ) {
115+ return targetRestClient .equals (restClientClassInfo .name ().toString ());
156116 }
117+ };
118+
119+ // register named request filter provider against Rest client
120+ restPredicateProvider .produce (new RestClientPredicateProviderBuildItem (generatedProvider ,
121+ isAnnotatedRestClient ));
122+
123+ if (config .refreshOnUnauthorized ()) {
124+ restPredicateProvider
125+ .produce (new RestClientPredicateProviderBuildItem (
126+ DetectUnauthorizedClientResponseFilter .class .getName (), isAnnotatedRestClient ));
157127 }
158128 }
159129 return new NamedOidcClientFilterBuildItem (namedFilterClientClasses );
0 commit comments