Giter Site home page Giter Site logo

otx-java-sdk's People

Contributors

cristobalrosa avatar doradito avatar jaimeblasco avatar rspitler-alien avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

otx-java-sdk's Issues

OTX-Java-SDK retrieve pulse and other information on periodic basic.

I want to run OTX-Java-SDK infinitely in background , like using deoman thread. For this i am using Future and ExecuteService. It is working fine for first time when it runs, but when i resubmit the task after each one minute it does not retrieve it. I have also increase the time from 1 minute to 1 hour, but still it does work for me.

I am submitting my code please check and suggest me the solution.

package com.alienvault.otx;

import com.alienvault.otx.connect.ConnectionUtil;
import com.alienvault.otx.connect.OTXConnection;
import com.alienvault.otx.model.indicator.Indicator;
import com.alienvault.otx.model.indicator.IndicatorType;
import com.alienvault.otx.model.pulse.Pulse;
import com.fasterxml.jackson.databind.deser.std.DateDeserializers.CalendarDeserializer;

import org.apache.commons.cli.*;
import org.joda.time.DateTime;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.StringUtils;
import org.springframework.web.client.HttpClientErrorException;

import java.io.;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.
;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

@SpringBootApplication
public class CommandlineRunner {
private static final ExecutorService threadpool = Executors.newFixedThreadPool(30);
private static Options getOptions() {
Options opts = new Options();
opts.addOption("k", "key", true, "API Key from OTX Settings Page (https://otx.alienvault.com/settings/).");
opts.addOption("o", "output-file", true, "File to save indicators");
opts.addOption("d", "date", true, "Only pulses modified since the date provided will be downloaded");
opts.addOption("i", "indicators", true, "Indicator types to save to the file. Provide a comma separated string of indicators (" + IndicatorType.toTypeList() + ")");
return opts;

}

public static void main(String[] args) throws InterruptedException {
    ConfigurableApplicationContext run = SpringApplication.run(CommandlineRunner.class,args);

    List<String> filteredArgs = new ArrayList<>();
    for (String arg : args) {
        if (!"--spring.output.ansi.enabled=always".equals(arg))
            filteredArgs.add(arg);
        System.out.println(arg);
    }
    GetOXTData otx = new GetOXTData(filteredArgs, run);
    System.out.println("Submitting Task ..."); 
    Future future = threadpool.submit(otx); 

    System.out.println("Task is submitted");
    int counter = 0;
    while (true) {
        if(future.isDone()){
            if(counter == 0){
                otx.setDate(new DateTime(Calendar.getInstance().getTime()));
                counter++;
            } else{

            }
            DateTime gdate = otx.getDate();
            Calendar calendar = gdate.toCalendar(Locale.getDefault());
            Date d1 = calendar.getTime();
            Date d2 = Calendar.getInstance().getTime();

            int diffInMins = (int)((d2.getTime() - d1.getTime())/(60*60*1000));
            if(diffInMins < 59){
                diffInMins = 60;
            } else {
                diffInMins = 60;
            }
            calendar.add(Calendar.MINUTE, diffInMins);
            DateTime d = new DateTime(calendar.getTime());
            if(Calendar.getInstance().compareTo(calendar) >= 0){
                otx.setDate(d);
                System.out.println("running for next " + diffInMins+ " Minutes"); 
                Future submit = threadpool.submit(otx);
                future = submit;
            } else{
                Thread.sleep(36000000);
            }
        } 
    }

// while(!future.isDone()){
// System.out.println("Not completed yet, continue for next 1 seconds");
// Thread.sleep(1000);
// }

// threadpool.shutdown();
}

private static Set<IndicatorType> parseTypes(String types) throws ParseException {
    Set<String> strings = StringUtils.commaDelimitedListToSet(types);
    Set<IndicatorType> ret = new HashSet<>();
    for (String string : strings) {
        try {
            ret.add(IndicatorType.valueOf(string.toUpperCase()));
        } catch (IllegalArgumentException e) {
            throw new ParseException("Error parsing enum type: " +string);
        }
    }
    return ret;
}

private static PrintWriter getPrintStream(File dest) throws FileNotFoundException {
    if (dest == null)
        return new PrintWriter(System.out);
    else
        return new PrintWriter(new FileOutputStream(dest));
}

private static void printUsage() {
    HelpFormatter formatter = new HelpFormatter();
    formatter.setWidth(80);
    formatter.printHelp("otx", getOptions());
}

private static class GetOXTData implements Callable { 

    List<String> filteredArgs = null;
    CommandLineParser parser = null;
    CommandLine cmd = null;
    ConfigurableApplicationContext run = null;
    PrintWriter outs = null;
    Set<IndicatorType> types = new HashSet<>(Arrays.asList(IndicatorType.values()));

    String apiKey;
    DateTime date = null;
    File dest = null;



    public DateTime getDate() {
        return date;
    }

    public void setDate(DateTime date) {
        this.date = date;
    }

    public GetOXTData(List<String> filteredArgs, ConfigurableApplicationContext run) {

        this.filteredArgs = filteredArgs;
        this.run = run;

        parser = new BasicParser();
        try {
            cmd = parser.parse(getOptions(), filteredArgs.toArray(new String[filteredArgs.size()]));
            if (cmd.hasOption('k'))
                apiKey = cmd.getOptionValue('k');
            else
                throw new ParseException("-key is a required option");
            if (cmd.hasOption('d'))
                date = DateTime.parse(cmd.getOptionValue('d'));
            if (cmd.hasOption('o'))
                dest = new File(cmd.getOptionValue('o'));

            outs = getPrintStream(dest);

            if (cmd.hasOption('i'))
                types = parseTypes(cmd.getOptionValue('i'));

        } catch (ParseException e) {
            System.out.println("Error parsing commandline options: " + e.getMessage());
            printUsage();
        } catch (FileNotFoundException e) {
            System.out.println("Error writing to the output file: " + e.getMessage());
        }
    }

    @Override
    public Boolean call() {

        boolean isDone = false;
        try {

            OTXConnection connection = ConnectionUtil.getOtxConnection(run.getEnvironment(), apiKey);
            System.out.println("--------------------------- Connection Established -----------------------");
            List<Pulse> pulses;
            if (date != null){
                pulses = connection.getPulsesSinceDate(date);
                System.out.println("--------------------------- all pulse getting from date -----------------------");
            } else{
                pulses = connection.getAllPulses();
                System.out.println("--------------------------- All pulse getting, no date specify -----------------------");
            }
            System.out.println("--------------------------- Looping pulse -----------------------");
            for (Pulse pulse : pulses) {
                List<Indicator> indicators = pulse.getIndicators();
                for (Indicator indicator : indicators) {
                    if (types.contains(indicator.getType())) {
                        outs.println(indicator.getIndicator());
                        outs.flush();
                    }
                }
            }
            isDone = true;
        } catch (HttpClientErrorException ex) {
            System.out.println("Error retrieving data: " + ex.getMessage());
        } catch (URISyntaxException | MalformedURLException e) {
            isDone = false;
            System.out.println("Error configuring OTX connection: " + e.getMessage());
        }
        return isDone;
    }
}

}

Failed tests for Pulse

Hi, I have encounter these two failed test :
OtxJavaSdkApplicationTests.testListEvents:144 All events not larger then a subset
OtxJavaSdkApplicationTests.testSearchPulses:95 Could not find pulse

and also this error Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project DirectConnect-Java-SDK

My Environment :
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: C:\Users\TMF\Documents\apache-maven-3.3.9\bin..
Java version: 1.8.0_40, vendor: Oracle Corporation
Java home: C:\Program Files (x86)\Java\jdk1.8.0_40\jre
Default locale: en_MY, platform encoding: Cp1252
OS name: "windows 8.1", version: "6.3", arch: "x86", family: "dos"

2016-10-21 22:13:20.055 INFO 12040 --- [main] o.a.maven.surefire.booter.ForkedBooter : Starting ForkedBooter v2.19.1 on LAPTOP-N3KL0FO7 with PID 12040 (C:\Users\TMF.m2\repository\org\apache\maven\surefire\surefire-booter\2.19.1\surefire-booter-2.19.1.jar started by TMF in C:\Users\TMF\Documents\GitHub\AlienVault\OTX-Java-SDK)
2016-10-21 22:13:20.727 INFO 12040 --- [main] o.a.maven.surefire.booter.ForkedBooter : Started ForkedBooter in 0.858 seconds (JVM running for 1.671)
Tests run: 11, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 138.47 sec <<< FAILURE! - in com.alienvault.otx.OtxJavaSdkApplicationTests
testListEvents(com.alienvault.otx.OtxJavaSdkApplicationTests) Time elapsed: 2.147 sec <<< FAILURE!
java.lang.AssertionError: All events not larger then a subset
at com.alienvault.otx.OtxJavaSdkApplicationTests.testListEvents(OtxJavaSdkApplicationTests.java:144)

testSearchPulses(com.alienvault.otx.OtxJavaSdkApplicationTests) Time elapsed: 0.513 sec <<< FAILURE!
java.lang.AssertionError: Could not find pulse
at com.alienvault.otx.OtxJavaSdkApplicationTests.testSearchPulses(OtxJavaSdkApplicationTests.java:95)

Results :

Failed tests:
OtxJavaSdkApplicationTests.testListEvents:144 All events not larger then a subset
OtxJavaSdkApplicationTests.testSearchPulses:95 Could not find pulse

Tests run: 11, Failures: 2, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:36 min
[INFO] Finished at: 2016-10-21T22:15:38+08:00
[INFO] Final Memory: 17M/44M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project DirectConnect-Java-SDK: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Users\TMF\Documents\GitHub\AlienVault\OTX-Java-SDK\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

OTX-Java-SDK-Master failed while running mvn install, ResourceAccessException: I/O error on GET request

I have download/clone OTX-Java-SDK from github and set api key, but i am getting below error while running program or performing mvn install.

Error: "org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://otx.alienvault.com/api/v1/pulses/5756b9746eb8c60134a9e203":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1351) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:156) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:925) at sun.security.ssl.Handshaker.process_record(Handshaker.java:860) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1043) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:81) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:569) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:545) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:253) at com.alienvault.otx.connect.OTXConnection.executeGetRequest(OTXConnection.java:285) at com.alienvault.otx.connect.OTXConnection.getPulseDetails(OTXConnection.java:163) at com.alienvault.otx.OtxJavaSdkApplicationTests.testGetPulseDetails(OtxJavaSdkApplicationTests.java:88) "

I don't understand why i am getting this issue. Is it program related or certificate related. Please suggest me the solution.

Screenshot:

error

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.