From d0e4a0eaff64f58cf0fb544723a226f0b1ea16db Mon Sep 17 00:00:00 2001 From: Miguel Angel Cabrera Moya Date: Wed, 21 Feb 2018 12:37:30 +0100 Subject: [PATCH 1/2] Fix millisecond date serialization and add support for new IOC limit parameter --- .../alienvault/otx/connect/OTXConnection.java | 36 +++++++++++-------- .../otx/connect/OTXEndpointParameters.java | 4 +++ .../otx/model/pulse/OtxDateDeserializer.java | 6 ++-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alienvault/otx/connect/OTXConnection.java b/src/main/java/com/alienvault/otx/connect/OTXConnection.java index cffcd7b..0aa6748 100644 --- a/src/main/java/com/alienvault/otx/connect/OTXConnection.java +++ b/src/main/java/com/alienvault/otx/connect/OTXConnection.java @@ -21,7 +21,6 @@ import org.springframework.retry.RetryCallback; import org.springframework.retry.RetryContext; import org.springframework.retry.backoff.ExponentialBackOffPolicy; -import org.springframework.retry.policy.SimpleRetryPolicy; import org.springframework.retry.support.RetryTemplate; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; @@ -48,7 +47,7 @@ public class OTXConnection { private String otxHost = "otx.alienvault.com"; private String otxScheme = "https"; private Integer otxPort = null; - private static DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis(); + private static DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); private Log log = LogFactory.getLog(OTXConnection.class); /** @@ -257,16 +256,24 @@ private List getPulses(Map endpointParametersMa } private List getPagedResults(Map endpointParametersMap, Page page, OTXEndpoints endpoint) throws MalformedURLException, URISyntaxException { - if (endpointParametersMap == null || !endpointParametersMap.containsKey(OTXEndpointParameters.LIMIT)){ - Map newParams; - if (endpointParametersMap != null) { - newParams = new HashMap(endpointParametersMap); - }else{ - newParams = new HashMap(); - } - newParams.put(OTXEndpointParameters.LIMIT, 20); - endpointParametersMap = newParams; - } + Map newParams; + + if (endpointParametersMap == null) { + newParams = new HashMap(endpointParametersMap); + } else { + newParams = new HashMap(); + } + + if (!endpointParametersMap.containsKey(OTXEndpointParameters.LIMIT)) { + newParams.put(OTXEndpointParameters.LIMIT, 20); + } + + if (!endpointParametersMap.containsKey(OTXEndpointParameters.INDICATOR_LIMIT)) { + newParams.put(OTXEndpointParameters.INDICATOR_LIMIT, 10000); + } + + endpointParametersMap = newParams; + List pulseList = new ArrayList<>(); Page firstPage = executeGetRequest(endpoint, endpointParametersMap, page.getClass()); pulseList.addAll(firstPage.getResults()); @@ -275,7 +282,7 @@ private List getPagedResults(Map endpointParameters String nextPage = getParameterFromQueryString(rawQuery, OTXEndpointParameters.PAGE); // cskellie - passed in new parameter with page count to fetch next page of results. Map parametersMap = new HashMap<>(); - if (endpointParametersMap!=null) { + if (endpointParametersMap != null) { parametersMap.putAll(endpointParametersMap); } parametersMap.putAll(Collections.singletonMap(OTXEndpointParameters.PAGE, nextPage)); @@ -283,7 +290,6 @@ private List getPagedResults(Map endpointParameters pulseList.addAll(firstPage.getResults()); } return pulseList; - } private String getParameterFromQueryString(String rawQuery, OTXEndpointParameters page) { @@ -334,7 +340,7 @@ private URI buildURI(OTXEndpoints endpoint, Map endpoi String value = UriUtils.encodeQueryParam(otxEndpointParametersEntry.getValue().toString(), "UTF-8"); endpointString = endpointString + String.format("%s=%s&", parameterName, value); } catch (UnsupportedEncodingException e) { - log.error("Unpossible"); + log.error("Impossible"); } } } diff --git a/src/main/java/com/alienvault/otx/connect/OTXEndpointParameters.java b/src/main/java/com/alienvault/otx/connect/OTXEndpointParameters.java index 5f39fc0..e8ca6ee 100644 --- a/src/main/java/com/alienvault/otx/connect/OTXEndpointParameters.java +++ b/src/main/java/com/alienvault/otx/connect/OTXEndpointParameters.java @@ -8,6 +8,10 @@ public enum OTXEndpointParameters { * Limit is used by any Paged endpoint to set the page size */ LIMIT("limit", OTXEndpointParameterTypes.INTEGER), + /** + * Limits number of indicators per pulse to passed in number + */ + INDICATOR_LIMIT("indicator_limit", OTXEndpointParameterTypes.INTEGER), /** * Modified since is used by the SUBSCRIBED endpoint to limit the Pulses return. */ diff --git a/src/main/java/com/alienvault/otx/model/pulse/OtxDateDeserializer.java b/src/main/java/com/alienvault/otx/model/pulse/OtxDateDeserializer.java index 31a466b..5c40a4b 100644 --- a/src/main/java/com/alienvault/otx/model/pulse/OtxDateDeserializer.java +++ b/src/main/java/com/alienvault/otx/model/pulse/OtxDateDeserializer.java @@ -11,14 +11,16 @@ public class OtxDateDeserializer extends JsonDeserializer { + private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + private static final SimpleDateFormat FORMAT_MILLIS = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); + @Override public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); String date = jsonparser.getText(); try { - return format.parse(date); + return date.indexOf('.') > -1 ? FORMAT_MILLIS.parse(date) : FORMAT.parse(date); } catch (Exception e) { throw new RuntimeException(e); } From 368d00da83ab9acdc4fcb1a633ecedea1fae5446 Mon Sep 17 00:00:00 2001 From: Miguel Angel Cabrera Moya Date: Tue, 20 Mar 2018 10:50:20 +0100 Subject: [PATCH 2/2] Fix parameters in OTX request --- src/main/java/com/alienvault/otx/connect/OTXConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/alienvault/otx/connect/OTXConnection.java b/src/main/java/com/alienvault/otx/connect/OTXConnection.java index 0aa6748..b4c195b 100644 --- a/src/main/java/com/alienvault/otx/connect/OTXConnection.java +++ b/src/main/java/com/alienvault/otx/connect/OTXConnection.java @@ -258,7 +258,7 @@ private List getPulses(Map endpointParametersMa private List getPagedResults(Map endpointParametersMap, Page page, OTXEndpoints endpoint) throws MalformedURLException, URISyntaxException { Map newParams; - if (endpointParametersMap == null) { + if (endpointParametersMap != null) { newParams = new HashMap(endpointParametersMap); } else { newParams = new HashMap();