diff options
author | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-08-20 11:13:28 +0200 |
---|---|---|
committer | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-08-20 11:13:28 +0200 |
commit | 2b8a7df25878f546ace25373f44baeb026cf6d2b (patch) | |
tree | 8b236fdc42bc66beb16cc59b86258a7794285420 /src/main/java/at/gv/egiz/moazs/preprocess | |
parent | 488ecf8632b7204b5da218643eb1631e2d3386ff (diff) | |
download | moa-zs-2b8a7df25878f546ace25373f44baeb026cf6d2b.tar.gz moa-zs-2b8a7df25878f546ace25373f44baeb026cf6d2b.tar.bz2 moa-zs-2b8a7df25878f546ace25373f44baeb026cf6d2b.zip |
Add Custom Http Headers to HTTP Clients
- Change app2mzs schema: Add Custom Headers to ClientType Element.
- Set custom headers in ClientFactory.
- Parse custom headers from spring environment.
- Merge custom headers from two different profiles.
- Add example to application.yaml.
- Test conversion of custom headers from spring profile
- Test merging and overriding custom headers.
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/preprocess')
-rw-r--r-- | src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java | 3 | ||||
-rw-r--r-- | src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java | 62 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java index 0637f98..ed67154 100644 --- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java +++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java @@ -43,7 +43,8 @@ public class ConfigProfileGenerator { private ConfigProfileGenerator( SpringPropertiesFacade properties, ConfigUtil util, - MzsDeliveryRequestValidator validator, boolean verifyCompletenessOfDefaultConfiguration, + MzsDeliveryRequestValidator validator, + boolean verifyCompletenessOfDefaultConfiguration, String profilePrefix, String defaultConfigKey) { this.util = util; diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java index f49132f..ec7b7c8 100644 --- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java +++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java @@ -5,15 +5,19 @@ import at.gv.zustellung.app2mzs.xsd.*; import org.springframework.stereotype.Component; import java.math.BigInteger; +import java.util.List; import java.util.Map; +import java.util.stream.Stream; import static at.gv.zustellung.app2mzs.xsd.ClientType.clientTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.CustomHTTPHeaderType.*; import static at.gv.zustellung.app2mzs.xsd.ForwardResponseToServiceType.forwardResponseToServiceTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.KeyStoreType.keyStoreTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.MsgResponseSinksType.msgResponseSinksTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.SSLType.SSLTypeBuilder; import static at.gv.zustellung.app2mzs.xsd.SaveResponseToFileType.saveResponseToFileTypeBuilder; +import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; @Component @@ -41,6 +45,7 @@ public class ConfigUtil { public static final String FORWARD_RESPONSE_TO_SERVICE_KEY = "forward-response-to-service"; public static final String MZS_CLIENT_KEY = "mzs-client"; public static final String SERVICE_TIMEOUT_KEY = "service-timeout"; + public static final String CUSTOM_HTTP_HEADERS_KEY = "custom-http-headers"; /** @@ -95,11 +100,16 @@ public class ConfigUtil { SSLType ssl = sslParams.isEmpty() ? null : buildSSL(sslParams); + var customHeaderParams = filterMapByPrefix(clientParams, CUSTOM_HTTP_HEADERS_KEY); + var customHeaders = customHeaderParams.isEmpty() + ? null : convertMapToHeaders(customHeaderParams); + return clientTypeBuilder() .withURL(url) .withSSL(ssl) .withConnectionTimeout(connectionTimeout) .withReceiveTimeout(receiveTimeout) + .withCustomHTTPHeader(customHeaders) .build(); } @@ -243,6 +253,10 @@ public class ConfigUtil { builder.withReceiveTimeout(primary.getReceiveTimeout()); } + if (primary.getCustomHTTPHeader() != null) { + builder.withCustomHTTPHeader(merge(primary.getCustomHTTPHeader(), fallback.getCustomHTTPHeader())); + } + return builder.build(); } @@ -282,6 +296,26 @@ public class ConfigUtil { } + private List<CustomHTTPHeaderType> merge(List<CustomHTTPHeaderType> primary, List<CustomHTTPHeaderType> fallback) { + + if (fallback == null) return primary; + + var primaryMap = convertHeadersToMap(primary); + var fallbackMap = convertHeadersToMap(fallback); + + Map<String, String> mergedMap = Stream.of(fallbackMap, primaryMap) + .flatMap(map -> map.entrySet().stream()) + .collect(toMap( + Map.Entry::getKey, + entry -> entry.getValue().get(0), + (v1, v2) -> v2 + )); + + return convertMapToHeaders(mergedMap); + + } + + private MsgResponseSinksType merge(MsgResponseSinksType primary, MsgResponseSinksType fallback) { if (fallback == null) { @@ -340,4 +374,32 @@ public class ConfigUtil { } + /** + * Convert a Map that is indexed by header names into a List of CustomHTTPHeaders. + * @param customHeaderMap map of headers, indexed by header names. + * @return List of CustomHTTPHeaders + */ + public List<CustomHTTPHeaderType> convertMapToHeaders(Map<String, String> customHeaderMap) { + return customHeaderMap.entrySet().stream() + .map(e -> customHTTPHeaderTypeBuilder() + .withName(e.getKey()) + .withValue(e.getValue()) + .build()) + .collect(toList()); + } + + + /** + * Convert a List of CustomHTTPHeaders into a Map that is indexed by the header names. Values are wrapped in Lists. + * @param customHeaders List of CustomHTTPHeaders + * @return Map of headers, indexed by header names. + */ + public Map<String, List<String>> convertHeadersToMap(List<CustomHTTPHeaderType> customHeaders) { + return customHeaders + .stream() + .collect(toMap( + h -> h.getName(), + h -> List.of(h.getValue()))); + } + } |