diff --git a/.idea/libraries/Maven__cglib_cglib_nodep_2_1_3.xml b/.idea/libraries/Maven__cglib_cglib_nodep_2_1_3.xml
deleted file mode 100644
index 55692b9..0000000
--- a/.idea/libraries/Maven__cglib_cglib_nodep_2_1_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_14_0.xml b/.idea/libraries/Maven__com_google_guava_guava_14_0.xml
deleted file mode 100644
index 86eb63f..0000000
--- a/.idea/libraries/Maven__com_google_guava_guava_14_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_7.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_7.xml
deleted file mode 100644
index 5acf3f6..0000000
--- a/.idea/libraries/Maven__commons_codec_commons_codec_1_7.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
deleted file mode 100644
index 3caee7e..0000000
--- a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_2.xml b/.idea/libraries/Maven__commons_io_commons_io_2_2.xml
deleted file mode 100644
index f8084ec..0000000
--- a/.idea/libraries/Maven__commons_io_commons_io_2_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml b/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml
deleted file mode 100644
index b770f56..0000000
--- a/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__edu_umass_cs_benchlab_harlib_1_1_2.xml b/.idea/libraries/Maven__edu_umass_cs_benchlab_harlib_1_1_2.xml
deleted file mode 100644
index 94c82b7..0000000
--- a/.idea/libraries/Maven__edu_umass_cs_benchlab_harlib_1_1_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_3_5_2_Final.xml b/.idea/libraries/Maven__io_netty_netty_3_5_2_Final.xml
deleted file mode 100644
index 7de2ea9..0000000
--- a/.idea/libraries/Maven__io_netty_netty_3_5_2_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_11.xml b/.idea/libraries/Maven__junit_junit_4_11.xml
deleted file mode 100644
index f33320d..0000000
--- a/.idea/libraries/Maven__junit_junit_4_11.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_java_dev_jna_jna_3_4_0.xml b/.idea/libraries/Maven__net_java_dev_jna_jna_3_4_0.xml
deleted file mode 100644
index 4aa2e57..0000000
--- a/.idea/libraries/Maven__net_java_dev_jna_jna_3_4_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_java_dev_jna_platform_3_4_0.xml b/.idea/libraries/Maven__net_java_dev_jna_platform_3_4_0.xml
deleted file mode 100644
index ed23759..0000000
--- a/.idea/libraries/Maven__net_java_dev_jna_platform_3_4_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sourceforge_cssparser_cssparser_0_9_9.xml b/.idea/libraries/Maven__net_sourceforge_cssparser_cssparser_0_9_9.xml
deleted file mode 100644
index 535d8e4..0000000
--- a/.idea/libraries/Maven__net_sourceforge_cssparser_cssparser_0_9_9.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_2_12.xml b/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_2_12.xml
deleted file mode 100644
index 27c6cc8..0000000
--- a/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_2_12.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_core_js_2_12.xml b/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_core_js_2_12.xml
deleted file mode 100644
index d0c214f..0000000
--- a/.idea/libraries/Maven__net_sourceforge_htmlunit_htmlunit_core_js_2_12.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sourceforge_nekohtml_nekohtml_1_9_18.xml b/.idea/libraries/Maven__net_sourceforge_nekohtml_nekohtml_1_9_18.xml
deleted file mode 100644
index a6b2cae..0000000
--- a/.idea/libraries/Maven__net_sourceforge_nekohtml_nekohtml_1_9_18.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_exec_1_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_exec_1_1.xml
deleted file mode 100644
index 3c118df..0000000
--- a/.idea/libraries/Maven__org_apache_commons_commons_exec_1_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml
deleted file mode 100644
index 32bfe3b..0000000
--- a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_1.xml
deleted file mode 100644
index 9dedb80..0000000
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_1.xml
deleted file mode 100644
index 1b38fda..0000000
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_2_3.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_2_3.xml
deleted file mode 100644
index 4f9714a..0000000
--- a/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_2_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_8_1_9_v20130131.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_8_1_9_v20130131.xml
deleted file mode 100644
index d6e1165..0000000
--- a/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_8_1_9_v20130131.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_8_1_9_v20130131.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_8_1_9_v20130131.xml
deleted file mode 100644
index 15a462b..0000000
--- a/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_8_1_9_v20130131.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_8_1_9_v20130131.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_8_1_9_v20130131.xml
deleted file mode 100644
index fe0f833..0000000
--- a/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_8_1_9_v20130131.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_websocket_8_1_9_v20130131.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_websocket_8_1_9_v20130131.xml
deleted file mode 100644
index a141948..0000000
--- a/.idea/libraries/Maven__org_eclipse_jetty_jetty_websocket_8_1_9_v20130131.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml
deleted file mode 100644
index 5619316..0000000
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
deleted file mode 100644
index f58bbc1..0000000
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_json_json_20080701.xml b/.idea/libraries/Maven__org_json_json_20080701.xml
deleted file mode 100644
index b86a8bf..0000000
--- a/.idea/libraries/Maven__org_json_json_20080701.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mortbay_jetty_jetty_6_1_26.xml b/.idea/libraries/Maven__org_mortbay_jetty_jetty_6_1_26.xml
deleted file mode 100644
index 0f5d0b8..0000000
--- a/.idea/libraries/Maven__org_mortbay_jetty_jetty_6_1_26.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml b/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml
deleted file mode 100644
index f6ec2b9..0000000
--- a/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mortbay_jetty_servlet_api_2_5_20081211.xml b/.idea/libraries/Maven__org_mortbay_jetty_servlet_api_2_5_20081211.xml
deleted file mode 100644
index 4863239..0000000
--- a/.idea/libraries/Maven__org_mortbay_jetty_servlet_api_2_5_20081211.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_android_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_android_driver_2_32_0.xml
deleted file mode 100644
index acf8f47..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_android_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_2_32_0.xml
deleted file mode 100644
index b030996..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_2_32_0.xml
deleted file mode 100644
index ccf4c9d..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_2_32_0.xml
deleted file mode 100644
index d8b8ae7..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_htmlunit_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_htmlunit_driver_2_32_0.xml
deleted file mode 100644
index 5ad3f16..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_htmlunit_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_2_32_0.xml
deleted file mode 100644
index 7c6d16b..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_iphone_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_iphone_driver_2_32_0.xml
deleted file mode 100644
index 476325a..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_iphone_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_2_32_0.xml
deleted file mode 100644
index 4e41b24..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_2_32_0.xml
deleted file mode 100644
index 2443823..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_2_32_0.xml
deleted file mode 100644
index be75407..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_2_32_0.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_2_32_0.xml
deleted file mode 100644
index bd66562..0000000
--- a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_2_32_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_w3c_css_sac_1_3.xml b/.idea/libraries/Maven__org_w3c_css_sac_1_3.xml
deleted file mode 100644
index af3d414..0000000
--- a/.idea/libraries/Maven__org_w3c_css_sac_1_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_webbitserver_webbit_0_4_14.xml b/.idea/libraries/Maven__org_webbitserver_webbit_0_4_14.xml
deleted file mode 100644
index 1af4457..0000000
--- a/.idea/libraries/Maven__org_webbitserver_webbit_0_4_14.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xalan_serializer_2_7_1.xml b/.idea/libraries/Maven__xalan_serializer_2_7_1.xml
deleted file mode 100644
index 8891e3c..0000000
--- a/.idea/libraries/Maven__xalan_serializer_2_7_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xalan_xalan_2_7_1.xml b/.idea/libraries/Maven__xalan_xalan_2_7_1.xml
deleted file mode 100644
index 4149f4f..0000000
--- a/.idea/libraries/Maven__xalan_xalan_2_7_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xerces_xercesImpl_2_10_0.xml b/.idea/libraries/Maven__xerces_xercesImpl_2_10_0.xml
deleted file mode 100644
index 133d4d6..0000000
--- a/.idea/libraries/Maven__xerces_xercesImpl_2_10_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml b/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml
deleted file mode 100644
index 9aadd29..0000000
--- a/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
deleted file mode 100644
index e96534f..0000000
--- a/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
\ No newline at end of file
diff --git a/lib/zap-api-1.2.0.jar b/lib/zap-api-1.2.0.jar
new file mode 100644
index 0000000..53cbb56
Binary files /dev/null and b/lib/zap-api-1.2.0.jar differ
diff --git a/lib/zap-api-2.4-v9.jar b/lib/zap-api-2.4-v9.jar
deleted file mode 100644
index 1b1a163..0000000
Binary files a/lib/zap-api-2.4-v9.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 421ab9a..ef7cf1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
net.continuumsecurity
zap-java-api
- 2.4.3
+ 2.6.0
@@ -51,11 +51,9 @@
2.32.0
- org.owasp
- zaproxy-client-api
- 2.4.3
- system
- ${project.basedir}/lib/zap-api-2.4-v9.jar
+ org.zaproxy
+ zap-clientapi
+ 1.2.0
edu.umass.cs.benchlab
diff --git a/proxy.iml b/proxy.iml
index d8a24f0..3973720 100644
--- a/proxy.iml
+++ b/proxy.iml
@@ -60,15 +60,8 @@
-
-
-
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/src/main/java/net/continuumsecurity/proxy/LoggingProxy.java b/src/main/java/net/continuumsecurity/proxy/LoggingProxy.java
index 7dae4ce..26630cd 100644
--- a/src/main/java/net/continuumsecurity/proxy/LoggingProxy.java
+++ b/src/main/java/net/continuumsecurity/proxy/LoggingProxy.java
@@ -53,4 +53,7 @@ When a match is found, return the entire HarEntry (request and response).
Return the details of the proxy in Selenium format: org.openqa.selenium.Proxy
*/
Proxy getSeleniumProxy() throws UnknownHostException;
+
+ public void setAttackMode() throws ProxyException;
+
}
diff --git a/src/main/java/net/continuumsecurity/proxy/ZAProxyScanner.java b/src/main/java/net/continuumsecurity/proxy/ZAProxyScanner.java
index 5ee71ff..041538b 100644
--- a/src/main/java/net/continuumsecurity/proxy/ZAProxyScanner.java
+++ b/src/main/java/net/continuumsecurity/proxy/ZAProxyScanner.java
@@ -38,7 +38,7 @@
import java.util.regex.Pattern;
public class ZAProxyScanner implements ScanningProxy, Spider, Authentication, ContextModifier {
- private static final String MINIMUM_ZAP_VERSION = "2.4.3"; // Weekly builds are also allowed.
+ private static final String MINIMUM_ZAP_VERSION = "2.6"; // Weekly builds are also allowed.
private final ClientApi clientApi;
private final Proxy seleniumProxy;
private final String apiKey;
@@ -50,13 +50,13 @@ public ZAProxyScanner(String host, int port, String apiKey)
validatePort(port);
this.apiKey = apiKey;
- clientApi = new ClientApi(host, port);
+ clientApi = new ClientApi(host, port, this.apiKey);
validateMinimumRequiredZapVersion();
seleniumProxy = new Proxy();
seleniumProxy.setProxyType(Proxy.ProxyType.PAC);
StringBuilder strBuilder = new StringBuilder();
- strBuilder.append("http://").append(host).append(":").append(port).append("/proxy.pac");
+ strBuilder.append("http://").append(host).append(":").append(port).append("/proxy.pac?apikey=").append(this.apiKey);
seleniumProxy.setProxyAutoconfigUrl(strBuilder.toString());
}
@@ -90,6 +90,9 @@ private static boolean validZAPVersion(String expected, String given) {
if (Integer.parseInt(givenVersion[i]) < Integer.parseInt(expectedVersion[i])) {
return false;
}
+ if (Integer.parseInt(givenVersion[i]) > Integer.parseInt(expectedVersion[i])) {
+ return true;
+ }
}
}
@@ -116,17 +119,17 @@ private void validateMinimumRequiredZapVersion() throws ProxyException {
@Override
public void setScannerAttackStrength(String scannerId, String strength) throws ProxyException {
try {
- clientApi.ascan.setScannerAttackStrength(apiKey, scannerId, strength, null);
+ clientApi.ascan.setScannerAttackStrength(scannerId, strength, null);
} catch (ClientApiException e) {
e.printStackTrace();
- throw new ProxyException("Error occurred for setScannerAttackStrength", e);
+ throw new ProxyException("Error occurred for setScannerAttackStrength for scannerId: "+scannerId+" and strength: "+strength, e);
}
}
@Override
public void setScannerAlertThreshold(String scannerId, String threshold) throws ProxyException {
try {
- clientApi.ascan.setScannerAlertThreshold(apiKey, scannerId, threshold, null);
+ clientApi.ascan.setScannerAlertThreshold(scannerId, threshold, null);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -137,9 +140,9 @@ public void setScannerAlertThreshold(String scannerId, String threshold) throws
public void setEnableScanners(String ids, boolean enabled) throws ProxyException {
try {
if (enabled) {
- clientApi.ascan.enableScanners(apiKey, ids);
+ clientApi.ascan.enableScanners(ids, null);
} else {
- clientApi.ascan.disableScanners(apiKey, ids);
+ clientApi.ascan.disableScanners(ids, null);
}
} catch (ClientApiException e) {
e.printStackTrace();
@@ -150,8 +153,8 @@ public void setEnableScanners(String ids, boolean enabled) throws ProxyException
@Override
public void disableAllScanners() throws ProxyException {
try {
- ApiResponse response = clientApi.pscan.setEnabled(apiKey, "false");
- response = clientApi.ascan.disableAllScanners(apiKey, null);
+ ApiResponse response = clientApi.pscan.setEnabled("false");
+ response = clientApi.ascan.disableAllScanners(null);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -161,8 +164,8 @@ public void disableAllScanners() throws ProxyException {
@Override
public void enableAllScanners() throws ProxyException {
try {
- clientApi.pscan.setEnabled(apiKey, "true");
- clientApi.ascan.enableAllScanners(apiKey, null);
+ clientApi.pscan.setEnabled("true");
+ clientApi.ascan.enableAllScanners(null);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -172,7 +175,7 @@ public void enableAllScanners() throws ProxyException {
@Override
public void setEnablePassiveScan(boolean enabled) throws ProxyException {
try {
- clientApi.pscan.setEnabled(apiKey, Boolean.toString(enabled));
+ clientApi.pscan.setEnabled(Boolean.toString(enabled));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -185,7 +188,7 @@ public List getAlerts() throws ProxyException {
public void deleteAlerts() throws ProxyException {
try {
- clientApi.core.deleteAllAlerts(apiKey);
+ clientApi.core.deleteAllAlerts();
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -194,7 +197,7 @@ public void deleteAlerts() throws ProxyException {
public byte[] getXmlReport() {
try {
- return clientApi.core.xmlreport(apiKey);
+ return clientApi.core.xmlreport();
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -204,7 +207,7 @@ public byte[] getXmlReport() {
@Override
public byte[] getHtmlReport() throws ProxyException {
try {
- return clientApi.core.htmlreport(apiKey);
+ return clientApi.core.htmlreport();
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -231,7 +234,7 @@ public int getAlertsCount() throws ProxyException {
public void scan(String url) throws ProxyException {
try {
- clientApi.ascan.scan(apiKey, url, "true", "false", null, null, null);
+ clientApi.ascan.scan(url, "true", "false", null, null, null);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -252,8 +255,8 @@ public void scanAsUser(String url, String contextId, String userId, boolean recu
throws ProxyException {
try {
this.clientApi.ascan
- .scanAsUser(this.apiKey, url, contextId, userId, String.valueOf(recurse),
- (String) null, (String) null, (String) null);
+ .scanAsUser(url, contextId, userId, String.valueOf(recurse),
+ null, null, null);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -272,8 +275,8 @@ public int getScanProgress(int id) throws ProxyException {
public void clear() throws ProxyException {
try {
- clientApi.ascan.removeAllScans(apiKey);
- clientApi.core.newSession(apiKey, "", "");
+ clientApi.ascan.removeAllScans();
+ clientApi.core.newSession("", "");
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -287,7 +290,7 @@ public List getHistory() throws ProxyException {
public List getHistory(int start, int count) throws ProxyException {
try {
return ClientApiUtils.getHarEntries(clientApi.core
- .messagesHar(apiKey, "", Integer.toString(start), Integer.toString(count)));
+ .messagesHar("", Integer.toString(start), Integer.toString(count)));
} catch (ClientApiException e) {
e.printStackTrace();
@@ -324,7 +327,7 @@ public List findInResponseHistory(String regex, List entries
public List findInRequestHistory(String regex) throws ProxyException {
try {
return ClientApiUtils
- .getHarEntries(clientApi.search.harByRequestRegex(apiKey, regex, "", "-1", "-1"));
+ .getHarEntries(clientApi.search.harByRequestRegex(regex, "", "-1", "-1"));
} catch (ClientApiException e) {
e.printStackTrace();
@@ -335,7 +338,7 @@ public List findInRequestHistory(String regex) throws ProxyException {
public List findInResponseHistory(String regex) throws ProxyException {
try {
return ClientApiUtils
- .getHarEntries(clientApi.search.harByResponseRegex(apiKey, regex, "", "-1", "-1"));
+ .getHarEntries(clientApi.search.harByResponseRegex(regex, "", "-1", "-1"));
} catch (ClientApiException e) {
e.printStackTrace();
@@ -347,8 +350,9 @@ public List makeRequest(HarRequest request, boolean followRedirect)
throws ProxyException {
try {
String harRequestStr = ClientApiUtils.convertHarRequestToString(request);
- return ClientApiUtils.getHarEntries(clientApi.core
- .sendHarRequest(apiKey, harRequestStr, Boolean.toString(followRedirect)));
+ byte[] response = clientApi.core.sendHarRequest(harRequestStr, Boolean.toString(followRedirect));
+ String responseAsString = new String(response);
+ return ClientApiUtils.getHarEntries(response);
} catch (ClientApiException e) {
e.printStackTrace();
@@ -368,7 +372,7 @@ public void spider(String url, Integer maxChildren, boolean recurse, String cont
try {
clientApi.spider
- .scan(apiKey, url, maxChildrenString, String.valueOf(recurse), contextNameString);
+ .scan(url, maxChildrenString, String.valueOf(recurse), contextNameString, null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -378,7 +382,7 @@ public void spider(String url, Integer maxChildren, boolean recurse, String cont
public void spider(String url) {
try {
clientApi.spider
- .scan(apiKey, url, null, null, null);
+ .scan(url, null, null, null, null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -391,7 +395,7 @@ public void spider(String url, boolean recurse, String contextName) {
try {
clientApi.spider
- .scan(apiKey, url, null, String.valueOf(recurse), contextNameString);
+ .scan(url, null, String.valueOf(recurse), contextNameString, null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -401,7 +405,7 @@ public void spider(String url, boolean recurse, String contextName) {
public void spiderAsUser(String url, String contextId, String userId) {
try {
clientApi.spider
- .scanAsUser(apiKey, url, contextId, userId, null, null);
+ .scanAsUser(url, contextId, userId, null, null, null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -411,7 +415,7 @@ public void spiderAsUser(String url, String contextId, String userId) {
public void spiderAsUser(String url, String contextId, String userId, boolean recurse) {
try {
clientApi.spider
- .scanAsUser(apiKey, url, contextId, userId, null, String.valueOf(recurse));
+ .scanAsUser(url, contextId, userId, null, String.valueOf(recurse), null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -422,7 +426,7 @@ public void spiderAsUser(String url, String contextId, String userId,
Integer maxChildren, boolean recurse) {
try {
clientApi.spider
- .scanAsUser(apiKey, url, contextId, userId, String.valueOf(maxChildren), String.valueOf(recurse));
+ .scanAsUser(url, contextId, userId, String.valueOf(maxChildren), String.valueOf(recurse), null);
} catch (ClientApiException e) {
e.printStackTrace();
}
@@ -431,7 +435,7 @@ public void spiderAsUser(String url, String contextId, String userId,
@Override
public void excludeFromSpider(String regex) {
try {
- clientApi.spider.excludeFromScan(apiKey, regex);
+ clientApi.spider.excludeFromScan(regex);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -441,7 +445,17 @@ public void excludeFromSpider(String regex) {
@Override
public void excludeFromScanner(String regex) {
try {
- clientApi.ascan.excludeFromScan(apiKey, regex);
+ clientApi.ascan.excludeFromScan(regex);
+ } catch (ClientApiException e) {
+ e.printStackTrace();
+ throw new ProxyException(e);
+ }
+ }
+
+ @Override
+ public void setAttackMode() throws ProxyException {
+ try {
+ clientApi.core.setMode("attack");
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -451,7 +465,7 @@ public void excludeFromScanner(String regex) {
@Override
public void setMaxDepth(int depth) {
try {
- clientApi.spider.setOptionMaxDepth(apiKey, depth);
+ clientApi.spider.setOptionMaxDepth(depth);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -461,7 +475,7 @@ public void setMaxDepth(int depth) {
@Override
public void setPostForms(boolean post) {
try {
- clientApi.spider.setOptionPostForm(apiKey, post);
+ clientApi.spider.setOptionPostForm(post);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -471,7 +485,7 @@ public void setPostForms(boolean post) {
@Override
public void setThreadCount(int threads) {
try {
- clientApi.spider.setOptionThreadCount(apiKey, threads);
+ clientApi.spider.setOptionThreadCount(threads);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -536,7 +550,7 @@ public List getSpiderResults(int id) {
@Override
public void shutdown() {
try {
- clientApi.core.shutdown(apiKey);
+ clientApi.core.shutdown();
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -552,7 +566,7 @@ public void shutdown() {
@Override
public void setOptionHandleAntiCSRFTokens(boolean enabled) throws ProxyException {
try {
- clientApi.ascan.setOptionHandleAntiCSRFTokens(apiKey, enabled);
+ clientApi.ascan.setOptionHandleAntiCSRFTokens(enabled);
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -569,8 +583,8 @@ public void setOptionHandleAntiCSRFTokens(boolean enabled) throws ProxyException
@Override
public void createContext(String contextName, boolean inScope) throws ProxyException {
try {
- clientApi.context.newContext(apiKey, contextName);
- clientApi.context.setContextInScope(apiKey, contextName, String.valueOf(inScope));
+ clientApi.context.newContext(contextName);
+ clientApi.context.setContextInScope(contextName, String.valueOf(inScope));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -587,7 +601,7 @@ public void createContext(String contextName, boolean inScope) throws ProxyExcep
@Override
public void includeRegexInContext(String contextName, Pattern regex) throws ProxyException {
try {
- clientApi.context.includeInContext(apiKey, contextName, Pattern.quote(regex.pattern()));
+ clientApi.context.includeInContext(contextName, Pattern.quote(regex.pattern()));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -607,7 +621,7 @@ public void includeUrlTreeInContext(String contextName, String parentUrl)
Pattern pattern = Pattern.compile(parentUrl);
try {
clientApi.context
- .includeInContext(apiKey, contextName, Pattern.quote(pattern.pattern()) + ".*");
+ .includeInContext(contextName, Pattern.quote(pattern.pattern()) + ".*");
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -624,7 +638,7 @@ public void includeUrlTreeInContext(String contextName, String parentUrl)
@Override
public void excludeRegexFromContext(String contextName, Pattern regex) throws ProxyException {
try {
- clientApi.context.excludeFromContext(apiKey, contextName, Pattern.quote(regex.pattern()));
+ clientApi.context.excludeFromContext(contextName, Pattern.quote(regex.pattern()));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -644,7 +658,7 @@ public void excludeParentUrlFromContext(String contextName, String parentUrl)
Pattern pattern = Pattern.compile(parentUrl);
try {
clientApi.context
- .excludeFromContext(apiKey, contextName, Pattern.quote(pattern.pattern()) + ".*");
+ .excludeFromContext(contextName, Pattern.quote(pattern.pattern()) + ".*");
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -698,7 +712,7 @@ public List getContexts() throws ProxyException {
@Override
public void setContextInScope(String contextName, boolean inScope) throws ProxyException {
try {
- clientApi.context.setContextInScope(apiKey, contextName, String.valueOf(inScope));
+ clientApi.context.setContextInScope(contextName, String.valueOf(inScope));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -824,7 +838,7 @@ public void setLoggedInIndicator(String contextId, String loggedInIndicatorRegex
throws ProxyException {
try {
clientApi.authentication
- .setLoggedInIndicator(apiKey, contextId, Pattern.quote(loggedInIndicatorRegex));
+ .setLoggedInIndicator(contextId, Pattern.quote(loggedInIndicatorRegex));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -843,7 +857,7 @@ public void setLoggedOutIndicator(String contextId, String loggedOutIndicatorReg
throws ProxyException {
try {
clientApi.authentication
- .setLoggedOutIndicator(apiKey, contextId, Pattern.quote(loggedOutIndicatorRegex));
+ .setLoggedOutIndicator(contextId, Pattern.quote(loggedOutIndicatorRegex));
} catch (ClientApiException e) {
e.printStackTrace();
throw new ProxyException(e);
@@ -872,7 +886,7 @@ public Map getAuthenticationMethodInfo(String contextId) throws
.put("methodName", ((ApiResponseElement) apiResponse).getValue());
} else if (apiResponse instanceof ApiResponseSet) {
ApiResponseSet apiResponseSet = (ApiResponseSet) apiResponse;
- String authenticationMethod = apiResponseSet.getAttribute("methodName");
+ String authenticationMethod = apiResponseSet.getStringValue("methodName");
authenticationMethodDetails.put("methodName", authenticationMethod);
if (authenticationMethod
@@ -881,22 +895,22 @@ public Map getAuthenticationMethodInfo(String contextId) throws
AuthenticationMethod.FORM_BASED_AUTHENTICATION.getValue());
for (Map configParameter : configParameters) {
authenticationMethodDetails.put(configParameter.get("name"),
- apiResponseSet.getAttribute(configParameter.get("name")));
+ apiResponseSet.getStringValue(configParameter.get("name")));
}
} else if (authenticationMethod
.equals(AuthenticationMethod.HTTP_AUTHENTICATION.getValue())) {
// Cannot dynamically populate the values for httpAuthentication, as one of the parameters in getAuthMethodConfigParameters (hostname) is different to what is returned here (host).
- authenticationMethodDetails.put("host", apiResponseSet.getAttribute("host"));
- authenticationMethodDetails.put("realm", apiResponseSet.getAttribute("realm"));
- authenticationMethodDetails.put("port", apiResponseSet.getAttribute("port"));
+ authenticationMethodDetails.put("host", apiResponseSet.getStringValue("host"));
+ authenticationMethodDetails.put("realm", apiResponseSet.getStringValue("realm"));
+ authenticationMethodDetails.put("port", apiResponseSet.getStringValue("port"));
} else if (authenticationMethod
.equals(AuthenticationMethod.SCRIPT_BASED_AUTHENTICATION.getValue())) {
authenticationMethodDetails
- .put("scriptName", apiResponseSet.getAttribute("scriptName"));
- authenticationMethodDetails.put("LoginURL", apiResponseSet.getAttribute("LoginURL"));
- authenticationMethodDetails.put("Method", apiResponseSet.getAttribute("Method"));
- authenticationMethodDetails.put("Domain", apiResponseSet.getAttribute("Domain"));
- authenticationMethodDetails.put("Path", apiResponseSet.getAttribute("Path"));
+ .put("scriptName", apiResponseSet.getStringValue("scriptName"));
+ authenticationMethodDetails.put("LoginURL", apiResponseSet.getStringValue("LoginURL"));
+ authenticationMethodDetails.put("Method", apiResponseSet.getStringValue("Method"));
+ authenticationMethodDetails.put("Domain", apiResponseSet.getStringValue("Domain"));
+ authenticationMethodDetails.put("Path", apiResponseSet.getStringValue("Path"));
}
}
return authenticationMethodDetails;
@@ -952,8 +966,8 @@ private List