|
34 | 34 | import java.nio.file.Path;
|
35 | 35 | import java.nio.file.Paths;
|
36 | 36 | import java.util.ArrayList;
|
| 37 | +import java.util.Arrays; |
| 38 | +import java.util.Collections; |
37 | 39 | import java.util.HashMap;
|
38 | 40 | import java.util.HashSet;
|
39 | 41 | import java.util.List;
|
40 | 42 | import java.util.Map;
|
| 43 | +import java.util.Objects; |
| 44 | +import java.util.Optional; |
41 | 45 | import java.util.Set;
|
42 | 46 | import java.util.function.Predicate;
|
43 | 47 |
|
@@ -578,8 +582,7 @@ public ClientOptInput toClientOptInput() {
|
578 | 582 | SwaggerParseResult result = new OpenAPIParser().readContents(inputSpec, authorizationValues, options);
|
579 | 583 | OpenAPI openAPI = result.getOpenAPI();
|
580 | 584 | if (config.needsUnflattenedSpec()) {
|
581 |
| - ParseOptions optionsUnflattened = new ParseOptions(); |
582 |
| - optionsUnflattened.setResolve(true); |
| 585 | + ParseOptions optionsUnflattened = buildUnflattenedParseOptions(); |
583 | 586 | SwaggerParseResult resultUnflattened = new OpenAPIParser().readContents(inputSpec, authorizationValues, optionsUnflattened);
|
584 | 587 | OpenAPI openAPIUnflattened = resultUnflattened.getOpenAPI();
|
585 | 588 | config.setUnflattenedOpenAPI(openAPIUnflattened);
|
@@ -617,8 +620,7 @@ public ClientOptInput toClientOptInput() {
|
617 | 620 | .openAPI(openAPI);
|
618 | 621 |
|
619 | 622 | if (config.needsUnflattenedSpec()) {
|
620 |
| - ParseOptions optionsUnflattened = new ParseOptions(); |
621 |
| - optionsUnflattened.setResolve(true); |
| 623 | + ParseOptions optionsUnflattened = buildUnflattenedParseOptions(); |
622 | 624 | SwaggerParseResult resultUnflattened = new OpenAPIParser().readLocation(sanitizedSpecificationUrl, authorizationValues, optionsUnflattened);
|
623 | 625 | OpenAPI openAPIUnflattened = resultUnflattened.getOpenAPI();
|
624 | 626 | config.setUnflattenedOpenAPI(openAPIUnflattened);
|
@@ -674,9 +676,39 @@ private ParseOptions buildParseOptions() {
|
674 | 676 | options.setFlatten(true);
|
675 | 677 | options.setFlattenComposedSchemas(flattenInlineSchema);
|
676 | 678 | options.setSkipMatches(this.skipInlineModelMatches);
|
| 679 | + |
| 680 | + if (Objects.equals(System.getenv("SAFELY_RESOLVE_URL"), "true")) { |
| 681 | + setSafelyResolveURLParseOptions(options); |
| 682 | + } |
| 683 | + |
677 | 684 | return options;
|
678 | 685 | }
|
679 | 686 |
|
| 687 | + private ParseOptions buildUnflattenedParseOptions() { |
| 688 | + ParseOptions options = new ParseOptions(); |
| 689 | + options.setResolve(true); |
| 690 | + |
| 691 | + if (Objects.equals(System.getenv("SAFELY_RESOLVE_URL"), "true")) { |
| 692 | + setSafelyResolveURLParseOptions(options); |
| 693 | + } |
| 694 | + |
| 695 | + return options; |
| 696 | + } |
| 697 | + |
| 698 | + private void setSafelyResolveURLParseOptions(ParseOptions options) { |
| 699 | + List<String> allowList = Optional.ofNullable(System.getenv("REMOTE_REF_ALLOW_LIST")) |
| 700 | + .map(str -> Arrays.asList(str.split(","))) |
| 701 | + .orElseGet(Collections::emptyList); |
| 702 | + |
| 703 | + List<String> blockList = Optional.ofNullable(System.getenv("REMOTE_REF_BLOCK_LIST")) |
| 704 | + .map(str -> Arrays.asList(str.split(","))) |
| 705 | + .orElseGet(Collections::emptyList); |
| 706 | + |
| 707 | + options.setSafelyResolveURL(true); |
| 708 | + options.setRemoteRefAllowList(allowList); |
| 709 | + options.setRemoteRefBlockList(blockList); |
| 710 | + } |
| 711 | + |
680 | 712 | @JsonAnySetter
|
681 | 713 | public CodegenConfigurator addDynamicProperty(String name, Object value) {
|
682 | 714 | dynamicProperties.put(name, value);
|
|
0 commit comments