|
41 | 41 | import io.swagger.v3.oas.models.info.Info;
|
42 | 42 | import io.swagger.v3.oas.models.info.License;
|
43 | 43 | import io.swagger.v3.oas.models.media.Schema;
|
| 44 | +import io.swagger.v3.oas.models.security.OAuthFlows; |
| 45 | +import io.swagger.v3.oas.models.security.SecurityRequirement; |
| 46 | +import io.swagger.v3.oas.models.security.SecurityScheme; |
| 47 | +import io.swagger.v3.oas.models.security.SecurityScheme.In; |
| 48 | +import io.swagger.v3.oas.models.security.SecurityScheme.Type; |
44 | 49 | import org.apache.commons.lang3.StringUtils;
|
45 | 50 | import org.springdoc.core.properties.SpringDocConfigProperties;
|
46 | 51 |
|
@@ -134,6 +139,31 @@ private void customizeOpenApi(OpenAPI openApi, OpenAPI openApiProperties) {
|
134 | 139 | Paths pathsProperties = openApiProperties.getPaths();
|
135 | 140 | if (pathsProperties != null)
|
136 | 141 | customizePaths(openApi, pathsProperties);
|
| 142 | + |
| 143 | + List<SecurityRequirement> securityRequirementsProperties = openApiProperties.getSecurity(); |
| 144 | + if (!CollectionUtils.isEmpty(securityRequirementsProperties)) { |
| 145 | + customizeSecurity(openApi, securityRequirementsProperties); |
| 146 | + } |
| 147 | + } |
| 148 | + } |
| 149 | + |
| 150 | + /** |
| 151 | + * Customize security. |
| 152 | + * |
| 153 | + * @param openApi the open api |
| 154 | + * @param securityRequirementsProperties the security requirements |
| 155 | + */ |
| 156 | + private void customizeSecurity(OpenAPI openApi, List<SecurityRequirement> securityRequirementsProperties) { |
| 157 | + List<SecurityRequirement> securityRequirements = openApi.getSecurity(); |
| 158 | + if (CollectionUtils.isEmpty(securityRequirements)) { |
| 159 | + openApi.setSecurity(securityRequirementsProperties); |
| 160 | + } |
| 161 | + else { |
| 162 | + securityRequirementsProperties.forEach(securityRequirement -> { |
| 163 | + if (!securityRequirements.contains(securityRequirement)) { |
| 164 | + securityRequirements.add(securityRequirement); |
| 165 | + } |
| 166 | + }); |
137 | 167 | }
|
138 | 168 | }
|
139 | 169 |
|
@@ -204,6 +234,28 @@ private void customizeComponents(OpenAPI openApi, Components componentsPropertie
|
204 | 234 | });
|
205 | 235 | }
|
206 | 236 | });
|
| 237 | + |
| 238 | + |
| 239 | + Map<String, SecurityScheme> securitySchemeMap = components.getSecuritySchemes(); |
| 240 | + if (CollectionUtils.isEmpty(securitySchemeMap)) { |
| 241 | + components.setSecuritySchemes(componentsProperties.getSecuritySchemes()); |
| 242 | + } |
| 243 | + else { |
| 244 | + securitySchemeMap.forEach((key, securityScheme) -> { |
| 245 | + SecurityScheme securitySchemeToCustomize = components.getSecuritySchemes().get(key); |
| 246 | + if (securitySchemeToCustomize != null) { |
| 247 | + resolveString(securitySchemeToCustomize::description, securityScheme::getDescription); |
| 248 | + resolveString(securitySchemeToCustomize::name, securityScheme::getName); |
| 249 | + resolveType(securitySchemeToCustomize::type, securityScheme::getType); |
| 250 | + resolveIn(securitySchemeToCustomize::in, securityScheme::getIn); |
| 251 | + resolveString(securitySchemeToCustomize::scheme, securityScheme::getScheme); |
| 252 | + resolveString(securitySchemeToCustomize::bearerFormat, securityScheme::getBearerFormat); |
| 253 | + resolveString(securitySchemeToCustomize::openIdConnectUrl, securityScheme::getOpenIdConnectUrl); |
| 254 | + resolveOAuthFlows(securitySchemeToCustomize::flows, securityScheme::getFlows); |
| 255 | + resolveString(securitySchemeToCustomize::$ref, securityScheme::get$ref); |
| 256 | + } |
| 257 | + }); |
| 258 | + } |
207 | 259 | }
|
208 | 260 | }
|
209 | 261 |
|
@@ -259,6 +311,46 @@ private void resolveString(Consumer<String> setter, Supplier<Object> getter) {
|
259 | 311 | }
|
260 | 312 | }
|
261 | 313 |
|
| 314 | + /** |
| 315 | + * Resolve type. |
| 316 | + * |
| 317 | + * @param setter the setter |
| 318 | + * @param getter the getter |
| 319 | + */ |
| 320 | + private void resolveType(Consumer<Type> setter, Supplier<Object> getter) { |
| 321 | + Type value = (Type) getter.get(); |
| 322 | + if (value!=null) { |
| 323 | + setter.accept(value); |
| 324 | + } |
| 325 | + } |
| 326 | + |
| 327 | + /** |
| 328 | + * Resolve in. |
| 329 | + * |
| 330 | + * @param setter the setter |
| 331 | + * @param getter the getter |
| 332 | + */ |
| 333 | + private void resolveIn(Consumer<In> setter, Supplier<Object> getter) { |
| 334 | + In value = (In) getter.get(); |
| 335 | + if (value!=null) { |
| 336 | + setter.accept(value); |
| 337 | + } |
| 338 | + } |
| 339 | + |
| 340 | + /** |
| 341 | + * Resolve o auth flows. |
| 342 | + * |
| 343 | + * @param setter the setter |
| 344 | + * @param getter the getter |
| 345 | + */ |
| 346 | + private void resolveOAuthFlows(Consumer<OAuthFlows> setter, Supplier<Object> getter) { |
| 347 | + OAuthFlows value = (OAuthFlows) getter.get(); |
| 348 | + if (value!=null) { |
| 349 | + setter.accept(value); |
| 350 | + } |
| 351 | + } |
| 352 | + |
| 353 | + |
262 | 354 | /**
|
263 | 355 | * Resolve set.
|
264 | 356 | *
|
|
0 commit comments