From e6fadbcafc663092276fef2710edc10bbf62bee3 Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Thu, 31 Oct 2019 13:55:22 +0100 Subject: [PATCH 01/17] Added an interface to control Vega with python, using py4j. Only builds for Linux. --- build.xml | 7 + build/config/build.properties | 10 +- dependencies/lib/py4j0.10.6.jar | Bin 0 -> 115175 bytes .../com/subgraph/vega/api/scanner/IScan.java | 5 + .../modules/IScannerModuleRegistry.java | 2 + .../com.subgraph.vega.application/.classpath | 5 + .../META-INF/MANIFEST.MF | 5 + .../build.properties | 3 +- .../com.subgraph.vega.application/build.xml | 406 ++++++++++++++++++ .../extra-bundles/py4j0.10.6.jar | Bin 0 -> 115175 bytes .../javaCompiler...args | 104 +++++ .../com.subgraph.vega.application/plugin.xml | 2 +- .../vega/application/Application.java | 12 +- .../subgraph/vega/application/EntryPoint.java | 39 ++ .../subgraph/vega/export/AlertExporter.java | 75 +++- .../subgraph/vega/export/ReportRenderer.java | 4 +- .../modules/ScannerModuleRepository.java | 20 + .../modules/scripting/ScriptLoader.java | 16 + .../com/subgraph/vega/impl/scanner/Scan.java | 9 + .../com.subgraph.vega.ui.scanner/.classpath | 1 + .../vega/ui/scanner/MyScanExecutor.java | 392 +++++++++++++++++ .../vega/ui/scanner/ScanExecutor.java | 17 +- .../vega/ui/scanner/ScanProbeTask.java | 27 +- .../ui/util/export/ExportWizardPageOne.java | 3 +- .../ui/util/export/ExportWizardPageThree.java | 11 +- .../ui/util/export/ExportWizardPageTwo.java | 8 +- 26 files changed, 1154 insertions(+), 29 deletions(-) create mode 100644 dependencies/lib/py4j0.10.6.jar create mode 100644 platform/com.subgraph.vega.application/build.xml create mode 100644 platform/com.subgraph.vega.application/extra-bundles/py4j0.10.6.jar create mode 100644 platform/com.subgraph.vega.application/javaCompiler...args create mode 100644 platform/com.subgraph.vega.application/src/com/subgraph/vega/application/EntryPoint.java create mode 100644 platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java diff --git a/build.xml b/build.xml index 14f68b2d..0f5a45f2 100644 --- a/build.xml +++ b/build.xml @@ -8,6 +8,13 @@ + + + + lib.dir: dependencies + + Classpath: ${classpathProp} + diff --git a/build/config/build.properties b/build/config/build.properties index 639c821a..dfce0b61 100644 --- a/build/config/build.properties +++ b/build/config/build.properties @@ -15,12 +15,12 @@ archivePrefix=vega collectingFolder=${archivePrefix} configs= \ - win32, win32, x86 & \ - win32,win32,x86_64 & \ - linux, gtk, x86 & \ + #win32, win32, x86 & \ + #win32,win32,x86_64 & \ + #linux, gtk, x86 & \ linux, gtk, x86_64 & \ - macosx, cocoa, x86 & \ - macosx, cocoa, x86_64 + #macosx, cocoa, x86 & \ + #macosx, cocoa, x86_64 # By default PDE creates one archive (result) per entry listed in the configs property. # Setting this value to true will cause PDE to only create one output containing all diff --git a/dependencies/lib/py4j0.10.6.jar b/dependencies/lib/py4j0.10.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..5a5115e839a646eb37773203ceb571f2eef5d757 GIT binary patch literal 115175 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öOr3Vuh=384&K$7QwE> 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 literal 0 HcmV?d00001 diff --git a/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/IScan.java b/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/IScan.java index ac9fc2d4..58a65474 100644 --- a/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/IScan.java +++ b/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/IScan.java @@ -13,6 +13,7 @@ import java.net.URI; import java.util.List; +import com.subgraph.vega.api.model.alerts.IScanInstance; import com.subgraph.vega.api.scanner.modules.IScannerModule; public interface IScan { @@ -48,4 +49,8 @@ public interface IScan { void pauseScan(); void unpauseScan(); boolean isPausedScan(); + + IScanInstance getScanInstance(); + + void useAllModules(); } diff --git a/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/modules/IScannerModuleRegistry.java b/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/modules/IScannerModuleRegistry.java index 1cfbd0f3..6f7e45f2 100644 --- a/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/modules/IScannerModuleRegistry.java +++ b/platform/com.subgraph.vega.api/src/com/subgraph/vega/api/scanner/modules/IScannerModuleRegistry.java @@ -16,9 +16,11 @@ public interface IScannerModuleRegistry { final static int PROXY_SCAN_ID = -1; void runDomTests(); List getResponseProcessingModules(); + List getAllResponseProcessingModules(); List updateResponseProcessingModules(List currentModules); List getBasicModules(); + List getAllBasicModules(); List updateBasicModules(List currentModules); } diff --git a/platform/com.subgraph.vega.application/.classpath b/platform/com.subgraph.vega.application/.classpath index 16d067f2..c99309a9 100644 --- a/platform/com.subgraph.vega.application/.classpath +++ b/platform/com.subgraph.vega.application/.classpath @@ -1,7 +1,12 @@ + + + + + diff --git a/platform/com.subgraph.vega.application/META-INF/MANIFEST.MF b/platform/com.subgraph.vega.application/META-INF/MANIFEST.MF index e74967c4..a95c12ac 100644 --- a/platform/com.subgraph.vega.application/META-INF/MANIFEST.MF +++ b/platform/com.subgraph.vega.application/META-INF/MANIFEST.MF @@ -14,9 +14,12 @@ Import-Package: com.subgraph.vega.api.console, com.subgraph.vega.api.events, com.subgraph.vega.api.http.requests, com.subgraph.vega.api.model, + com.subgraph.vega.api.model.identity, com.subgraph.vega.api.paths, com.subgraph.vega.api.vuge, + com.subgraph.vega.export, com.subgraph.vega.ui.http, + com.subgraph.vega.ui.scanner, com.subgraph.vega.ui.util.images, com.subgraph.vega.ui.util.preferences, org.apache.http;version="4.1.0", @@ -25,3 +28,5 @@ Import-Package: com.subgraph.vega.api.console, org.eclipse.ui.internal.console Export-Package: com.subgraph.vega.ui.util Service-Component: OSGI-INF/path-finder.xml, OSGI-INF/console.xml +Bundle-ClassPath: extra-bundles/py4j0.10.6.jar, + . diff --git a/platform/com.subgraph.vega.application/build.properties b/platform/com.subgraph.vega.application/build.properties index 807acfe7..fb4752cf 100644 --- a/platform/com.subgraph.vega.application/build.properties +++ b/platform/com.subgraph.vega.application/build.properties @@ -5,5 +5,6 @@ bin.includes = plugin.xml,\ icons/,\ splash.bmp,\ plugin_customization.ini,\ - OSGI-INF/ + OSGI-INF/,\ + extra-bundles/py4j0.10.6.jar source.. = src/ diff --git a/platform/com.subgraph.vega.application/build.xml b/platform/com.subgraph.vega.application/build.xml new file mode 100644 index 00000000..f658fcf8 --- /dev/null +++ b/platform/com.subgraph.vega.application/build.xml @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/com.subgraph.vega.application/extra-bundles/py4j0.10.6.jar b/platform/com.subgraph.vega.application/extra-bundles/py4j0.10.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..5a5115e839a646eb37773203ceb571f2eef5d757 GIT binary patch literal 115175 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öOr3Vuh=384&K$7QwE> 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 literal 0 HcmV?d00001 diff --git a/platform/com.subgraph.vega.application/javaCompiler...args b/platform/com.subgraph.vega.application/javaCompiler...args new file mode 100644 index 00000000..0dbd22e5 --- /dev/null +++ b/platform/com.subgraph.vega.application/javaCompiler...args @@ -0,0 +1,104 @@ +#ADAPTER#ACCESS#com.subgraph.vega.api/bin/[+com/subgraph/vega/api/console/*:+com/subgraph/vega/api/events/*:+com/subgraph/vega/api/http/requests/*:+com/subgraph/vega/api/model/*:+com/subgraph/vega/api/paths/*:+com/subgraph/vega/api/vuge/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.api/@dot[+com/subgraph/vega/api/console/*:+com/subgraph/vega/api/events/*:+com/subgraph/vega/api/http/requests/*:+com/subgraph/vega/api/model/*:+com/subgraph/vega/api/paths/*:+com/subgraph/vega/api/vuge/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/com.google.guava_21.0.0.v20170206-1425.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/javax.annotation_1.2.0.v201602091430.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.osgi_3.12.50.v20170928-1321.jar[~org/eclipse/core/runtime/adaptor/*:~org/eclipse/core/runtime/internal/adaptor/*:+org/eclipse/equinox/log/*:+org/eclipse/osgi/container/*:+org/eclipse/osgi/container/builders/*:+org/eclipse/osgi/container/namespaces/*:+org/eclipse/osgi/framework/console/*:+org/eclipse/osgi/framework/eventmgr/*:~org/eclipse/osgi/framework/internal/reliablefile/*:+org/eclipse/osgi/framework/log/*:~org/eclipse/osgi/framework/util/*:~org/eclipse/osgi/internal/debug/*:~org/eclipse/osgi/internal/framework/*:~org/eclipse/osgi/internal/hookregistry/*:~org/eclipse/osgi/internal/loader/*:~org/eclipse/osgi/internal/loader/buddy/*:~org/eclipse/osgi/internal/loader/classpath/*:~org/eclipse/osgi/internal/loader/sources/*:~org/eclipse/osgi/internal/location/*:~org/eclipse/osgi/internal/messages/*:~org/eclipse/osgi/internal/provisional/service/security/*:~org/eclipse/osgi/internal/provisional/verifier/*:~org/eclipse/osgi/internal/service/security/*:~org/eclipse/osgi/internal/serviceregistry/*:~org/eclipse/osgi/internal/signedcontent/*:~org/eclipse/osgi/internal/url/*:+org/eclipse/osgi/launch/*:+org/eclipse/osgi/report/resolution/*:+org/eclipse/osgi/service/datalocation/*:+org/eclipse/osgi/service/debug/*:+org/eclipse/osgi/service/environment/*:+org/eclipse/osgi/service/localization/*:+org/eclipse/osgi/service/pluginconversion/*:+org/eclipse/osgi/service/resolver/*:+org/eclipse/osgi/service/runnable/*:+org/eclipse/osgi/service/security/*:+org/eclipse/osgi/service/urlconversion/*:+org/eclipse/osgi/signedcontent/*:~org/eclipse/osgi/storage/*:~org/eclipse/osgi/storage/bundlefile/*:~org/eclipse/osgi/storage/url/reference/*:+org/eclipse/osgi/storagemanager/*:+org/eclipse/osgi/util/*:+org/osgi/dto/*:+org/osgi/framework/*:+org/osgi/framework/dto/*:+org/osgi/framework/hooks/bundle/*:+org/osgi/framework/hooks/resolver/*:+org/osgi/framework/hooks/service/*:+org/osgi/framework/hooks/weaving/*:+org/osgi/framework/launch/*:+org/osgi/framework/namespace/*:+org/osgi/framework/startlevel/*:+org/osgi/framework/startlevel/dto/*:+org/osgi/framework/wiring/*:+org/osgi/framework/wiring/dto/*:+org/osgi/resource/*:+org/osgi/resource/dto/*:+org/osgi/service/condpermadmin/*:+org/osgi/service/log/*:+org/osgi/service/packageadmin/*:+org/osgi/service/permissionadmin/*:+org/osgi/service/resolver/*:+org/osgi/service/startlevel/*:+org/osgi/service/url/*:+org/osgi/util/tracker/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.osgi.compatibility.state_1.1.0.v20170516-1513.jar[~org/eclipse/core/runtime/adaptor/*:~org/eclipse/core/runtime/internal/adaptor/*:+org/eclipse/equinox/log/*:+org/eclipse/osgi/container/*:+org/eclipse/osgi/container/builders/*:+org/eclipse/osgi/container/namespaces/*:+org/eclipse/osgi/framework/console/*:+org/eclipse/osgi/framework/eventmgr/*:~org/eclipse/osgi/framework/internal/reliablefile/*:+org/eclipse/osgi/framework/log/*:~org/eclipse/osgi/framework/util/*:~org/eclipse/osgi/internal/debug/*:~org/eclipse/osgi/internal/framework/*:~org/eclipse/osgi/internal/hookregistry/*:~org/eclipse/osgi/internal/loader/*:~org/eclipse/osgi/internal/loader/buddy/*:~org/eclipse/osgi/internal/loader/classpath/*:~org/eclipse/osgi/internal/loader/sources/*:~org/eclipse/osgi/internal/location/*:~org/eclipse/osgi/internal/messages/*:~org/eclipse/osgi/internal/provisional/service/security/*:~org/eclipse/osgi/internal/provisional/verifier/*:~org/eclipse/osgi/internal/service/security/*:~org/eclipse/osgi/internal/serviceregistry/*:~org/eclipse/osgi/internal/signedcontent/*:~org/eclipse/osgi/internal/url/*:+org/eclipse/osgi/launch/*:+org/eclipse/osgi/report/resolution/*:+org/eclipse/osgi/service/datalocation/*:+org/eclipse/osgi/service/debug/*:+org/eclipse/osgi/service/environment/*:+org/eclipse/osgi/service/localization/*:+org/eclipse/osgi/service/pluginconversion/*:+org/eclipse/osgi/service/resolver/*:+org/eclipse/osgi/service/runnable/*:+org/eclipse/osgi/service/security/*:+org/eclipse/osgi/service/urlconversion/*:+org/eclipse/osgi/signedcontent/*:~org/eclipse/osgi/storage/*:~org/eclipse/osgi/storage/bundlefile/*:~org/eclipse/osgi/storage/url/reference/*:+org/eclipse/osgi/storagemanager/*:+org/eclipse/osgi/util/*:+org/osgi/dto/*:+org/osgi/framework/*:+org/osgi/framework/dto/*:+org/osgi/framework/hooks/bundle/*:+org/osgi/framework/hooks/resolver/*:+org/osgi/framework/hooks/service/*:+org/osgi/framework/hooks/weaving/*:+org/osgi/framework/launch/*:+org/osgi/framework/namespace/*:+org/osgi/framework/startlevel/*:+org/osgi/framework/startlevel/dto/*:+org/osgi/framework/wiring/*:+org/osgi/framework/wiring/dto/*:+org/osgi/resource/*:+org/osgi/resource/dto/*:+org/osgi/service/condpermadmin/*:+org/osgi/service/log/*:+org/osgi/service/packageadmin/*:+org/osgi/service/permissionadmin/*:+org/osgi/service/resolver/*:+org/osgi/service/startlevel/*:+org/osgi/service/url/*:+org/osgi/util/tracker/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.html/bin/[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.html/@dot[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.jsoup_1.7.2.v201411291515.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.httpcomponents.httpcore_4.4.6.v20170210-0925.jar[+org/apache/http/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.httpcomponents.httpclient_4.5.2.v20170210-0925.jar[+org/apache/http/client/methods/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.commons.codec_1.9.0.v20170208-1614.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.commons.logging_1.1.1.v201101211721.jar[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.http/bin/[+com/subgraph/vega/ui/http/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.http/@dot[+com/subgraph/vega/ui/http/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.httpeditor/bin/[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.httpeditor/@dot[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.hexeditor/bin/[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.hexeditor/@dot[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ui_3.109.0.v20170411-1742.jar[~org/eclipse/ui/internal/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.runtime_3.13.0.v20170207-1030.jar[~org/eclipse/core/internal/preferences/legacy/*:~org/eclipse/core/internal/runtime/*:+org/eclipse/core/runtime/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/javax.inject_1.0.0.v20091030.jar[+javax/inject/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.equinox.common_3.9.0.v20170207-1454.jar[~org/eclipse/core/internal/boot/*:~org/eclipse/core/internal/runtime/*:+org/eclipse/core/runtime/*:+org/eclipse/equinox/events/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.felix.gogo.command_0.10.0.v201209301215.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.osgi.services_3.6.0.v20170228-1906.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.osgi.util_3.4.0.v20170111-1608.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/javax.xml_1.3.4.v201005080400.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/javax.servlet_3.1.0.v201410161800.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.jobs_3.9.2.v20171030-1027.jar[~org/eclipse/core/internal/jobs/*:+org/eclipse/core/runtime/jobs/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.equinox.registry_3.7.0.v20170222-1344.jar[~org/eclipse/core/internal/adapter/*:~org/eclipse/core/internal/registry/*:~org/eclipse/core/internal/registry/osgi/*:~org/eclipse/core/internal/registry/spi/*:+org/eclipse/core/runtime/*:+org/eclipse/core/runtime/dynamichelpers/*:+org/eclipse/core/runtime/spi/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.equinox.preferences_3.7.0.v20170126-2132.jar[~org/eclipse/core/internal/preferences/*:~org/eclipse/core/internal/preferences/exchange/*:+org/eclipse/core/runtime/preferences/*:+org/osgi/service/prefs/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.contenttype_3.6.0.v20170207-1037.jar[~org/eclipse/core/internal/content/*:+org/eclipse/core/runtime/content/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.equinox.app_1.3.400.v20150715-1528.jar[+org/eclipse/equinox/app/*:~org/eclipse/equinox/internal/app/*:+org/osgi/service/application/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.swt_3.106.2.v20171129-0543.jar[+org/eclipse/swt/*:+org/eclipse/swt/accessibility/*:+org/eclipse/swt/awt/*:+org/eclipse/swt/browser/*:+org/eclipse/swt/custom/*:+org/eclipse/swt/dnd/*:+org/eclipse/swt/events/*:+org/eclipse/swt/graphics/*:+org/eclipse/swt/layout/*:+org/eclipse/swt/opengl/*:+org/eclipse/swt/printing/*:+org/eclipse/swt/program/*:+org/eclipse/swt/widgets/*:~org/eclipse/swt/internal/*:~org/eclipse/swt/internal/image/*:~org/eclipse/swt/internal/accessibility/gtk/*:~org/eclipse/swt/internal/cairo/*:~org/eclipse/swt/internal/gtk/*:~org/eclipse/swt/internal/mozilla/*:~org/eclipse/swt/internal/opengl/glx/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64_3.106.2.v20171129-0543.jar[+org/eclipse/swt/*:+org/eclipse/swt/accessibility/*:+org/eclipse/swt/awt/*:+org/eclipse/swt/browser/*:+org/eclipse/swt/custom/*:+org/eclipse/swt/dnd/*:+org/eclipse/swt/events/*:+org/eclipse/swt/graphics/*:+org/eclipse/swt/layout/*:+org/eclipse/swt/opengl/*:+org/eclipse/swt/printing/*:+org/eclipse/swt/program/*:+org/eclipse/swt/widgets/*:~org/eclipse/swt/internal/*:~org/eclipse/swt/internal/image/*:~org/eclipse/swt/internal/accessibility/gtk/*:~org/eclipse/swt/internal/cairo/*:~org/eclipse/swt/internal/gtk/*:~org/eclipse/swt/internal/mozilla/*:~org/eclipse/swt/internal/opengl/glx/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.jface_3.13.2.v20171022-1656.jar[+org/eclipse/jface/*:+org/eclipse/jface/action/*:+org/eclipse/jface/action/images/*:+org/eclipse/jface/bindings/*:+org/eclipse/jface/bindings/keys/*:+org/eclipse/jface/bindings/keys/formatting/*:+org/eclipse/jface/commands/*:+org/eclipse/jface/contexts/*:+org/eclipse/jface/dialogs/*:+org/eclipse/jface/dialogs/images/*:+org/eclipse/jface/fieldassist/*:+org/eclipse/jface/fieldassist/images/*:+org/eclipse/jface/images/*:~org/eclipse/jface/internal/*:~org/eclipse/jface/internal/provisional/action/*:+org/eclipse/jface/layout/*:+org/eclipse/jface/menus/*:+org/eclipse/jface/operation/*:+org/eclipse/jface/preference/*:+org/eclipse/jface/preference/images/*:+org/eclipse/jface/resource/*:+org/eclipse/jface/util/*:+org/eclipse/jface/viewers/*:+org/eclipse/jface/viewers/deferred/*:+org/eclipse/jface/window/*:+org/eclipse/jface/wizard/*:+org/eclipse/jface/wizard/images/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.commands_3.9.0.v20170530-1048.jar[+org/eclipse/core/commands/*:+org/eclipse/core/commands/common/*:+org/eclipse/core/commands/contexts/*:+org/eclipse/core/commands/operations/*:+org/eclipse/core/commands/util/*:~org/eclipse/core/internal/commands/operations/*:~org/eclipse/core/internal/commands/util/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.equinox.bidi_1.1.0.v20160728-1031.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ui.workbench_3.110.1.v20170704-1208.jar[+org/eclipse/ui/*:+org/eclipse/ui/about/*:+org/eclipse/ui/actions/*:+org/eclipse/ui/activities/*:+org/eclipse/ui/application/*:+org/eclipse/ui/branding/*:+org/eclipse/ui/browser/*:+org/eclipse/ui/commands/*:+org/eclipse/ui/contexts/*:+org/eclipse/ui/databinding/*:+org/eclipse/ui/dialogs/*:+org/eclipse/ui/dnd/*:+org/eclipse/ui/fieldassist/*:+org/eclipse/ui/handlers/*:+org/eclipse/ui/help/*:~org/eclipse/ui/internal/*:~org/eclipse/ui/internal/about/*:~org/eclipse/ui/internal/actions/*:~org/eclipse/ui/internal/activities/*:~org/eclipse/ui/internal/activities/ws/*:~org/eclipse/ui/internal/application/*:~org/eclipse/ui/internal/browser/*:~org/eclipse/ui/internal/commands/*:~org/eclipse/ui/internal/contexts/*:~org/eclipse/ui/internal/decorators/*:~org/eclipse/ui/internal/dialogs/*:~org/eclipse/ui/internal/dialogs/cpd/*:~org/eclipse/ui/internal/dnd/*:~org/eclipse/ui/internal/e4/compatibility/*:~org/eclipse/ui/internal/editorsupport/*:~org/eclipse/ui/internal/expressions/*:~org/eclipse/ui/internal/handlers/*:~org/eclipse/ui/internal/help/*:~org/eclipse/ui/internal/intro/*:~org/eclipse/ui/internal/keys/*:~org/eclipse/ui/internal/keys/model/*:~org/eclipse/ui/internal/layout/*:~org/eclipse/ui/internal/menus/*:~org/eclipse/ui/internal/misc/*:~org/eclipse/ui/internal/model/*:~org/eclipse/ui/internal/operations/*:~org/eclipse/ui/internal/part/*:~org/eclipse/ui/internal/preferences/*:~org/eclipse/ui/internal/progress/*:~org/eclipse/ui/internal/provisional/application/*:~org/eclipse/ui/internal/quickaccess/*:~org/eclipse/ui/internal/registry/*:~org/eclipse/ui/internal/services/*:~org/eclipse/ui/internal/splash/*:~org/eclipse/ui/internal/statushandlers/*:~org/eclipse/ui/internal/testing/*:~org/eclipse/ui/internal/themes/*:~org/eclipse/ui/internal/tweaklets/*:~org/eclipse/ui/internal/util/*:~org/eclipse/ui/internal/wizards/*:~org/eclipse/ui/internal/wizards/preferences/*:+org/eclipse/ui/intro/*:+org/eclipse/ui/keys/*:+org/eclipse/ui/menus/*:+org/eclipse/ui/model/*:+org/eclipse/ui/operations/*:+org/eclipse/ui/part/*:+org/eclipse/ui/plugin/*:+org/eclipse/ui/preferences/*:+org/eclipse/ui/progress/*:+org/eclipse/ui/services/*:+org/eclipse/ui/splash/*:+org/eclipse/ui/statushandlers/*:+org/eclipse/ui/swt/*:+org/eclipse/ui/themes/*:+org/eclipse/ui/views/*:+org/eclipse/ui/wizards/*:?**/*] +#ADAPTER#ACCESS#com.ibm.icu_58.2.0.v20170418-1837/icu-data.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/com.ibm.icu_58.2.0.v20170418-1837.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.commands_0.12.100.v20170513-0428.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.expressions_3.6.0.v20170207-1037.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.contexts_1.6.0.v20170322-1144.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.di_1.6.100.v20170421-1418.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.di.annotations_1.6.0.v20170119-2002.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.services_2.1.0.v20170407-0928.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.workbench_1.5.1.v20170815-1446.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.model.workbench_2.0.1.v20170713-1800.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.emf.ecore_2.13.0.v20170609-0707.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.emf.common_2.13.0.v20170609-0707.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.resources_3.12.0.v20170417-1558.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ant.core_3.5.0.v20170509-2149.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.variables_3.4.0.v20170113-2056.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.filesystem_1.7.0.v20170406-1337.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.filesystem.linux.x86_64_1.2.200.v20140124-1940.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.emf.xpath_0.2.0.v20160630-0728.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.commons.jxpath_1.3.0.v200911051830.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.services_1.3.0.v20170307-2032.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.di_1.2.100.v20170414-1137.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.di.extensions.supplier_0.15.0.v20170407-0928.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.core.di.extensions_0.15.0.v20170228-1728.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.emf.ecore.change_2.11.0.v20170609-0707.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.emf.ecore.xmi_2.13.0.v20170609-0707.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.workbench.renderers.swt_0.14.101.v20170713-1343.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.workbench.swt_0.14.101.v20170710-1119.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.databinding_1.6.100.v20170515-1119.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.databinding.observable_1.6.100.v20170515-1119.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.core.databinding.property_1.6.100.v20170515-1119.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.jface.databinding_1.8.100.v20170503-1507.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.css.core_0.12.101.v20170712-1547.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.w3c.css.sac_1.3.1.v200903091627.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.batik.css_1.8.0.v20170214-1941.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.apache.batik.util_1.8.0.v20170214-1941.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.w3c.dom.svg_1.1.0.v201011041433.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.w3c.dom.smil_1.0.1.v200903091627.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.w3c.dom.events_3.0.0.draft20060413_v201105210656.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.css.swt_0.13.1.v20170808-1940.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.bindings_0.12.1.v20170823-1632.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.workbench3_0.14.0.v20160630-0740.jar[+org/eclipse/ui/testing/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.css.swt.theme_0.11.0.v20170312-2302.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.swt.gtk_1.0.200.v20170513-0428.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.widgets_1.2.0.v20160630-0736.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.help_3.8.1.v20170815-1448.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.e4.ui.workbench.addons.swt_1.3.1.v20170319-1442.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.jface.text_3.12.1.v20171114-1359.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.text_3.6.100.v20170203-0814.jar[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.tags/bin/[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.tags/@dot[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.util/bin/[+com/subgraph/vega/ui/util/images/*:+com/subgraph/vega/ui/util/preferences/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.util/@dot[+com/subgraph/vega/ui/util/images/*:+com/subgraph/vega/ui/util/preferences/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.export/bin/[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.export/@dot[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.export/bin[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.export/lib/freemarker.jar[?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.scanner/bin/[+com/subgraph/vega/ui/scanner/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.scanner/@dot[+com/subgraph/vega/ui/scanner/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.scanner/bin[+com/subgraph/vega/ui/scanner/*:?**/*] +#ADAPTER#ACCESS#com.subgraph.vega.ui.scanner/lib/freemarker-gae-2.3.20.jar[+com/subgraph/vega/ui/scanner/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ui.forms_3.7.101.v20170815-1446.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ui.console_3.7.1.v20170728-0806.jar[+org/eclipse/ui/console/*:~org/eclipse/ui/internal/console/*:?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.ui.workbench.texteditor_3.10.100.v20170426-2021.jar[?**/*] +#ADAPTER#ACCESS#Downloads/eclipse-rcp-oxygen-2-linux-gtk-x86_64/eclipse/plugins/org.eclipse.compare.core_3.6.100.v20170516-0820.jar[?**/*] diff --git a/platform/com.subgraph.vega.application/plugin.xml b/platform/com.subgraph.vega.application/plugin.xml index d535baa2..5c59e807 100644 --- a/platform/com.subgraph.vega.application/plugin.xml +++ b/platform/com.subgraph.vega.application/plugin.xml @@ -193,4 +193,4 @@ - + \ No newline at end of file diff --git a/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/Application.java b/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/Application.java index 7c46946a..517611d7 100644 --- a/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/Application.java +++ b/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/Application.java @@ -34,6 +34,8 @@ import com.subgraph.vega.application.logging.LogFormatter; import com.subgraph.vega.application.logging.LogHandler; +//new imports +import py4j.GatewayServer; /** * This class controls all aspects of the application's execution */ @@ -44,6 +46,14 @@ public class Application implements IApplication { */ public Object start(IApplicationContext context) throws Exception { + + //new code + + GatewayServer gatewayserver = new GatewayServer(new EntryPoint(this)); + gatewayserver.start(); + System.out.println("Gateway server started!!"); + + //end of new code Display display = PlatformUI.createDisplay(); setupLogging(); @@ -113,7 +123,7 @@ private void setupLogging() { rootLogger.addHandler(handler); } - rootLogger.setLevel(Level.WARNING); + rootLogger.setLevel(Level.FINEST); } private boolean setupWorkspace() { diff --git a/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/EntryPoint.java b/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/EntryPoint.java new file mode 100644 index 00000000..9d528ce1 --- /dev/null +++ b/platform/com.subgraph.vega.application/src/com/subgraph/vega/application/EntryPoint.java @@ -0,0 +1,39 @@ +package com.subgraph.vega.application; + +import com.subgraph.vega.ui.scanner.*; +import com.subgraph.vega.export.*; + +public class EntryPoint { + + private MyScanExecutor myScanEx; + private Application myApplication; + private AlertExporter myAlertExporter; + + public EntryPoint() { + myScanEx = new MyScanExecutor(); + myApplication = null; + myAlertExporter = new AlertExporter(); + } + + public EntryPoint(Application application) { + myApplication = application; + myScanEx = new MyScanExecutor(); + myAlertExporter = new AlertExporter(); + } + + public MyScanExecutor getMyScanExecutor(){ + return myScanEx; + } + + public Application getApplication() { + return myApplication; + } + + public AlertExporter getAlertExporter() { + return myAlertExporter; + } + + +} + + diff --git a/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java b/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java index 5ed5639b..85fc8c33 100644 --- a/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java +++ b/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java @@ -9,6 +9,9 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.Date; +import java.lang.Thread; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -28,6 +31,12 @@ public class AlertExporter { IScanAlertRepository alertRepository; ReportRenderer renderer; private final Logger logger = Logger.getLogger("alert-exporter"); + private String path = ""; + + public void setPath(String path) + { + this.path = path; + } public AlertExporter(IWorkspace workspace) { @@ -37,20 +46,78 @@ public AlertExporter(IWorkspace workspace) { public AlertExporter() { renderer = new ReportRenderer(createTemplateLoader()); + //alertRepository = Activator.getDefault().getModel().getCurrentWorkspace().getScanAlertRepository(); } public void exportAlertsbyList(List alerts) { writeFile("/tmp/test2.html", renderer.renderList(alerts)); } - public void exportAllAlerts() { - + public void exportAlertsOfLastScan(){ + System.out.println("started exporting..."); + if(alertRepository == null) + { + alertRepository = Activator.getDefault().getModel().getCurrentWorkspace().getScanAlertRepository(); + } + if(path.length() == 0) + { + path = "/tmp/test.html"; + } List scanInstances = alertRepository.getAllScanInstances(); + + IScanInstance newestInstance = null; //scanInstances.get(0); + Date newestInstanceStartTime = null; //newestInstance.getStartTime(); + + int i = 0; + for (IScanInstance s : scanInstances) { + i++; + if(s == null || s.getStartTime() == null) + { + continue; + } + + if(newestInstance == null || + (s.getStartTime().after(newestInstanceStartTime) & + ((s.getScanStatus() == IScanInstance.SCAN_CANCELLED) || (s.getScanStatus() == IScanInstance.SCAN_COMPLETED)))) + { + newestInstance = s; + newestInstanceStartTime = s.getStartTime(); + } + } + + writeFile(path,renderer.renderList(newestInstance.getAllAlerts())); + + } + + public void exportAllAlerts() { + System.out.println("started exporting..."); + if(alertRepository == null) + { + alertRepository = Activator.getDefault().getModel().getCurrentWorkspace().getScanAlertRepository(); + } + if(path.length() == 0) + { + path = "/tmp/test.html"; + } + List scanInstances = alertRepository.getAllScanInstances(); + System.out.println("finished finding all instances."); + int i = 0; + List scanInstanceAlerts = new ArrayList(); + scanInstanceAlerts.addAll(scanInstances.get(0).getAllAlerts()); for (IScanInstance s : scanInstances) { - List scanInstanceAlerts = s.getAllAlerts(); - writeFile("/tmp/test.html",renderer.renderList(scanInstanceAlerts)); + i++; + if(s.getStartTime() == null || !((s.getScanStatus() == IScanInstance.SCAN_CANCELLED) || (s.getScanStatus() == IScanInstance.SCAN_COMPLETED))) + { + continue; + } + System.out.println("save instance nr. " + i); + System.out.println("alerts: " + s.getAllAlerts().size()); + System.out.println("starttime: " + s.getStartTime()); + scanInstanceAlerts.addAll(s.getAllAlerts()); + } + writeFile(path,renderer.renderList(scanInstanceAlerts)); } public void exportbyScanInstance(IScanInstance scanInstance) { diff --git a/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/ReportRenderer.java b/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/ReportRenderer.java index eadbf89f..8bd4755e 100644 --- a/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/ReportRenderer.java +++ b/platform/com.subgraph.vega.export/src/com/subgraph/vega/export/ReportRenderer.java @@ -146,7 +146,7 @@ public String reportSummary(List alerts) { output += "Summary\n"; output += "\n"; output += "\n\n"; - output += "\n\n"; + output += "\n\n"; HashMap severityTotals = new HashMap(); @@ -161,7 +161,7 @@ public String reportSummary(List alerts) { for (Severity s : Severity.values()) { if ((reportSummary.get(s) != null) && (reportSummary.get(s).isEmpty() == false)) { - output += "\n"; + output += "\n"; for (String alertTitle : reportSummary.get(s).keySet()) { output += "\n"; } diff --git a/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/ScannerModuleRepository.java b/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/ScannerModuleRepository.java index 7b6af2f3..c11f67df 100644 --- a/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/ScannerModuleRepository.java +++ b/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/ScannerModuleRepository.java @@ -123,6 +123,16 @@ public List getResponseProcessingModules() { } return modules; } + + @Override + public List getAllResponseProcessingModules() { + final List modules = new ArrayList(); + for(ScriptedModule m: scriptLoader.getReallyAllModules()) { + if(m.getModuleType() == ModuleScriptType.RESPONSE_PROCESSOR) + modules.add(new ResponseProcessorScript(m)); + } + return modules; + } @Override public List getBasicModules() { @@ -133,6 +143,16 @@ public List getBasicModules() { } return modules; } + + @Override + public List getAllBasicModules() { + final List modules = new ArrayList(); + for(ScriptedModule m: scriptLoader.getReallyAllModules()) { + if(m.getModuleType() == ModuleScriptType.BASIC_MODULE) + modules.add(new BasicModuleScript(m)); + } + return modules; + } protected void setPathFinder(IPathFinder pathFinder) { this.pathFinder = pathFinder; diff --git a/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/scripting/ScriptLoader.java b/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/scripting/ScriptLoader.java index fa511330..9c99377e 100644 --- a/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/scripting/ScriptLoader.java +++ b/platform/com.subgraph.vega.scanner.modules/src/com/subgraph/vega/impl/scanner/modules/scripting/ScriptLoader.java @@ -101,11 +101,27 @@ public List getAllModulesByType(ModuleScriptType type) { } return result; } + + public List getReallyAllModulesByType(ModuleScriptType type) { + final List result = new ArrayList(); + synchronized(modulePathMap) { + for(ScriptedModule m: modulePathMap.values()) { + if((type == null || type == m.getModuleType())) { + result.add(m); + } + } + } + return result; + } public List getAllModules() { return getAllModulesByType(null); } + public List getReallyAllModules(){ + return getReallyAllModulesByType(null); + } + public Scriptable getPreludeScope() { return preludeLoader.getPreludeScope(); } diff --git a/platform/com.subgraph.vega.scanner/src/com/subgraph/vega/impl/scanner/Scan.java b/platform/com.subgraph.vega.scanner/src/com/subgraph/vega/impl/scanner/Scan.java index b446ef00..64befde2 100644 --- a/platform/com.subgraph.vega.scanner/src/com/subgraph/vega/impl/scanner/Scan.java +++ b/platform/com.subgraph.vega.scanner/src/com/subgraph/vega/impl/scanner/Scan.java @@ -267,6 +267,15 @@ private void reloadModules() { basicModules = moduleRegistry.updateBasicModules(basicModules); } } + + public void useAllModules() + { + IScannerModuleRegistry moduleRegistry = scanner.getScannerModuleRegistry(); + responseProcessingModules = moduleRegistry.getAllResponseProcessingModules(); + basicModules = moduleRegistry.getAllBasicModules(); + responseProcessingModules = moduleRegistry.updateResponseProcessingModules(responseProcessingModules); + basicModules = moduleRegistry.updateBasicModules(basicModules); + } public Scanner getScanner() { return scanner; diff --git a/platform/com.subgraph.vega.ui.scanner/.classpath b/platform/com.subgraph.vega.ui.scanner/.classpath index 07d16cb7..4f5fdc6e 100644 --- a/platform/com.subgraph.vega.ui.scanner/.classpath +++ b/platform/com.subgraph.vega.ui.scanner/.classpath @@ -4,5 +4,6 @@ + diff --git a/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java new file mode 100644 index 00000000..cb0ef672 --- /dev/null +++ b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java @@ -0,0 +1,392 @@ +/******************************************************************************* + * Copyright (c) 2011 Subgraph. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Subgraph - initial API and implementation + ******************************************************************************/ +package com.subgraph.vega.ui.scanner; + +import java.net.HttpCookie; +import java.net.URI; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.apache.http.cookie.Cookie; +import org.apache.http.impl.cookie.BasicClientCookie; +import org.eclipse.jface.preference.IPreferenceStore; + +import com.subgraph.vega.api.scanner.IScan; +import com.subgraph.vega.api.model.alerts.IScanInstance; +import com.subgraph.vega.api.model.scope.ITargetScope; +import com.subgraph.vega.api.scanner.IScanner; +import com.subgraph.vega.api.scanner.IScannerConfig; +import com.subgraph.vega.ui.scanner.preferences.IPreferenceConstants; + +/*---new imports---*/ +import com.subgraph.vega.api.util.UriTools; +//import com.subgraph.vega.export.Activator; + +import java.util.Arrays; +import java.util.Set; +import java.util.HashSet; +import com.subgraph.vega.api.model.identity.*; + +public class MyScanExecutor { + + private boolean scanRunning = false; + private String target = "127.0.0.1"; + private String userAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Vega/1.0"; + private List cookieList = new ArrayList(); + private List excludedParameters = Arrays.asList("csrfmiddlewaretoken","__viewstateencrypted","__eventvalidation", + "__eventtarget","__viewstate","xsrftoken","csrftoken","anticsrf","__eventargument"); + private String identity = ""; + private boolean logAllRequests = false; + private boolean displayDebugOutput = false; + private int maxRequestsPerSecond = 25; + private int maxScanDescendants = 8192; + private int maxScanChildren = 512; + private int maxScanDepth = 16; + private int maxScanDuplicatePaths = 3; + private int maxResponseLength = 1024; + private boolean useAllModules = false; + + + public boolean isUseAllModules() { + return useAllModules; + } + + public void setUseAllModules(boolean useAllModules) { + this.useAllModules = useAllModules; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getUserAgent() { + return userAgent; + } + + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + + public List getCookieList() { + return cookieList; + } + + public void setCookieList(List cookieList) { + this.cookieList = cookieList; + } + + public List getExcludedParameters() { + return excludedParameters; + } + + public void setExcludedParameters(List excludedParameters) { + this.excludedParameters = excludedParameters; + } + + public String getIdentity() { + return identity; + } + + public boolean setIdentity(String name, String username, String password) { + + IIdentityModel identityModel = Activator.getDefault().getModel().getCurrentWorkspace().getIdentityModel(); + IIdentity myIdentity = identityModel.createIdentity(); + + myIdentity.setName(name); + IAuthMethodRfc2617 myAuthMethod = Activator.getDefault().getModel().getCurrentWorkspace().getIdentityModel().createAuthMethodRfc2617(); + myAuthMethod.setAuthScheme(IAuthMethodRfc2617.AuthScheme.AUTH_SCHEME_BASIC); + myAuthMethod.setUsername(username); + myAuthMethod.setPassword(password); + myIdentity.setAuthMethod(myAuthMethod); + + IIdentity checkIdentity = identityModel.getIdentityByName(name); + if(checkIdentity == null) + { + //no identity like this exists + identityModel.store(myIdentity); + this.identity = name; + System.out.println("Identity stored."); + } else + { + IAuthMethod checkAuthMethod = checkIdentity.getAuthMethod(); + //assert: we only have basic authentication (only type available for python) + if(checkAuthMethod.getType() == IAuthMethod.AuthMethodType.AUTH_METHOD_RFC2617) + { + IAuthMethodRfc2617 checkAuthMethod_basic = (IAuthMethodRfc2617) checkAuthMethod; + if(checkAuthMethod_basic.getUsername().equals(username) && + checkAuthMethod_basic.getPassword().equals(password)) + { + //exact same identity is already stored and can be used. + System.out.println("Using existing idenity."); + this.identity = name; + }else + { + //identity with same name but different credentials already exists + System.out.println("A differing identity with this name already exists (needs to be unique)!"); + return false; + } + } + } + + return true; + } + + public boolean isLogAllRequests() { + return logAllRequests; + } + + public void setLogAllRequests(boolean logAllRequests) { + this.logAllRequests = logAllRequests; + } + + public boolean isDisplayDebugOutput() { + return displayDebugOutput; + } + + public void setDisplayDebugOutput(boolean displayDebugOutput) { + this.displayDebugOutput = displayDebugOutput; + } + + public int getMaxRequestsPerSecond() { + return maxRequestsPerSecond; + } + + public void setMaxRequestsPerSecond(int maxRequestsPerSecond) { + this.maxRequestsPerSecond = maxRequestsPerSecond; + } + + public int getMaxScanDescendants() { + return maxScanDescendants; + } + + public void setMaxScanDescendants(int maxScanDescendants) { + this.maxScanDescendants = maxScanDescendants; + } + + public int getMaxScanChildren() { + return maxScanChildren; + } + + public void setMaxScanChildren(int maxScanChildren) { + this.maxScanChildren = maxScanChildren; + } + + public int getMaxScanDepth() { + return maxScanDepth; + } + + public void setMaxScanDepth(int maxScanDepth) { + this.maxScanDepth = maxScanDepth; + } + + public int getMaxScanDuplicatePaths() { + return maxScanDuplicatePaths; + } + + public void setMaxScanDuplicatePaths(int maxScanDuplicatePaths) { + this.maxScanDuplicatePaths = maxScanDuplicatePaths; + } + + public int getMaxResponseLength() { + return maxResponseLength; + } + + public void setMaxResponseLength(int maxResponseLength) { + this.maxResponseLength = maxResponseLength; + } + + public String runScan() { + final IScanner scanner = Activator.getDefault().getScanner(); + final IScan scan = scanner.createScan(); + //final Collection identities = Activator.getDefault().getModel().getCurrentWorkspace().getIdentityModel().getAllIdentities(); + String result = null; + if(scanRunning) { + scan.stopScan(); + System.out.println("Error. Tried starting a scan but there was already a scan running."); + } else { + result = maybeLaunchScanFromWizard(scanner, scan); + } + IScanInstance scanInstance = scan.getScanInstance(); + if(scanInstance.getScanStatus() == IScanInstance.SCAN_AUDITING || scanInstance.getScanStatus() == IScanInstance.SCAN_PROBING || + scanInstance.getScanStatus() == IScanInstance.SCAN_STARTING) + { + waitForScanToFinish(scanInstance); + } + + return result; + } + + private void waitForScanToFinish(IScanInstance s) + { + while(s.getScanStatus() == IScanInstance.SCAN_AUDITING || s.getScanStatus() == IScanInstance.SCAN_PROBING || + s.getScanStatus() == IScanInstance.SCAN_STARTING) + { + try{ + Thread.sleep(1000); + }catch(InterruptedException e) + { + break; + } + } + } + + private String maybeLaunchScanFromWizard(IScanner scanner, IScan scan) { + + /*---new code---*/ + + //--------scan target--------------// + + //final ITargetScope scanTargetScope = wizard.getScanTargetScope(); + //if(scanTargetScope == null) { + // return null; + //} + + ITargetScope scanTargetScope; + scanTargetScope = Activator.getDefault().getModel().getCurrentWorkspace().getTargetScopeManager().createNewScope(); + scanTargetScope.clear(); + if(UriTools.isTextValidURI(target)) { + scanTargetScope.addScopeURI(UriTools.getURIFromText(target)); + } + System.out.println("Using target "+ target); + + final IScannerConfig config = scan.getConfig(); + config.setScanTargetScope(scanTargetScope); + config.setUserAgent(userAgent); + System.out.println("Using userAgent "+ userAgent); + + //--------cookies--------// + + //config.setCookieList(getCookieListForScope(wizard.getCookieStringList(), scanTargetScope)); + + config.setCookieList(getCookieListForScope(cookieList, scanTargetScope)); + System.out.println("Using cookieList: "); + for(int i = 0; i < cookieList.size(); i++) + { + System.out.print(cookieList.get(i) + ", "); + } + System.out.print("\n"); + + //-------identity-------// + + //if no fitting identity has been found, the identity in the config will be null. + // This is the same as it has been before. + + // config.setScanIdentity(wizard.getScanIdentity()); + + + final Collection identities = Activator.getDefault().getModel().getCurrentWorkspace().getIdentityModel().getAllIdentities(); + IIdentity myid = null; + for(IIdentity id : identities) + { + if(id.getName().equals(identity)){ + myid = id; + break; + } + } + if(!(myid == null)) + { + System.out.println("Using id "+ myid.getName()); + } + + config.setScanIdentity(myid); + + //-------excluded parameters-------// + + //config.setExcludedParameterNames(wizard.getExcludedParameterNames()); + + Set excludedParametersSet = new HashSet(); + for(int i = 0; i < excludedParameters.size(); i++) + { + excludedParametersSet.add(excludedParameters.get(i)); + } + + config.setExcludedParameterNames(excludedParametersSet); + + + final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore(); + config.setLogAllRequests(logAllRequests); + config.setDisplayDebugOutput(displayDebugOutput); + config.setMaxRequestsPerSecond(maxRequestsPerSecond); + config.setMaxDescendants(maxScanDescendants); + config.setMaxChildren(maxScanChildren); + config.setMaxDepth(maxScanDepth); + config.setMaxDuplicatePaths(maxScanDuplicatePaths); + config.setMaxResponseKilobytes(maxResponseLength); + + if(useAllModules) + { + scan.useAllModules(); + } + + + //end of changes + + final Thread probeThread = new Thread(new ScanProbeTask(scan)); + probeThread.start(); + synchronized (probeThread) { + try{ + probeThread.wait(); + }catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + return target; + } + + private List getCookieListForScope(List cookieStringList, ITargetScope scope) { + final List cookies = new ArrayList(); + for(URI uri: scope.getScopeURIs()) { + cookies.addAll(getCookieList(cookieStringList, uri)); + } + return cookies; + } + + // gross hack + private List getCookieList(List cookieStringList, URI uri) { + if (cookieStringList.size() != 0) { + ArrayList cookieList = new ArrayList(cookieStringList.size()); + for (String cookieString: cookieStringList) { + List parseList = HttpCookie.parse(cookieString); + for (HttpCookie cookie: parseList) { + BasicClientCookie cp = new BasicClientCookie(cookie.getName(), cookie.getValue()); + cp.setComment(cookie.getComment()); + if (cookie.getDomain() != null) { + cp.setDomain(cookie.getDomain()); + } else { + // just set it to the target host for now - may need something slightly less specific + cp.setDomain(uri.getHost()); + } + long maxAge = cookie.getMaxAge(); + if (maxAge > 0) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.SECOND, (int) maxAge); + cp.setExpiryDate(calendar.getTime()); + } + cp.setPath(cookie.getPath()); + cp.setSecure(cookie.getSecure()); + cp.setVersion(cookie.getVersion()); + cookieList.add(cp); + } + } + return cookieList; + } + return Collections.emptyList(); + } +} diff --git a/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanExecutor.java b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanExecutor.java index f0190b6b..88c5342c 100644 --- a/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanExecutor.java +++ b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanExecutor.java @@ -34,6 +34,12 @@ import com.subgraph.vega.ui.scanner.wizards.NewScanWizard; import com.subgraph.vega.ui.scanner.wizards.NewWizardDialog; +/*---new imports---*/ +import com.subgraph.vega.api.util.UriTools; +import java.util.Arrays; +import java.util.Set; +import java.util.HashSet; + public class ScanExecutor { public String runScan(Shell shell, String target) { @@ -53,7 +59,7 @@ public String runScan(Shell shell, String target) { } private String maybeLaunchScanFromWizard(Shell shell, NewScanWizard wizard, IScanner scanner, IScan scan) { - + final ITargetScope scanTargetScope = wizard.getScanTargetScope(); if(scanTargetScope == null) { return null; @@ -62,9 +68,16 @@ private String maybeLaunchScanFromWizard(Shell shell, NewScanWizard wizard, ISca final IScannerConfig config = scan.getConfig(); config.setScanTargetScope(scanTargetScope); config.setUserAgent(IPreferenceConstants.P_USER_AGENT); + + config.setCookieList(getCookieListForScope(wizard.getCookieStringList(), scanTargetScope)); + + config.setScanIdentity(wizard.getScanIdentity()); - config.setExcludedParameterNames(wizard.getExcludedParameterNames()); + + + config.setExcludedParameterNames(wizard.getExcludedParameterNames()); + final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore(); config.setLogAllRequests(preferences.getBoolean(IPreferenceConstants.P_LOG_ALL_REQUESTS)); config.setDisplayDebugOutput(preferences.getBoolean(IPreferenceConstants.P_DISPLAY_DEBUG_OUTPUT)); diff --git a/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanProbeTask.java b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanProbeTask.java index 279b7c9f..64b95122 100644 --- a/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanProbeTask.java +++ b/platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/ScanProbeTask.java @@ -31,6 +31,11 @@ public class ScanProbeTask implements Runnable { this.shell = shell; this.scan = scan; } + + ScanProbeTask(IScan scan) { + this.shell = null; + this.scan = scan; + } @Override public void run() { @@ -51,26 +56,33 @@ public void run() { private void processTargetURI(final URI uri) { final IScanProbeResult probeResult = scan.probeTargetUri(uri); - shell.getDisplay().syncExec(new Runnable() { + if(!processProbeResult(uri, probeResult)) { + cancelScan = true; + } + /*shell.getDisplay().syncExec(new Runnable() { @Override public void run() { if(!processProbeResult(uri, probeResult)) { cancelScan = true; } } - }); + });*/ } private boolean processProbeResult(URI uri, IScanProbeResult probeResult) { if(probeResult.getProbeResultType() == ProbeResultType.PROBE_CONNECT_FAILED) { - MessageDialog.openError(shell, "Failed to connect to target", probeResult.getFailureMessage()); + //MessageDialog.openError(shell, "Failed to connect to target", probeResult.getFailureMessage()); + System.out.println("Failed to connect to target. " + probeResult.getFailureMessage()); return false; } else if(probeResult.getProbeResultType() == ProbeResultType.PROBE_REDIRECT) { final URI redirectURI = probeResult.getRedirectTarget(); if(!isTrivialRedirect(uri, redirectURI)) { - String message = "Target address "+ uri + " redirects to address "+ redirectURI + "\n\n"+ - "Would you like to add "+ redirectURI +" to the scope?"; - boolean doit = MessageDialog.openQuestion(shell, "Follow Redirect?", message); + //String message = "Target address "+ uri + " redirects to address "+ redirectURI + "\n\n"+ + // "Would you like to add "+ redirectURI +" to the scope?"; + System.out.println("Target address "+ uri + " redirects to address "+ redirectURI + "\n\n"+ + "I added "+ redirectURI +" to the scope."); + //boolean doit = MessageDialog.openQuestion(shell, "Follow Redirect?", message); + boolean doit = true; if(!doit) { return false; } @@ -80,7 +92,8 @@ private boolean processProbeResult(URI uri, IScanProbeResult probeResult) { return true; } else if(probeResult.getProbeResultType() == ProbeResultType.PROBE_REDIRECT_FAILED) { - MessageDialog.openError(shell, "Redirect failure", probeResult.getFailureMessage()); + //MessageDialog.openError(shell, "Redirect failure", probeResult.getFailureMessage()); + System.out.println("Redirect Failure. " + probeResult.getFailureMessage()); return false; } return true; diff --git a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageOne.java b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageOne.java index 2fa012fb..d5e40c51 100644 --- a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageOne.java +++ b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageOne.java @@ -68,7 +68,8 @@ public void widgetSelected(SelectionEvent e) { htmlButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - choice = htmlButton.getText(); + //choice = htmlButton.getText(); + choice = "HTML"; } }); diff --git a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageThree.java b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageThree.java index 9ce383ff..1a87da87 100644 --- a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageThree.java +++ b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageThree.java @@ -18,6 +18,8 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; +import com.subgraph.vega.export.AlertExporter; + public class ExportWizardPageThree extends WizardPage { protected FileDialog dialog; @@ -52,6 +54,8 @@ public void createControl(Composite parent) { textField.setSize(VISIBLE_PATH_LENGTH, textField.getSize().y); Button button = new Button(container, SWT.NONE); button.setText("Open"); + + final Composite parent1 = parent; GridData buttonGridData = new GridData(); buttonGridData.horizontalSpan = 2; @@ -66,7 +70,7 @@ public void createControl(Composite parent) { @Override public void widgetSelected(SelectionEvent e) { - doFileDialog(parent.getShell()); + doFileDialog(parent1.getShell()); } @Override @@ -89,6 +93,11 @@ public void widgetDefaultSelected(SelectionEvent e) { setPageComplete(false); setControl(container); + /*System.out.println("Started myexporter."); + AlertExporter myexporter = new AlertExporter(); + myexporter.exportAllAlerts(); + System.out.println("Finished myexporter.");*/ + } private void doFileDialog(Shell shell) { diff --git a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageTwo.java b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageTwo.java index ce8c59d3..61c520c8 100644 --- a/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageTwo.java +++ b/platform/com.subgraph.vega.ui.util/src/com/subgraph/vega/ui/util/export/ExportWizardPageTwo.java @@ -82,12 +82,12 @@ public void createControl(Composite parent) { @Override public void widgetSelected(SelectionEvent e) { - if (selectAllButton.getSelection() == true) { + //if (selectAllButton.getSelection() == true) { for (TreeItem t: alertsTree.getItems()) { t.setChecked(true); setPageComplete(true); } - } + //} treeContainer.setOrigin (0, 10); @@ -165,9 +165,9 @@ public void treeCollapsed (TreeEvent e) { public void widgetSelected(SelectionEvent e) { TreeItem ti = (TreeItem) e.item; if (ti.getChecked() == false) { - if (selectAllButton.getSelection() == true) { + /*if (selectAllButton.getSelection() == true) { selectAllButton.setSelection(false); - } + }*/ } From 8c70f789e618beee946fcd1f8eccd622592e841a Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 13:22:12 +0100 Subject: [PATCH 02/17] Create README.md --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..5dd3669c --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Python Interface for Vega + +This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. An example of how to use the Python interface is presented in the following: + + +``` +import subprocess as sp +import time +import shlex +import shutil +import os + +from py4j.java_gateway import JavaGateway +from py4j.java_collections import ListConverter + + +target = "192.168.0.2" +result_path = "./results" +authentication = "admin:admin" +vega_path = "/path/to/vega" +#seconds to wait for Vega to start +wait_time = 10 + + +# checking if xvfb exists +if(shutil.which("xvfb-run") == None): + raise MissingDependency('xvfb cannot be found. Please install xvfb to use the python interface of Vega.') + +# run vega +cmd = "xvfb-run -a " + vega_path +#process gets a new group ID so it can be stopped (including all additional created processes) later +vega_process = sp.Popen(shlex.split(cmd), preexec_fn=os.setsid) +print("Started Vega from %s" % str(vega_path)) + +# init vega classes +gateway = JavaGateway() +scanex = gateway.entry_point.getMyScanExecutor() +alertExporter = gateway.entry_point.getAlertExporter() + +# set values +scanex.setTarget(target) +alertExporter.setPath(result_path) + +scanex.runScan() + +alertExporter.exportAlertsOfLastScan() + +try: + os.killpg(os.getpgif(process.pid), signatl.SIGTERM) + process.wait() +except Exception: + pass +``` From 3c051f8e8093fdacd84be620ec91fcfefbe22eb0 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 13:24:13 +0100 Subject: [PATCH 03/17] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5dd3669c..94aba816 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Python Interface for Vega -This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. An example of how to use the Python interface is presented in the following: +This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega). + +An example of how to use the Python interface is presented in the following: ``` From 693ed6eec6e61e265d410268881af55813f23682 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 13:27:59 +0100 Subject: [PATCH 04/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94aba816..713792ed 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python Interface for Vega -This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega). +This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega/wiki/Installing-Vega). An example of how to use the Python interface is presented in the following: From 00c46d59dafd7731ece72feef67c7d6cdd842cff Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 13:28:28 +0100 Subject: [PATCH 05/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 713792ed..38808302 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python Interface for Vega -This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega/wiki/Installing-Vega). +This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). An example of how to use the Python interface is presented in the following: From 30257777a0884c687ad9fd12d5d14d8ed353d6ed Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Tue, 26 Nov 2019 13:36:29 +0100 Subject: [PATCH 06/17] removed unnecessary build configs --- build/config/build.properties | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/build/config/build.properties b/build/config/build.properties index dfce0b61..c3360336 100644 --- a/build/config/build.properties +++ b/build/config/build.properties @@ -15,12 +15,7 @@ archivePrefix=vega collectingFolder=${archivePrefix} configs= \ - #win32, win32, x86 & \ - #win32,win32,x86_64 & \ - #linux, gtk, x86 & \ - linux, gtk, x86_64 & \ - #macosx, cocoa, x86 & \ - #macosx, cocoa, x86_64 + linux, gtk, x86_64 # By default PDE creates one archive (result) per entry listed in the configs property. # Setting this value to true will cause PDE to only create one output containing all From 96ca2a798d48b6eee5d3e7bed8acc6c63ca93092 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 14:33:18 +0100 Subject: [PATCH 07/17] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 38808302..5958dcc4 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ from py4j.java_collections import ListConverter target = "192.168.0.2" result_path = "./results" authentication = "admin:admin" -vega_path = "/path/to/vega" +vega_path = "/path/to/vega/Vega" #seconds to wait for Vega to start wait_time = 10 @@ -33,6 +33,7 @@ cmd = "xvfb-run -a " + vega_path #process gets a new group ID so it can be stopped (including all additional created processes) later vega_process = sp.Popen(shlex.split(cmd), preexec_fn=os.setsid) print("Started Vega from %s" % str(vega_path)) +time.sleep(wait_time) # init vega classes gateway = JavaGateway() From 41f75e2fb3a1f71591cac7c5db08096b0c6f1390 Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Tue, 26 Nov 2019 14:47:34 +0100 Subject: [PATCH 08/17] documentation --- Installation.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 6 +++-- example.py | 46 +++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 Installation.md create mode 100644 example.py diff --git a/Installation.md b/Installation.md new file mode 100644 index 00000000..177b8044 --- /dev/null +++ b/Installation.md @@ -0,0 +1,61 @@ +# Installation + +This installation guide has been tested on Ubuntu 16.04.6 LTS. + +## Installing Requirements + +It is necessary to use Python 3. This installation guide has been tested with Python 3.5.2 and pip 8.1.1. + +* Install libwebkit ([necessary for Vega](https://github.com/subgraph/Vega/wiki/Troubleshooting)) + ``` + sudo apt install libwebkitgtk-1.0 + ``` +* Install Java 8 + ``` + sudo apt install openjdk-8-jre-headless + ``` +* Choose the right java version (Java 8) + ``` + sudo update-alternatives --config java + ``` +* Install ant + ``` + sudo apt install ant + ``` +* Install xvfb (necessary to run Vega without GUI) + ``` + sudo apt install xvfb + ``` +* Install py4j + ``` + pip3 install py4j + ``` + +## Building Vega + +* Clone this repository + ``` + git clone https://github.com/anneborcherding/Vega.git + ``` + ``` + cd Vega + ``` +* Build Vega using ant + ``` + ant + ``` +* The resulting zip-file can be found in `build/stage/I.VegaBuild/` +* Copy the zip-file to a location of your choice und unzip it. We will call this folder `path/to/vega`. + +## Running Vega + +* If you wish to run Vega using the GUI, run `./Vega` in `path/to/vega`. +* If you wish to run Vega using the Python API, adapt `example.py` to your needs, copy it to `path/to/vega` and run it + ``` + python3 example.py + ``` + +# Trouble Shooting + +* Make sure that you have installed all the requirements +* Permission denied exception by xvfb-run: Make sure to use the right path for Vega. It needs to point to the executable. \ No newline at end of file diff --git a/README.md b/README.md index 38808302..814cf87e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ # Python Interface for Vega -This code adds a rudimentary Python interface to Vega. With this, it is possible to automatically configure and run scans as well as getting the results of Vega. Please follow the installation instructions of Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). +This code adds a rudimentary Python interface to Vega using [py4j](https://github.com/bartdag/py4j). With this, it is possible to automatically configure and run scans as well as getting the results of Vega. +An installation guidline for Ubuntu 16.04 is given [here](installation.md). You may also have a look at the installation instructions for Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). -An example of how to use the Python interface is presented in the following: +An example of how to use the Python interface is presented in the following (and can also be found in [example.py](example.py)). +Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java). ``` diff --git a/example.py b/example.py new file mode 100644 index 00000000..14dde1bc --- /dev/null +++ b/example.py @@ -0,0 +1,46 @@ +import subprocess as sp +import time +import shlex +import shutil +import os + +from py4j.java_gateway import JavaGateway +from py4j.java_collections import ListConverter + + +target = "192.168.0.2" +result_path = "./results" +authentication = "admin:admin" +vega_path = "/path/to/vega" +#seconds to wait for Vega to start +wait_time = 10 + + +# checking if xvfb exists +if(shutil.which("xvfb-run") == None): + raise MissingDependency('xvfb cannot be found. Please install xvfb to use the python interface of Vega.') + +# run vega +cmd = "xvfb-run -a " + vega_path +#process gets a new group ID so it can be stopped (including all additional created processes) later +vega_process = sp.Popen(shlex.split(cmd), preexec_fn=os.setsid) +print("Started Vega from %s" % str(vega_path)) + +# init vega classes +gateway = JavaGateway() +scanex = gateway.entry_point.getMyScanExecutor() +alertExporter = gateway.entry_point.getAlertExporter() + +# set values +scanex.setTarget(target) +alertExporter.setPath(result_path) + +scanex.runScan() + +alertExporter.exportAlertsOfLastScan() + +try: + os.killpg(os.getpgif(process.pid), signatl.SIGTERM) + process.wait() +except Exception: + pass \ No newline at end of file From 25245cf55c4fb0e3ca9cfef9c5ffb91388dd8aca Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Tue, 26 Nov 2019 14:49:06 +0100 Subject: [PATCH 09/17] added waiting time and updated path --- example.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example.py b/example.py index 14dde1bc..3b440d87 100644 --- a/example.py +++ b/example.py @@ -11,7 +11,7 @@ target = "192.168.0.2" result_path = "./results" authentication = "admin:admin" -vega_path = "/path/to/vega" +vega_path = "/path/to/vega/Vega" #seconds to wait for Vega to start wait_time = 10 @@ -25,6 +25,7 @@ #process gets a new group ID so it can be stopped (including all additional created processes) later vega_process = sp.Popen(shlex.split(cmd), preexec_fn=os.setsid) print("Started Vega from %s" % str(vega_path)) +time.sleep(wait_time) # init vega classes gateway = JavaGateway() From a16c63d63d7e2526c8a3148bd1e4373892203069 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 14:51:36 +0100 Subject: [PATCH 10/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 662d6d89..274e61f4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This code adds a rudimentary Python interface to Vega using [py4j](https://githu An installation guidline for Ubuntu 16.04 is given [here](installation.md). You may also have a look at the installation instructions for Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). An example of how to use the Python interface is presented in the following (and can also be found in [example.py](example.py)). -Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java). +Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java) and [MyAlertExporter](platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java). ``` From 93a46b6f41bae8617c36a37565717d92ff65b105 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Tue, 26 Nov 2019 14:52:00 +0100 Subject: [PATCH 11/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 274e61f4..d4fedfee 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This code adds a rudimentary Python interface to Vega using [py4j](https://githu An installation guidline for Ubuntu 16.04 is given [here](installation.md). You may also have a look at the installation instructions for Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). An example of how to use the Python interface is presented in the following (and can also be found in [example.py](example.py)). -Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java) and [MyAlertExporter](platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java). +Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java) and [AlertExporter](platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java). ``` From 7737e3bac349abf3f10b1565dec0f76f37f81629 Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Tue, 26 Nov 2019 15:02:17 +0100 Subject: [PATCH 12/17] added py4j license --- licenses/py4j.txt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 licenses/py4j.txt diff --git a/licenses/py4j.txt b/licenses/py4j.txt new file mode 100644 index 00000000..3e14ba92 --- /dev/null +++ b/licenses/py4j.txt @@ -0,0 +1,33 @@ +============================================================ +Notices for file(s): + /Vega/platform/com.subgraph.vega.application/extra-bundles/py4j0.10.6.jar + +License text from https://github.com/bartdag/py4j/blob/master/LICENSE.txt +------------------------------------------------------------ + +Copyright (c) 2009-2018, Barthelemy Dagenais and individual contributors. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +- The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From ed921f04d4709554969a21b6623c3470be469c82 Mon Sep 17 00:00:00 2001 From: "Borcherding, Anne" Date: Tue, 26 Nov 2019 15:04:58 +0100 Subject: [PATCH 13/17] updated jsoup license --- licenses/jsoup.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/licenses/jsoup.txt b/licenses/jsoup.txt index f14f4465..4f0b1dcb 100644 --- a/licenses/jsoup.txt +++ b/licenses/jsoup.txt @@ -1,6 +1,7 @@ ============================================================ Notices for file(s): - /Vega/platform/com.subgraph.vega.application/extra-bundles/jsoup-1.7.2-SNAPSHOT.jar + /Vega/platform/com.subgraph.vega.application/extra-bundles/org.jsoup_1.3.3.vega.jar + /Vega/platform/com.subgraph.vega.application/extra-bundles/org.jsoup.source_1.3.3.vega.jar License text from http://jsoup.org/license ------------------------------------------------------------ @@ -15,4 +16,4 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file From cec0a05c849a652a741c4a8de56e9f7effbccb85 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Wed, 9 Sep 2020 10:18:50 +0200 Subject: [PATCH 14/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4fedfee..4f6331a5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Python Interface for Vega This code adds a rudimentary Python interface to Vega using [py4j](https://github.com/bartdag/py4j). With this, it is possible to automatically configure and run scans as well as getting the results of Vega. -An installation guidline for Ubuntu 16.04 is given [here](installation.md). You may also have a look at the installation instructions for Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). +An installation guidline for Ubuntu 16.04 is given [here](Installation.md). You may also have a look at the installation instructions for Vega given [here](https://github.com/subgraph/Vega/wiki/Building-Vega). An example of how to use the Python interface is presented in the following (and can also be found in [example.py](example.py)). Values that can be set for Vega can be found in [MyScanExecutor](platform/com.subgraph.vega.ui.scanner/src/com/subgraph/vega/ui/scanner/MyScanExecutor.java) and [AlertExporter](platform/com.subgraph.vega.export/src/com/subgraph/vega/export/AlertExporter.java). From 322c84658f8a9118565475e0cb8b5d9b8854d1c5 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Fri, 11 Sep 2020 08:34:50 +0200 Subject: [PATCH 15/17] Add Dockerfile --- Dockerfile | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..475dec47 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# first stage, build Vega + +FROM ubuntu:xenial + +WORKDIR /vega + +ADD . /vega + +RUN apt-get update && apt-get install -y \ + libwebkitgtk-1.0 \ + openjdk-8-jre-headless \ + ant \ + python3 \ + python3-pip \ + git \ + xvfb \ + && rm -rf /var/lib/apt/lists/* + +RUN pip3 install py4j + +# RUN git clone https://github.com/anneborcherding/Vega.git + +RUN ant + +# second stage, extract Vega + +FROM ubuntu:xenial + +WORKDIR /vega + +RUN apt-get update && apt-get install -y \ + unzip \ + openjdk-8-jre-headless \ + libwebkitgtk-1.0 \ + xvfb \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=0 /vega/build/stage/I.VegaBuild/VegaBuild-linux.gtk.x86_64.zip . + +RUN unzip VegaBuild-linux.gtk.x86_64.zip -d . + + From 49aa5a5f3e89e98948a758927566a135927aad55 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Fri, 11 Sep 2020 08:35:27 +0200 Subject: [PATCH 16/17] Update Dockerfile --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 475dec47..141d537d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,6 @@ RUN apt-get update && apt-get install -y \ RUN pip3 install py4j -# RUN git clone https://github.com/anneborcherding/Vega.git - RUN ant # second stage, extract Vega From 129cf0e62786bf5d01399dd4ecbf6d6bb85a3fc9 Mon Sep 17 00:00:00 2001 From: anneborcherding <55282902+anneborcherding@users.noreply.github.com> Date: Fri, 11 Sep 2020 08:48:44 +0200 Subject: [PATCH 17/17] Create docker-publish.yml --- .github/workflows/docker-publish.yml | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/docker-publish.yml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 00000000..cf614bcf --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,75 @@ +name: Docker + +on: + push: + # Publish `develop` as Docker `latest` image. + branches: + - develop + + # Publish `v1.2.3` tags as releases. + tags: + - v* + + # Run tests for any PRs. + pull_request: + +env: + IMAGE_NAME: subgraph_vega_python_interface + +jobs: + # Run tests. + # See also https://docs.docker.com/docker-hub/builds/automated-testing/ + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Run tests + run: | + if [ -f docker-compose.test.yml ]; then + docker-compose --file docker-compose.test.yml build + docker-compose --file docker-compose.test.yml run sut + else + docker build . --file Dockerfile + fi + + # Push image to GitHub Packages. + # See also https://docs.docker.com/docker-hub/builds/ + push: + # Ensure test job passes before pushing image. + needs: test + + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v2 + + - name: Build image + run: docker build . --file Dockerfile --tag $IMAGE_NAME + + - name: Log into GitHub Container Registry + run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Push image to GitHub Container Registry + run: | + IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME + + # Change all uppercase to lowercase + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + + # Strip git ref prefix from version + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + + # Strip "v" prefix from tag name + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + + # Use Docker `latest` tag convention + [ "$VERSION" == "develop" ] && VERSION=latest + + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION
FINDINGSTOTAL
FINDINGSTOTAL
"+ this.severityToString(s) + ""+severityTotals.get(s)+"
"+ this.severityToString(s) + ""+severityTotals.get(s)+"
" + alertTitle + "" + reportSummary.get(s).get(alertTitle) + "