@@ -84,8 +84,7 @@ FeatureBuildItem feature() {
8484 }
8585
8686 @ BuildStep
87- void additionalBean (Capabilities capabilities , BuildProducer <AdditionalBeanBuildItem > producer ) {
88-
87+ void registerOidcClientBean (Capabilities capabilities , BuildProducer <AdditionalBeanBuildItem > producer ) {
8988 if (!isClassPresentAtRuntime (ABSTRACT_TOKEN_PRODUCER )) {
9089 LOGGER .debug ("{} class not found in runtime, skipping OidcClientRequestFilterDelegate bean generation" ,
9190 ABSTRACT_TOKEN_PRODUCER );
@@ -101,7 +100,6 @@ void additionalBean(Capabilities capabilities, BuildProducer<AdditionalBeanBuild
101100 producer .produce (AdditionalBeanBuildItem .builder ().addBeanClass (ClassicOidcClientRequestFilterDelegate .class )
102101 .setDefaultScope (DotName .createSimple (Dependent .class )).setUnremovable ().build ());
103102 }
104-
105103 }
106104
107105 @ BuildStep
@@ -126,16 +124,12 @@ void produceCompositeProviders(AuthenticationRecorder recorder, List<AuthProvide
126124 }
127125
128126 @ BuildStep
129- @ Record (ExecutionTime .STATIC_INIT )
127+ @ Record (ExecutionTime .RUNTIME_INIT )
130128 void produceOauthAuthentication (CombinedIndexBuildItem beanArchiveBuildItem ,
131- BuildProducer <AuthProviderBuildItem > authenticationProviders , BuildProducer <SyntheticBeanBuildItem > beanProducer ,
129+ BuildProducer <AuthProviderBuildItem > authenticationProviders ,
130+ BuildProducer <SyntheticBeanBuildItem > beanProducer ,
132131 OidcAuthenticationRecorder oidcRecorder ) {
133132
134- if (!isClassPresentAtRuntime (ABSTRACT_TOKEN_PRODUCER )) {
135- LOGGER .debug ("{} class not found in runtime, skipping OAuth bean generation" , ABSTRACT_TOKEN_PRODUCER );
136- return ;
137- }
138- LOGGER .debug ("{} class found in runtime, producing OAuth bean generation" , ABSTRACT_TOKEN_PRODUCER );
139133 Collection <AnnotationInstance > authenticationMarkers = beanArchiveBuildItem .getIndex ()
140134 .getAnnotationsWithRepeatable (OAUTH_AUTHENTICATION_MARKER , beanArchiveBuildItem .getIndex ())
141135 .stream ()
@@ -145,6 +139,24 @@ void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem,
145139 (existing , duplicate ) -> existing ))
146140 .values ();
147141
142+ if (!isClassPresentAtRuntime (ABSTRACT_TOKEN_PRODUCER )) {
143+ if (!authenticationMarkers .isEmpty ()) {
144+ throw new IllegalStateException (
145+ "OAuth2 flows detected in spec(s) " +
146+ authenticationMarkers .stream ()
147+ .map (m -> m .value ("openApiSpecId" ).asString ())
148+ .distinct ()
149+ .collect (Collectors .joining (", " ))
150+ +
151+ " but quarkus-openapi-generator-oidc and quarkus-rest-client-oidc-filter or quarkus-oidc-client-reactive-filter are not on the classpath. "
152+ +
153+ "Please add those dependencies to your project. See https://docs.quarkiverse.io/quarkus-openapi-generator/dev/client.html#_oauth2_authentication" );
154+ }
155+ LOGGER .debug ("{} class not found in runtime, skipping OAuth bean generation" , ABSTRACT_TOKEN_PRODUCER );
156+ return ;
157+ }
158+ LOGGER .debug ("{} class found in runtime, producing OAuth bean generation" , ABSTRACT_TOKEN_PRODUCER );
159+
148160 Map <String , List <AnnotationInstance >> operationsBySpec = getOperationsBySpec (beanArchiveBuildItem );
149161
150162 for (AnnotationInstance authenticationMarker : authenticationMarkers ) {
@@ -162,16 +174,19 @@ void produceOauthAuthentication(CombinedIndexBuildItem beanArchiveBuildItem,
162174 .annotation (OpenApiSpec .class )
163175 .addValue ("openApiSpecId" , openApiSpecId )
164176 .done ()
177+ .addInjectionPoint (ClassType .create (DotName .createSimple (CredentialsProvider .class )))
165178 .addInjectionPoint (ClassType .create (OAuth2AuthenticationProvider .OidcClientRequestFilterDelegate .class ),
166179 AnnotationInstance .builder (OidcClient .class ).add ("name" , sanitizeAuthName (name )).build ())
180+ .addInjectionPoint (ClassType .create (DotName .createSimple (CredentialsProvider .class )))
167181 .createWith (oidcRecorder .recordOauthAuthProvider (sanitizeAuthName (name ), openApiSpecId , operations ))
182+ .setRuntimeInit ()
168183 .unremovable ()
169184 .done ());
170185 }
171186 }
172187
173188 @ BuildStep
174- @ Record (ExecutionTime .STATIC_INIT )
189+ @ Record (ExecutionTime .RUNTIME_INIT )
175190 void produceBasicAuthentication (CombinedIndexBuildItem beanArchiveBuildItem ,
176191 BuildProducer <AuthProviderBuildItem > authenticationProviders , BuildProducer <SyntheticBeanBuildItem > beanProducer ,
177192 AuthenticationRecorder recorder ) {
@@ -204,13 +219,14 @@ void produceBasicAuthentication(CombinedIndexBuildItem beanArchiveBuildItem,
204219 .done ()
205220 .addInjectionPoint (ClassType .create (DotName .createSimple (CredentialsProvider .class )))
206221 .createWith (recorder .recordBasicAuthProvider (sanitizeAuthName (name ), openApiSpecId , operations ))
222+ .setRuntimeInit ()
207223 .unremovable ()
208224 .done ());
209225 }
210226 }
211227
212228 @ BuildStep
213- @ Record (ExecutionTime .STATIC_INIT )
229+ @ Record (ExecutionTime .RUNTIME_INIT )
214230 void produceBearerAuthentication (CombinedIndexBuildItem beanArchiveBuildItem ,
215231 BuildProducer <AuthProviderBuildItem > authenticationProviders , BuildProducer <SyntheticBeanBuildItem > beanProducer ,
216232 AuthenticationRecorder recorder ) {
@@ -244,14 +260,15 @@ void produceBearerAuthentication(CombinedIndexBuildItem beanArchiveBuildItem,
244260 .done ()
245261 .addInjectionPoint (ClassType .create (DotName .createSimple (CredentialsProvider .class )))
246262 .createWith (recorder .recordBearerAuthProvider (sanitizeAuthName (name ), scheme , openApiSpecId , operations ))
263+ .setRuntimeInit ()
247264 .unremovable ()
248265 .done ());
249266
250267 }
251268 }
252269
253270 @ BuildStep
254- @ Record (ExecutionTime .STATIC_INIT )
271+ @ Record (ExecutionTime .RUNTIME_INIT )
255272 void produceApiKeyAuthentication (CombinedIndexBuildItem beanArchiveBuildItem ,
256273 BuildProducer <AuthProviderBuildItem > authenticationProviders , BuildProducer <SyntheticBeanBuildItem > beanProducer ,
257274 AuthenticationRecorder recorder ) {
@@ -288,6 +305,7 @@ void produceApiKeyAuthentication(CombinedIndexBuildItem beanArchiveBuildItem,
288305 .addInjectionPoint (ClassType .create (DotName .createSimple (CredentialsProvider .class )))
289306 .createWith (recorder .recordApiKeyAuthProvider (sanitizeAuthName (name ), openApiSpecId , apiKeyIn , apiKeyName ,
290307 operations ))
308+ .setRuntimeInit ()
291309 .unremovable ()
292310 .done ());
293311 }
0 commit comments