From 6b88eabcd302a0c37f1904b6e982331a39c9a202 Mon Sep 17 00:00:00 2001 From: Balasubramanyam Evani Date: Wed, 17 Nov 2021 15:41:56 +0530 Subject: [PATCH 1/2] Added feature to add custom headers to Service --- .../src/main/java/com/splunk/HttpService.java | 48 ++++++++++++++++++- splunk/src/main/java/com/splunk/Service.java | 1 + .../src/main/java/com/splunk/ServiceArgs.java | 9 ++++ .../src/test/java/com/splunk/ServiceTest.java | 18 ++++++- 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/splunk/src/main/java/com/splunk/HttpService.java b/splunk/src/main/java/com/splunk/HttpService.java index 9ce22781..e26ce4ac 100644 --- a/splunk/src/main/java/com/splunk/HttpService.java +++ b/splunk/src/main/java/com/splunk/HttpService.java @@ -23,10 +23,16 @@ import java.io.OutputStreamWriter; import java.net.*; import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.Set; /** * The {@code HttpService} class represents a generic HTTP service at a given @@ -79,11 +85,20 @@ public boolean verify(String s, SSLSession sslSession) { private String prefix = null; + private static final Set filtertHttpHeaderKeys = Collections.unmodifiableSet( + new HashSet(Arrays.asList( + "User-Agent", + "Accept" + )) + ); + static Map defaultHeader = new HashMap() {{ put("User-Agent", "splunk-sdk-java/1.7.1"); put("Accept", "*/*"); }}; - + + protected Map customHeaders = new HashMap<>(); + protected SimpleCookieStore cookieStore = new SimpleCookieStore(); /** @@ -193,6 +208,21 @@ public String getHost() { public int getPort() { return this.port; } + + /** + * Sets Custom Headers of this service + * + * @param headers + */ + public void setCustomHeaders(Map headers) { + if (Objects.nonNull(headers) && !headers.isEmpty()) { + Map fitleredCustomHeaders = headers.entrySet() + .stream() + .filter(e -> !filtertHttpHeaderKeys.contains(e.getKey())) + .collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue())); + customHeaders.putAll(fitleredCustomHeaders); + } + } /** * Returns the SSL security protocol of this service. @@ -258,6 +288,15 @@ public URL getUrl(String path) { throw new RuntimeException(e.getMessage(), e); } } + + /** + * Returns all the stored custom headers + * + * @return customHeaders The custom headers + */ + public Map getCustomHeaders() { + return customHeaders; + } /** * Returns all the stored cookies @@ -441,6 +480,13 @@ public ResponseMessage send(String path, RequestMessage request) { if (header.containsKey(key)) continue; cn.setRequestProperty(key, entry.getValue()); } + // Add Custom Headers + for (Entry entry: customHeaders.entrySet()) { + String key = entry.getKey(); + if (!header.containsKey(key)) { + cn.setRequestProperty(key, entry.getValue()); + } + } // Add cookies to header cn.setRequestProperty("Cookie", cookieStore.getCookies()); diff --git a/splunk/src/main/java/com/splunk/Service.java b/splunk/src/main/java/com/splunk/Service.java index 8856c1e2..a85e9d17 100644 --- a/splunk/src/main/java/com/splunk/Service.java +++ b/splunk/src/main/java/com/splunk/Service.java @@ -152,6 +152,7 @@ public Service(ServiceArgs args) { this.httpsHandler = Args.get(args, "httpsHandler", null); this.setSslSecurityProtocol(Args.get(args, "SSLSecurityProtocol", Service.getSslSecurityProtocol())); this.addCookie((String)args.get("cookie")); + this.setCustomHeaders((Map) args.get("customHeaders")); } /** diff --git a/splunk/src/main/java/com/splunk/ServiceArgs.java b/splunk/src/main/java/com/splunk/ServiceArgs.java index 38670741..bf8f7f03 100644 --- a/splunk/src/main/java/com/splunk/ServiceArgs.java +++ b/splunk/src/main/java/com/splunk/ServiceArgs.java @@ -17,6 +17,7 @@ package com.splunk; import java.net.URLStreamHandler; +import java.util.Map; /** * The {@code ServiceArgs} class contains a collection of arguments that are @@ -164,4 +165,12 @@ public void setUsername(String username) { public void setCookie(String cookie) { this.put("cookie", cookie); } + + /** + * @param httpHeaders + * A map of customHeaders. + */ + public void setHttpHeaders(Map httpHeaders) { + this.put("customHeaders", httpHeaders); + } } diff --git a/splunk/src/test/java/com/splunk/ServiceTest.java b/splunk/src/test/java/com/splunk/ServiceTest.java index b1681afe..727434f5 100644 --- a/splunk/src/test/java/com/splunk/ServiceTest.java +++ b/splunk/src/test/java/com/splunk/ServiceTest.java @@ -146,7 +146,23 @@ public void testLogin() { service.logout(); checkNotLoggedIn(service); } - + + @Test + public void testServiceWithCustomHeaders() { + ServiceArgs args = new ServiceArgs(); + args.setHost((String) command.opts.get("host")); + args.setPort((Integer) command.opts.get("port")); + args.setScheme((String) command.opts.get("scheme")); + args.setUsername((String) command.opts.get("username")); + args.setPassword((String) command.opts.get("password")); + args.setHttpHeaders(new HashMap() {{ + put("some header key", "some value"); + }}); + Service service = new Service(args); + Map customHeaders = service.getCustomHeaders(); + Assert.assertEquals(customHeaders.get("some header key"), "some value"); + } + @Test public void testLoginWithoutArguments() { ServiceArgs args = new ServiceArgs(); From 3f28413f7a780517f049295ea6a2c33f0736d55e Mon Sep 17 00:00:00 2001 From: Balasubramanyam Evani Date: Fri, 19 Nov 2021 00:02:29 +0530 Subject: [PATCH 2/2] Removed filter logic while setting custom http headers --- .../src/main/java/com/splunk/HttpService.java | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/splunk/src/main/java/com/splunk/HttpService.java b/splunk/src/main/java/com/splunk/HttpService.java index e26ce4ac..41d50a64 100644 --- a/splunk/src/main/java/com/splunk/HttpService.java +++ b/splunk/src/main/java/com/splunk/HttpService.java @@ -23,16 +23,11 @@ import java.io.OutputStreamWriter; import java.net.*; import java.security.cert.X509Certificate; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; -import java.util.stream.Collectors; -import java.util.Set; /** * The {@code HttpService} class represents a generic HTTP service at a given @@ -85,13 +80,6 @@ public boolean verify(String s, SSLSession sslSession) { private String prefix = null; - private static final Set filtertHttpHeaderKeys = Collections.unmodifiableSet( - new HashSet(Arrays.asList( - "User-Agent", - "Accept" - )) - ); - static Map defaultHeader = new HashMap() {{ put("User-Agent", "splunk-sdk-java/1.7.1"); put("Accept", "*/*"); @@ -215,12 +203,8 @@ public int getPort() { * @param headers */ public void setCustomHeaders(Map headers) { - if (Objects.nonNull(headers) && !headers.isEmpty()) { - Map fitleredCustomHeaders = headers.entrySet() - .stream() - .filter(e -> !filtertHttpHeaderKeys.contains(e.getKey())) - .collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue())); - customHeaders.putAll(fitleredCustomHeaders); + if (Objects.nonNull(headers)) { + customHeaders = headers; } }