22
33import java .lang .reflect .Field ;
44
5- import com .nimbusds .jose .jwk .JWKSet ;
65import io .swagger .v3 .oas .annotations .enums .ParameterIn ;
76import io .swagger .v3 .oas .models .OpenAPI ;
87import io .swagger .v3 .oas .models .Operation ;
98import io .swagger .v3 .oas .models .PathItem ;
109import io .swagger .v3 .oas .models .headers .Header ;
10+ import io .swagger .v3 .oas .models .media .ArraySchema ;
1111import io .swagger .v3 .oas .models .media .Content ;
12+ import io .swagger .v3 .oas .models .media .MapSchema ;
1213import io .swagger .v3 .oas .models .media .MediaType ;
1314import io .swagger .v3 .oas .models .media .ObjectSchema ;
1415import io .swagger .v3 .oas .models .media .Schema ;
2122import org .slf4j .Logger ;
2223import org .slf4j .LoggerFactory ;
2324import org .springdoc .core .configuration .oauth2 .SpringDocOAuth2AuthorizationServerMetadata ;
25+ import org .springdoc .core .configuration .oauth2 .SpringDocOAuth2Token ;
2426import org .springdoc .core .configuration .oauth2 .SpringDocOAuth2TokenIntrospection ;
2527import org .springdoc .core .customizers .GlobalOpenApiCustomizer ;
2628import org .springdoc .core .utils .SpringDocAnnotationsUtils ;
3133import org .springframework .http .HttpMethod ;
3234import org .springframework .http .HttpStatus ;
3335import org .springframework .security .oauth2 .core .OAuth2Error ;
34- import org .springframework .security .oauth2 .core .endpoint .OAuth2AccessTokenResponse ;
3536import org .springframework .security .oauth2 .core .endpoint .OAuth2ParameterNames ;
36- import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationConsentAuthenticationToken ;
37- import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenRevocationAuthenticationToken ;
3837import org .springframework .security .oauth2 .server .authorization .web .NimbusJwkSetEndpointFilter ;
3938import org .springframework .security .oauth2 .server .authorization .web .OAuth2AuthorizationEndpointFilter ;
4039import org .springframework .security .oauth2 .server .authorization .web .OAuth2AuthorizationServerMetadataEndpointFilter ;
4948import org .springframework .security .web .util .matcher .RequestMatcher ;
5049
5150import static org .springframework .http .MediaType .APPLICATION_JSON_VALUE ;
51+ import static org .springframework .http .MediaType .TEXT_HTML_VALUE ;
5252
5353/**
5454 * The type Spring doc security o auth 2 customizer.
@@ -95,7 +95,10 @@ private void getOAuth2TokenRevocationEndpointFilter(OpenAPI openAPI, SecurityFil
9595 Object oAuth2EndpointFilter =
9696 new SpringDocSecurityOAuth2EndpointUtils (OAuth2TokenRevocationEndpointFilter .class ).findEndpoint (securityFilterChain );
9797 if (oAuth2EndpointFilter != null ) {
98- ApiResponses apiResponses = buildApiResponsesWithBadRequest (SpringDocAnnotationsUtils .resolveSchemaFromType (OAuth2TokenRevocationAuthenticationToken .class , openAPI .getComponents (), null ), openAPI );
98+ ApiResponses apiResponses = new ApiResponses ();
99+ apiResponses .addApiResponse (String .valueOf (HttpStatus .OK .value ()), new ApiResponse ().description (HttpStatus .OK .getReasonPhrase ()));
100+ buildApiResponsesOnInternalServerError (apiResponses );
101+ buildApiResponsesOnBadRequest (apiResponses , openAPI );
99102
100103 Operation operation = buildOperation (apiResponses );
101104 Schema <?> schema = new ObjectSchema ()
@@ -119,15 +122,19 @@ private void getOAuth2TokenIntrospectionEndpointFilter(OpenAPI openAPI, Security
119122 Object oAuth2EndpointFilter =
120123 new SpringDocSecurityOAuth2EndpointUtils (OAuth2TokenIntrospectionEndpointFilter .class ).findEndpoint (securityFilterChain );
121124 if (oAuth2EndpointFilter != null ) {
122- ApiResponses apiResponses = buildApiResponsesWithBadRequest (SpringDocAnnotationsUtils .resolveSchemaFromType (SpringDocOAuth2TokenIntrospection .class , openAPI .getComponents (), null ), openAPI );
125+ ApiResponses apiResponses = new ApiResponses ();
126+ buildApiResponsesOnSuccess (apiResponses , SpringDocAnnotationsUtils .resolveSchemaFromType (SpringDocOAuth2TokenIntrospection .class , openAPI .getComponents (), null ));
127+ buildApiResponsesOnInternalServerError (apiResponses );
128+ buildApiResponsesOnBadRequest (apiResponses , openAPI );
129+
123130 Operation operation = buildOperation (apiResponses );
124- Schema <?> schema = new ObjectSchema ()
131+ Schema <?> requestSchema = new ObjectSchema ()
125132 .addProperty ("token" , new StringSchema ())
126133 .addProperty (OAuth2ParameterNames .TOKEN_TYPE_HINT , new StringSchema ())
127134 .addProperty ("additionalParameters" , new ObjectSchema ().additionalProperties (new StringSchema ()));
128135
129136 String mediaType = org .springframework .http .MediaType .APPLICATION_FORM_URLENCODED_VALUE ;
130- RequestBody requestBody = new RequestBody ().content (new Content ().addMediaType (mediaType , new MediaType ().schema (schema )));
137+ RequestBody requestBody = new RequestBody ().content (new Content ().addMediaType (mediaType , new MediaType ().schema (requestSchema )));
131138 operation .setRequestBody (requestBody );
132139 buildPath (oAuth2EndpointFilter , "tokenIntrospectionEndpointMatcher" , openAPI , operation , HttpMethod .POST );
133140 }
@@ -143,7 +150,9 @@ private void getOAuth2AuthorizationServerMetadataEndpoint(OpenAPI openAPI, Secur
143150 Object oAuth2EndpointFilter =
144151 new SpringDocSecurityOAuth2EndpointUtils (OAuth2AuthorizationServerMetadataEndpointFilter .class ).findEndpoint (securityFilterChain );
145152 if (oAuth2EndpointFilter != null ) {
146- ApiResponses apiResponses = buildApiResponses (SpringDocAnnotationsUtils .resolveSchemaFromType (SpringDocOAuth2AuthorizationServerMetadata .class , openAPI .getComponents (), null ));
153+ ApiResponses apiResponses = new ApiResponses ();
154+ buildApiResponsesOnSuccess (apiResponses , SpringDocAnnotationsUtils .resolveSchemaFromType (SpringDocOAuth2AuthorizationServerMetadata .class , openAPI .getComponents (), null ));
155+ buildApiResponsesOnInternalServerError (apiResponses );
147156 Operation operation = buildOperation (apiResponses );
148157 buildPath (oAuth2EndpointFilter , "requestMatcher" , openAPI , operation , HttpMethod .GET );
149158 }
@@ -159,7 +168,17 @@ private void getNimbusJwkSetEndpoint(OpenAPI openAPI, SecurityFilterChain securi
159168 Object oAuth2EndpointFilter =
160169 new SpringDocSecurityOAuth2EndpointUtils (NimbusJwkSetEndpointFilter .class ).findEndpoint (securityFilterChain );
161170 if (oAuth2EndpointFilter != null ) {
162- ApiResponses apiResponses = buildApiResponses (SpringDocAnnotationsUtils .resolveSchemaFromType (JWKSet .class , openAPI .getComponents (), null ));
171+ ApiResponses apiResponses = new ApiResponses ();
172+ Schema <?> schema = new MapSchema ();
173+ schema .addProperty ("keys" , new ArraySchema ().items (new ObjectSchema ().additionalProperties (true )));
174+
175+ ApiResponse response = new ApiResponse ().description (HttpStatus .OK .getReasonPhrase ()).content (new Content ().addMediaType (
176+ APPLICATION_JSON_VALUE ,
177+ new MediaType ().schema (schema )));
178+ apiResponses .addApiResponse (String .valueOf (HttpStatus .OK .value ()), response );
179+ buildApiResponsesOnInternalServerError (apiResponses );
180+ buildApiResponsesOnBadRequest (apiResponses , openAPI );
181+
163182 Operation operation = buildOperation (apiResponses );
164183 operation .responses (apiResponses );
165184 buildPath (oAuth2EndpointFilter , "requestMatcher" , openAPI , operation , HttpMethod .GET );
@@ -177,7 +196,10 @@ private void getOAuth2TokenEndpoint(OpenAPI openAPI, SecurityFilterChain securit
177196 new SpringDocSecurityOAuth2EndpointUtils (OAuth2TokenEndpointFilter .class ).findEndpoint (securityFilterChain );
178197
179198 if (oAuth2EndpointFilter != null ) {
180- ApiResponses apiResponses = buildApiResponsesWithBadRequest (SpringDocAnnotationsUtils .resolveSchemaFromType (OAuth2AccessTokenResponse .class , openAPI .getComponents (), null ), openAPI );
199+ ApiResponses apiResponses = new ApiResponses ();
200+ buildApiResponsesOnSuccess (apiResponses , SpringDocAnnotationsUtils .resolveSchemaFromType (SpringDocOAuth2Token .class , openAPI .getComponents (), null ));
201+ buildApiResponsesOnInternalServerError (apiResponses );
202+ buildApiResponsesOnBadRequest (apiResponses , openAPI );
181203 buildOAuth2Error (openAPI , apiResponses , HttpStatus .UNAUTHORIZED );
182204 Operation operation = buildOperation (apiResponses );
183205 Schema <?> schema = new ObjectSchema ().additionalProperties (new StringSchema ());
@@ -196,7 +218,14 @@ private void getOAuth2AuthorizationEndpoint(OpenAPI openAPI, SecurityFilterChain
196218 Object oAuth2EndpointFilter =
197219 new SpringDocSecurityOAuth2EndpointUtils (OAuth2AuthorizationEndpointFilter .class ).findEndpoint (securityFilterChain );
198220 if (oAuth2EndpointFilter != null ) {
199- ApiResponses apiResponses = buildApiResponsesWithBadRequest (SpringDocAnnotationsUtils .resolveSchemaFromType (OAuth2AuthorizationConsentAuthenticationToken .class , openAPI .getComponents (), null ), openAPI );
221+ ApiResponses apiResponses = new ApiResponses ();
222+
223+ ApiResponse response = new ApiResponse ().description (HttpStatus .OK .getReasonPhrase ()).content (new Content ().addMediaType (
224+ TEXT_HTML_VALUE ,
225+ new MediaType ()));
226+ apiResponses .addApiResponse (String .valueOf (HttpStatus .OK .value ()), response );
227+ buildApiResponsesOnInternalServerError (apiResponses );
228+ buildApiResponsesOnBadRequest (apiResponses , openAPI );
200229 apiResponses .addApiResponse (String .valueOf (HttpStatus .MOVED_TEMPORARILY .value ()),
201230 new ApiResponse ().description (HttpStatus .MOVED_TEMPORARILY .getReasonPhrase ())
202231 .addHeaderObject ("Location" , new Header ().schema (new StringSchema ())));
@@ -221,30 +250,39 @@ private Operation buildOperation(ApiResponses apiResponses) {
221250 }
222251
223252 /**
224- * Build api responses api responses.
253+ * Build api responses api responses on success .
225254 *
255+ * @param apiResponses the api responses
226256 * @param schema the schema
227257 * @return the api responses
228258 */
229- private ApiResponses buildApiResponses (Schema schema ) {
230- ApiResponses apiResponses = new ApiResponses ();
259+ private ApiResponses buildApiResponsesOnSuccess (ApiResponses apiResponses , Schema schema ) {
231260 ApiResponse response = new ApiResponse ().description (HttpStatus .OK .getReasonPhrase ()).content (new Content ().addMediaType (
232261 APPLICATION_JSON_VALUE ,
233262 new MediaType ().schema (schema )));
234263 apiResponses .addApiResponse (String .valueOf (HttpStatus .OK .value ()), response );
264+ return apiResponses ;
265+ }
266+
267+ /**
268+ * Build api responses api responses on internal server error.
269+ *
270+ * @param apiResponses the api responses
271+ * @return the api responses
272+ */
273+ private ApiResponses buildApiResponsesOnInternalServerError (ApiResponses apiResponses ) {
235274 apiResponses .addApiResponse (String .valueOf (HttpStatus .INTERNAL_SERVER_ERROR .value ()), new ApiResponse ().description (HttpStatus .INTERNAL_SERVER_ERROR .getReasonPhrase ()));
236275 return apiResponses ;
237276 }
238277
239278 /**
240- * Build api responses with bad request api responses .
279+ * Build api responses on bad request.
241280 *
242- * @param schema the schema
281+ * @param apiResponses the api responses
243282 * @param openAPI the open api
244283 * @return the api responses
245284 */
246- private ApiResponses buildApiResponsesWithBadRequest (Schema schema , OpenAPI openAPI ) {
247- ApiResponses apiResponses = buildApiResponses (schema );
285+ private ApiResponses buildApiResponsesOnBadRequest (ApiResponses apiResponses , OpenAPI openAPI ) {
248286 buildOAuth2Error (openAPI , apiResponses , HttpStatus .BAD_REQUEST );
249287 return apiResponses ;
250288 }
0 commit comments