watobo 0.9.21 → 0.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +46 -1
- data/bin/nfq_server.rb +0 -9
- data/bin/watobo_gui.rb +3 -13
- data/custom-views/prettify-json.rb +9 -18
- data/icons/watobo.ico +0 -0
- data/icons/watobo.ico.old +0 -0
- data/lib/watobo.rb +10 -19
- data/lib/watobo/adapters.rb +5 -14
- data/lib/watobo/adapters/data_store.rb +50 -59
- data/lib/watobo/adapters/file/file_store.rb +287 -296
- data/lib/watobo/adapters/file/marshal_store.rb +293 -296
- data/lib/watobo/adapters/session_store.rb +5 -14
- data/lib/watobo/ca.rb +1 -10
- data/lib/watobo/config.rb +197 -206
- data/lib/watobo/constants.rb +0 -9
- data/lib/watobo/core.rb +3 -12
- data/lib/watobo/core/active_check.rb +72 -135
- data/lib/watobo/core/active_checks.rb +49 -58
- data/lib/watobo/core/ca.rb +369 -389
- data/lib/watobo/core/cert_store.rb +34 -43
- data/lib/watobo/core/chat.rb +92 -101
- data/lib/watobo/core/chats.rb +271 -280
- data/lib/watobo/core/client_cert_store.rb +106 -35
- data/lib/watobo/core/conversation.rb +48 -57
- data/lib/watobo/core/cookie.rb +23 -32
- data/lib/watobo/core/egress_handlers.rb +98 -0
- data/lib/watobo/core/finding.rb +66 -75
- data/lib/watobo/core/findings.rb +107 -114
- data/lib/watobo/core/forwarding_proxy.rb +13 -22
- data/lib/watobo/core/fuzz_gen.rb +0 -9
- data/lib/watobo/core/intercept_carver.rb +166 -177
- data/lib/watobo/core/intercept_filter.rb +235 -244
- data/lib/watobo/core/interceptor.rb +98 -107
- data/lib/watobo/core/min_class.rb +4 -13
- data/lib/watobo/core/netfilter_queue.rb +170 -179
- data/lib/watobo/core/ott_cache.rb +132 -141
- data/lib/watobo/core/parameter.rb +43 -52
- data/lib/watobo/core/passive_check.rb +103 -102
- data/lib/watobo/core/passive_checks.rb +48 -57
- data/lib/watobo/core/passive_scanner.rb +54 -55
- data/lib/watobo/core/plugin.rb +11 -20
- data/lib/watobo/core/project.rb +3 -9
- data/lib/watobo/core/proxy.rb +43 -52
- data/lib/watobo/core/request.rb +125 -123
- data/lib/watobo/core/response.rb +44 -53
- data/lib/watobo/core/scanner.rb +0 -9
- data/lib/watobo/core/scanner3.rb +405 -414
- data/lib/watobo/core/scope.rb +83 -92
- data/lib/watobo/core/session.rb +1043 -1026
- data/lib/watobo/core/sid_cache.rb +98 -107
- data/lib/watobo/core/subscriber.rb +25 -34
- data/lib/watobo/defaults.rb +21 -30
- data/lib/watobo/external/diff/lcs.rb +0 -9
- data/lib/watobo/external/diff/lcs/array.rb +0 -9
- data/lib/watobo/external/diff/lcs/block.rb +0 -9
- data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
- data/lib/watobo/external/diff/lcs/change.rb +0 -9
- data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
- data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
- data/lib/watobo/external/diff/lcs/string.rb +0 -9
- data/lib/watobo/externals.rb +6 -15
- data/lib/watobo/framework.rb +4 -13
- data/lib/watobo/framework/create_project.rb +60 -69
- data/lib/watobo/framework/init.rb +0 -9
- data/lib/watobo/framework/init_modules.rb +0 -9
- data/lib/watobo/framework/license_text.rb +28 -37
- data/lib/watobo/framework/load_chat.rb +13 -22
- data/lib/watobo/gui.rb +132 -123
- data/lib/watobo/gui/about_watobo.rb +0 -9
- data/lib/watobo/gui/browser_preview.rb +0 -9
- data/lib/watobo/gui/certificate_dialog.rb +0 -9
- data/lib/watobo/gui/chat_diff.rb +0 -9
- data/lib/watobo/gui/chatviewer_frame.rb +73 -72
- data/lib/watobo/gui/checkboxtree.rb +0 -9
- data/lib/watobo/gui/checks_policy_frame.rb +0 -9
- data/lib/watobo/gui/client_cert_dialog.rb +96 -87
- data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
- data/lib/watobo/gui/conversation_table.rb +158 -164
- data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
- data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
- data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
- data/lib/watobo/gui/custom_viewer.rb +374 -383
- data/lib/watobo/gui/dashboard.rb +296 -303
- data/lib/watobo/gui/define_scope_frame.rb +0 -9
- data/lib/watobo/gui/differ_frame.rb +215 -224
- data/lib/watobo/gui/edit_comment.rb +0 -9
- data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
- data/lib/watobo/gui/export_dialog.rb +104 -113
- data/lib/watobo/gui/finding_info.rb +0 -9
- data/lib/watobo/gui/findings_tree.rb +210 -217
- data/lib/watobo/gui/full_scan_dialog.rb +0 -9
- data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
- data/lib/watobo/gui/fxsave_thread.rb +14 -0
- data/lib/watobo/gui/goto_url_dialog.rb +70 -79
- data/lib/watobo/gui/hex_viewer.rb +0 -9
- data/lib/watobo/gui/html_viewer.rb +287 -296
- data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
- data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
- data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
- data/lib/watobo/gui/json_viewer.rb +287 -0
- data/lib/watobo/gui/list_box.rb +101 -110
- data/lib/watobo/gui/log_file_viewer.rb +32 -41
- data/lib/watobo/gui/log_viewer.rb +83 -88
- data/lib/watobo/gui/login_wizzard.rb +0 -9
- data/lib/watobo/gui/main_window.rb +587 -618
- data/lib/watobo/gui/manual_request_editor.rb +620 -565
- data/lib/watobo/gui/master_pw_dialog.rb +0 -9
- data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
- data/lib/watobo/gui/page_tree.rb +217 -226
- data/lib/watobo/gui/password_policy_dialog.rb +0 -9
- data/lib/watobo/gui/plugin_board.rb +0 -9
- data/lib/watobo/gui/preferences_dialog.rb +0 -9
- data/lib/watobo/gui/progress_window.rb +17 -27
- data/lib/watobo/gui/project_wizzard.rb +0 -9
- data/lib/watobo/gui/proxy_dialog.rb +1 -10
- data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
- data/lib/watobo/gui/request_builder_frame.rb +102 -111
- data/lib/watobo/gui/request_editor.rb +181 -137
- data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
- data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
- data/lib/watobo/gui/save_chat_dialog.rb +140 -149
- data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
- data/lib/watobo/gui/select_chat_dialog.rb +0 -9
- data/lib/watobo/gui/session_management_dialog.rb +0 -9
- data/lib/watobo/gui/sites_tree.rb +0 -9
- data/lib/watobo/gui/status_bar.rb +0 -9
- data/lib/watobo/gui/table_editor.rb +0 -9
- data/lib/watobo/gui/tagless_viewer.rb +0 -9
- data/lib/watobo/gui/templates/plugin.rb +0 -9
- data/lib/watobo/gui/templates/plugin2.rb +92 -100
- data/lib/watobo/gui/templates/plugin_base.rb +144 -153
- data/lib/watobo/gui/text_viewer.rb +0 -9
- data/lib/watobo/gui/transcoder_window.rb +0 -9
- data/lib/watobo/gui/utils/gui_utils.rb +0 -9
- data/lib/watobo/gui/utils/init_icons.rb +86 -95
- data/lib/watobo/gui/utils/load_icons.rb +33 -42
- data/lib/watobo/gui/utils/load_plugins.rb +116 -119
- data/lib/watobo/gui/utils/master_password.rb +68 -77
- data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
- data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
- data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
- data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
- data/lib/watobo/gui/utils/session_history.rb +112 -121
- data/lib/watobo/gui/workspace_dialog.rb +0 -9
- data/lib/watobo/gui/www_auth_dialog.rb +0 -9
- data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
- data/lib/watobo/http.rb +4 -13
- data/lib/watobo/http/cookies/cookies.rb +26 -35
- data/lib/watobo/http/data/data.rb +45 -54
- data/lib/watobo/http/data/json.rb +47 -55
- data/lib/watobo/http/url/url.rb +38 -47
- data/lib/watobo/http/xml/xml.rb +124 -130
- data/lib/watobo/interceptor.rb +3 -12
- data/lib/watobo/interceptor/proxy.rb +742 -739
- data/lib/watobo/interceptor/transparent.rb +22 -24
- data/lib/watobo/mixins.rb +10 -19
- data/lib/watobo/mixins/check_info.rb +27 -36
- data/lib/watobo/mixins/httpparser.rb +613 -637
- data/lib/watobo/mixins/request_parser.rb +88 -97
- data/lib/watobo/mixins/shapers.rb +515 -529
- data/lib/watobo/mixins/transcoders.rb +3 -11
- data/lib/watobo/parser.rb +1 -10
- data/lib/watobo/parser/html.rb +83 -92
- data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
- data/lib/watobo/sockets.rb +3 -12
- data/lib/watobo/sockets/agent.rb +828 -837
- data/lib/watobo/sockets/client_socket.rb +308 -312
- data/lib/watobo/sockets/connection.rb +401 -410
- data/lib/watobo/sockets/http_socket.rb +11 -13
- data/lib/watobo/sockets/ntlm_auth.rb +129 -138
- data/lib/watobo/utils.rb +10 -19
- data/lib/watobo/utils/check_regex.rb +0 -9
- data/lib/watobo/utils/copy_object.rb +0 -9
- data/lib/watobo/utils/crypto.rb +0 -9
- data/lib/watobo/utils/expand_range.rb +23 -32
- data/lib/watobo/utils/export_xml.rb +97 -106
- data/lib/watobo/utils/file_management.rb +9 -11
- data/lib/watobo/utils/hexprint.rb +9 -18
- data/lib/watobo/utils/load_chat.rb +0 -9
- data/lib/watobo/utils/load_icon.rb +0 -9
- data/lib/watobo/utils/ntlm.rb +866 -875
- data/lib/watobo/utils/print_debug.rb +12 -21
- data/lib/watobo/utils/response_builder.rb +90 -99
- data/lib/watobo/utils/response_hash.rb +0 -9
- data/lib/watobo/utils/secure_eval.rb +0 -9
- data/lib/watobo/utils/strings.rb +10 -19
- data/lib/watobo/utils/text2request.rb +0 -9
- data/lib/watobo/utils/url.rb +23 -32
- data/lib/watobo/utils/utf16.rb +11 -20
- data/modules/active/Apache/mod_status.rb +0 -9
- data/modules/active/Apache/multiview.rb +151 -160
- data/modules/active/Flash/crossdomain.rb +0 -9
- data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
- data/modules/active/cq5/cq5_default_selectors.rb +106 -115
- data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
- data/modules/active/directories/dirwalker.rb +0 -9
- data/modules/active/discovery/fileextensions.rb +0 -9
- data/modules/active/discovery/http_methods.rb +0 -9
- data/modules/active/discovery/jsmapfiles.rb +79 -0
- data/modules/active/domino/domino_db.rb +68 -76
- data/modules/active/dotNET/custom_errors.rb +102 -111
- data/modules/active/dotNET/dotnet_files.rb +90 -99
- data/modules/active/fileinclusion/lfi_simple.rb +0 -9
- data/modules/active/jboss/jboss_basic.rb +0 -9
- data/modules/active/sap/business_objects.rb +51 -60
- data/modules/active/sap/its_commands.rb +0 -9
- data/modules/active/sap/its_service_parameter.rb +0 -9
- data/modules/active/sap/its_services.rb +0 -9
- data/modules/active/sap/its_xss.rb +0 -9
- data/modules/active/shell_shock/shell_shock.rb +139 -148
- data/modules/active/siebel/siebel_apps.rb +160 -169
- data/modules/active/sqlinjection/sql_boolean.rb +0 -9
- data/modules/active/sqlinjection/sql_numerical.rb +198 -0
- data/modules/active/sqlinjection/sqli_error.rb +0 -9
- data/modules/active/sqlinjection/sqli_timing.rb +220 -229
- data/modules/active/struts2/default_handler_ognl.rb +106 -115
- data/modules/active/struts2/include_params_ognl.rb +105 -114
- data/modules/active/xml/xml_xxe.rb +112 -123
- data/modules/active/xss/xss_ng.rb +214 -223
- data/modules/active/xss/xss_simple.rb +0 -9
- data/modules/passive/ajax.rb +68 -77
- data/modules/passive/autocomplete.rb +56 -65
- data/modules/passive/cookie_options.rb +0 -9
- data/modules/passive/cookie_xss.rb +0 -9
- data/modules/passive/detect_code.rb +0 -9
- data/modules/passive/detect_fileupload.rb +0 -9
- data/modules/passive/detect_infrastructure.rb +0 -9
- data/modules/passive/detect_one_time_tokens.rb +0 -9
- data/modules/passive/dirindexing.rb +0 -9
- data/modules/passive/disclosure_domino.rb +55 -64
- data/modules/passive/disclosure_emails.rb +0 -9
- data/modules/passive/disclosure_ipaddr.rb +55 -53
- data/modules/passive/filename_as_parameter.rb +0 -9
- data/modules/passive/form_spotter.rb +0 -9
- data/modules/passive/hidden_fields.rb +50 -59
- data/modules/passive/hotspots.rb +0 -9
- data/modules/passive/in_script_parameter.rb +0 -9
- data/modules/passive/json_web_token.rb +93 -0
- data/modules/passive/multiple_server_headers.rb +0 -9
- data/modules/passive/possible_login.rb +0 -9
- data/modules/passive/redirect_url.rb +0 -9
- data/modules/passive/redirectionz.rb +0 -9
- data/modules/passive/sap-headers.rb +56 -65
- data/modules/passive/xss_dom.rb +0 -9
- data/plugins/aem/aem.rb +11 -20
- data/plugins/aem/gui/main.rb +118 -127
- data/plugins/aem/gui/tree_view.rb +171 -180
- data/plugins/aem/lib/agent.rb +130 -138
- data/plugins/aem/lib/dispatcher.rb +45 -51
- data/plugins/aem/lib/engine.rb +177 -186
- data/plugins/catalog/catalog.rb +345 -355
- data/plugins/crawler/crawler.rb +4 -13
- data/plugins/crawler/gui.rb +5 -14
- data/plugins/crawler/gui/auth_frame.rb +270 -279
- data/plugins/crawler/gui/crawler_gui.rb +271 -276
- data/plugins/crawler/gui/general_settings_frame.rb +96 -105
- data/plugins/crawler/gui/hooks_frame.rb +80 -89
- data/plugins/crawler/gui/scope_frame.rb +50 -59
- data/plugins/crawler/gui/settings_tabbook.rb +38 -47
- data/plugins/crawler/gui/status_frame.rb +59 -68
- data/plugins/crawler/lib/bags.rb +18 -27
- data/plugins/crawler/lib/constants.rb +11 -20
- data/plugins/crawler/lib/engine.rb +488 -497
- data/plugins/crawler/lib/grabber.rb +68 -77
- data/plugins/crawler/lib/status.rb +71 -80
- data/plugins/crawler/lib/uri_mp.rb +12 -21
- data/plugins/filefinder/filefinder.rb +326 -333
- data/plugins/sqlmap/bin/test.rb +78 -87
- data/plugins/sqlmap/gui.rb +4 -13
- data/plugins/sqlmap/gui/main.rb +218 -227
- data/plugins/sqlmap/gui/options_frame.rb +97 -106
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
- data/plugins/sqlmap/sqlmap.rb +2 -11
- data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
- data/plugins/sslchecker/gui/cipher_table.rb +246 -254
- data/plugins/sslchecker/gui/gui.rb +258 -264
- data/plugins/sslchecker/gui/sslchecker.rb +4 -13
- data/plugins/sslchecker/lib/check.rb +127 -133
- data/plugins/wshell/gui/main.rb +119 -117
- data/plugins/wshell/lib/core.rb +38 -88
- data/plugins/wshell/wshell.rb +11 -20
- metadata +170 -164
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# master_pw_dialog.rb
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
1
|
# @private
|
|
11
2
|
module Watobo#:nodoc: all
|
|
12
3
|
module Gui
|
|
@@ -1,40 +1,31 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# gui_settings.rb
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
1
|
# @private
|
|
11
|
-
module Watobo#:nodoc: all
|
|
12
|
-
module Gui
|
|
13
|
-
module Settings
|
|
14
|
-
def self.save_gui_settings(settings)
|
|
15
|
-
wd = Watobo.working_directory
|
|
16
|
-
|
|
17
|
-
dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
|
|
18
|
-
path = File.join(wd, "conf", "gui")
|
|
19
|
-
Dir.mkdir path unless File.exist? path
|
|
20
|
-
conf_dir = File.join(path, dir_name)
|
|
21
|
-
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
22
|
-
file = File.join(conf_dir, dir_name + "_settings.yml")
|
|
23
|
-
|
|
24
|
-
Watobo::Utils.save_settings(file, config)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def load_gui_settings()
|
|
28
|
-
wd = Watobo.working_directory
|
|
29
|
-
dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
|
|
30
|
-
path = File.join(wd, "conf", "gui")
|
|
31
|
-
Dir.mkdir path unless File.exist? path
|
|
32
|
-
conf_dir = File.join(path, dir_name)
|
|
33
|
-
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
34
|
-
file = File.join(conf_dir, dir_name + "_settings.yml")
|
|
35
|
-
config = Watobo::Utils.load_settings(file)
|
|
36
|
-
config
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Gui
|
|
4
|
+
module Settings
|
|
5
|
+
def self.save_gui_settings(settings)
|
|
6
|
+
wd = Watobo.working_directory
|
|
7
|
+
|
|
8
|
+
dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
|
|
9
|
+
path = File.join(wd, "conf", "gui")
|
|
10
|
+
Dir.mkdir path unless File.exist? path
|
|
11
|
+
conf_dir = File.join(path, dir_name)
|
|
12
|
+
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
13
|
+
file = File.join(conf_dir, dir_name + "_settings.yml")
|
|
14
|
+
|
|
15
|
+
Watobo::Utils.save_settings(file, config)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def load_gui_settings()
|
|
19
|
+
wd = Watobo.working_directory
|
|
20
|
+
dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
|
|
21
|
+
path = File.join(wd, "conf", "gui")
|
|
22
|
+
Dir.mkdir path unless File.exist? path
|
|
23
|
+
conf_dir = File.join(path, dir_name)
|
|
24
|
+
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
25
|
+
file = File.join(conf_dir, dir_name + "_settings.yml")
|
|
26
|
+
config = Watobo::Utils.load_settings(file)
|
|
27
|
+
config
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
40
31
|
end
|
data/lib/watobo/gui/page_tree.rb
CHANGED
|
@@ -1,227 +1,218 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
|
-
#require 'qcustomize.rb'
|
|
11
|
-
|
|
1
|
+
#require 'qcustomize.rb'
|
|
2
|
+
|
|
12
3
|
# @private
|
|
13
|
-
module Watobo#:nodoc: all
|
|
14
|
-
module Gui
|
|
15
|
-
class PageTree < FXTreeList
|
|
16
|
-
|
|
17
|
-
attr :page
|
|
18
|
-
|
|
19
|
-
include Watobo::Constants
|
|
20
|
-
include Watobo::Gui::Icons
|
|
21
|
-
def subscribe(event, &callback)
|
|
22
|
-
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def reload()
|
|
26
|
-
self.clearItems
|
|
27
|
-
|
|
28
|
-
# @interface.updateRequestTable(@project)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def page=(p)
|
|
32
|
-
@page = p
|
|
33
|
-
refresh_tree
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def refresh_tree()
|
|
37
|
-
self.clearItems
|
|
38
|
-
unless @page.nil?
|
|
39
|
-
if page.forms.length > 0
|
|
40
|
-
page.forms.each do |f|
|
|
41
|
-
add_form_item f
|
|
42
|
-
end
|
|
43
|
-
else
|
|
44
|
-
self.appendItem(nil, "Forms ()", nil, nil)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
# @interface.updateRequestTable(@project)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def expandFullTree(item)
|
|
51
|
-
self.expandTree(item)
|
|
52
|
-
item.each do |c|
|
|
53
|
-
expandFullTree(c) if !self.itemLeaf?(c)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def collapseFullTree(item)
|
|
58
|
-
self.collapseTree(item)
|
|
59
|
-
item.each do |c|
|
|
60
|
-
collapseFullTree(c) if !self.itemLeaf?(c)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def hidden?(chat)
|
|
65
|
-
|
|
66
|
-
#TODO: Filter
|
|
67
|
-
false
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def initialize(parent, page=nil, prefs={})
|
|
71
|
-
@page = page
|
|
72
|
-
@quick_filter = Hash.new
|
|
73
|
-
opts = LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT
|
|
74
|
-
opts = prefs[:opts] if prefs.has_key? :opts
|
|
75
|
-
super(parent, :opts => opts)
|
|
76
|
-
@event_dispatcher_listeners = Hash.new
|
|
77
|
-
@filters = {
|
|
78
|
-
:element => []
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
forms = self.appendItem(nil, "load a new page first!", nil, nil)
|
|
82
|
-
|
|
83
|
-
self.connect(SEL_COMMAND) do |sender, sel, item|
|
|
84
|
-
|
|
85
|
-
if item.data.is_a? Mechanize::Form
|
|
86
|
-
puts "Form Selected"
|
|
87
|
-
notify(:form_selected, item.data)
|
|
88
|
-
elsif item.data.is_a? Mechanize::Form::Field
|
|
89
|
-
puts "Field Selected"
|
|
90
|
-
notify(:form_selected, item.parent.data)
|
|
91
|
-
notify(:field_selected, item)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
|
|
97
|
-
exclude_site = nil
|
|
98
|
-
unless event.moved?
|
|
99
|
-
FXMenuPane.new(self) do |menu_pane|
|
|
100
|
-
|
|
101
|
-
#
|
|
102
|
-
item = sender.getItemAt(event.win_x, event.win_y)
|
|
103
|
-
|
|
104
|
-
unless item.nil?
|
|
105
|
-
|
|
106
|
-
unless self.itemLeaf?(item)
|
|
107
|
-
FXMenuSeparator.new(menu_pane)
|
|
108
|
-
FXMenuCommand.new(menu_pane, "expand tree" ).connect(SEL_COMMAND) {
|
|
109
|
-
expandFullTree(item)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
FXMenuCommand.new(menu_pane, "collapse tree" ).connect(SEL_COMMAND) {
|
|
113
|
-
self.collapseFullTree(item)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
data = self.getItemData(item)
|
|
119
|
-
|
|
120
|
-
if item == "Forms" then
|
|
121
|
-
puts "Right Click Forms"
|
|
122
|
-
FXMenuSeparator.new(menu_pane)
|
|
123
|
-
|
|
124
|
-
FXMenuCommand.new(menu_pane, "found Form Item" ).connect(SEL_COMMAND) {
|
|
125
|
-
|
|
126
|
-
notify(:add_site_to_scope, item.to_s)
|
|
127
|
-
}
|
|
128
|
-
else
|
|
129
|
-
puts "Didn't click Forms"
|
|
130
|
-
|
|
131
|
-
end
|
|
132
|
-
# submenu = FXMenuPane.new(self) do |domain_menu|
|
|
133
|
-
|
|
134
|
-
# @filtered_domains.each do |domain, filter|
|
|
135
|
-
# hide_domain = FXMenuCommand.new(domain_menu, "#{domain}" )
|
|
136
|
-
# hide_domain.connect(SEL_COMMAND) {
|
|
137
|
-
# @interface.default_settings[:domain_filters].delete(filter)
|
|
138
|
-
# @filtered_domains.clear
|
|
139
|
-
# @interface.updateTreeLists
|
|
140
|
-
# }
|
|
141
|
-
# end
|
|
142
|
-
# end
|
|
143
|
-
# FXMenuCascade.new(menu_pane, "Unhide Domains", nil, submenu)
|
|
144
|
-
|
|
145
|
-
end
|
|
146
|
-
menu_pane.create
|
|
147
|
-
menu_pane.popup(nil, event.root_x, event.root_y)
|
|
148
|
-
app.runModalWhileShown(menu_pane)
|
|
149
|
-
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
private
|
|
156
|
-
|
|
157
|
-
def get_node_class(name)
|
|
158
|
-
return nil if name.nil?
|
|
159
|
-
return nil if name.empty?
|
|
160
|
-
puts "get_node_class #{name}"
|
|
161
|
-
|
|
162
|
-
ccname = Watobo::Utils.camelcase(name)
|
|
163
|
-
nc = nil
|
|
164
|
-
unless Watobo::Gui::PageTree.const_defined? ccname
|
|
165
|
-
puts "Creating new class #{ccname}"
|
|
166
|
-
Watobo::Gui::PageTree.class_eval("class #{ccname};end")
|
|
167
|
-
nc = Watobo::Gui::PageTree.const_get(ccname)
|
|
168
|
-
else
|
|
169
|
-
puts "Get existing class #{ccname}"
|
|
170
|
-
nc = Watobo::Gui::PageTree.const_get(ccname)
|
|
171
|
-
end
|
|
172
|
-
puts nc.name
|
|
173
|
-
nc
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def add_form_item(form)
|
|
177
|
-
|
|
178
|
-
node_name = "Forms"
|
|
179
|
-
#nc = get_node_class node_name
|
|
180
|
-
# form_item = self.findItem(node_name, nil, SEARCH_FORWARD|SEARCH_IGNORECASE)
|
|
181
|
-
form_item = self.findItemByData(node_name.to_sym, nil, SEARCH_FORWARD)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
if form_item.nil?
|
|
185
|
-
# found new site
|
|
186
|
-
form_item = self.appendItem(nil, node_name, nil, nil)
|
|
187
|
-
#site = @findings_tree.moveItem(project.first,project,site)
|
|
188
|
-
self.setItemData(form_item, node_name.to_sym)
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
form_name_item = nil
|
|
192
|
-
name = "undefined"
|
|
193
|
-
unless form.name.nil?
|
|
194
|
-
name = form.name unless form.name.empty?
|
|
195
|
-
end
|
|
196
|
-
form_name_item = self.appendItem(form_item, name, nil, nil)
|
|
197
|
-
|
|
198
|
-
unless form_name_item.nil?
|
|
199
|
-
self.setItemData(form_name_item, form)
|
|
200
|
-
form.fields.each do |ff|
|
|
201
|
-
form_field_item = self.appendItem(form_name_item, ff.name, nil, nil)
|
|
202
|
-
self.setItemData(form_field_item, ff)
|
|
203
|
-
|
|
204
|
-
end
|
|
205
|
-
form.buttons.each do |fb|
|
|
206
|
-
form_field_item = self.appendItem(form_name_item, fb.name, nil, nil)
|
|
207
|
-
self.setItemData(form_field_item, fb)
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
unless form_item.nil?
|
|
212
|
-
form_item.text = "#{node_name} (#{form_item.numChildren})"
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def notify(event, *args)
|
|
218
|
-
if @event_dispatcher_listeners[event]
|
|
219
|
-
@event_dispatcher_listeners[event].each do |m|
|
|
220
|
-
m.call(*args) if m.respond_to? :call
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
# namespace end
|
|
226
|
-
end
|
|
227
|
-
end
|
|
4
|
+
module Watobo#:nodoc: all
|
|
5
|
+
module Gui
|
|
6
|
+
class PageTree < FXTreeList
|
|
7
|
+
|
|
8
|
+
attr :page
|
|
9
|
+
|
|
10
|
+
include Watobo::Constants
|
|
11
|
+
include Watobo::Gui::Icons
|
|
12
|
+
def subscribe(event, &callback)
|
|
13
|
+
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def reload()
|
|
17
|
+
self.clearItems
|
|
18
|
+
|
|
19
|
+
# @interface.updateRequestTable(@project)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def page=(p)
|
|
23
|
+
@page = p
|
|
24
|
+
refresh_tree
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def refresh_tree()
|
|
28
|
+
self.clearItems
|
|
29
|
+
unless @page.nil?
|
|
30
|
+
if page.forms.length > 0
|
|
31
|
+
page.forms.each do |f|
|
|
32
|
+
add_form_item f
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
self.appendItem(nil, "Forms ()", nil, nil)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
# @interface.updateRequestTable(@project)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def expandFullTree(item)
|
|
42
|
+
self.expandTree(item)
|
|
43
|
+
item.each do |c|
|
|
44
|
+
expandFullTree(c) if !self.itemLeaf?(c)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def collapseFullTree(item)
|
|
49
|
+
self.collapseTree(item)
|
|
50
|
+
item.each do |c|
|
|
51
|
+
collapseFullTree(c) if !self.itemLeaf?(c)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def hidden?(chat)
|
|
56
|
+
|
|
57
|
+
#TODO: Filter
|
|
58
|
+
false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def initialize(parent, page=nil, prefs={})
|
|
62
|
+
@page = page
|
|
63
|
+
@quick_filter = Hash.new
|
|
64
|
+
opts = LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT
|
|
65
|
+
opts = prefs[:opts] if prefs.has_key? :opts
|
|
66
|
+
super(parent, :opts => opts)
|
|
67
|
+
@event_dispatcher_listeners = Hash.new
|
|
68
|
+
@filters = {
|
|
69
|
+
:element => []
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
forms = self.appendItem(nil, "load a new page first!", nil, nil)
|
|
73
|
+
|
|
74
|
+
self.connect(SEL_COMMAND) do |sender, sel, item|
|
|
75
|
+
|
|
76
|
+
if item.data.is_a? Mechanize::Form
|
|
77
|
+
puts "Form Selected"
|
|
78
|
+
notify(:form_selected, item.data)
|
|
79
|
+
elsif item.data.is_a? Mechanize::Form::Field
|
|
80
|
+
puts "Field Selected"
|
|
81
|
+
notify(:form_selected, item.parent.data)
|
|
82
|
+
notify(:field_selected, item)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
|
|
88
|
+
exclude_site = nil
|
|
89
|
+
unless event.moved?
|
|
90
|
+
FXMenuPane.new(self) do |menu_pane|
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
item = sender.getItemAt(event.win_x, event.win_y)
|
|
94
|
+
|
|
95
|
+
unless item.nil?
|
|
96
|
+
|
|
97
|
+
unless self.itemLeaf?(item)
|
|
98
|
+
FXMenuSeparator.new(menu_pane)
|
|
99
|
+
FXMenuCommand.new(menu_pane, "expand tree" ).connect(SEL_COMMAND) {
|
|
100
|
+
expandFullTree(item)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
FXMenuCommand.new(menu_pane, "collapse tree" ).connect(SEL_COMMAND) {
|
|
104
|
+
self.collapseFullTree(item)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
data = self.getItemData(item)
|
|
110
|
+
|
|
111
|
+
if item == "Forms" then
|
|
112
|
+
puts "Right Click Forms"
|
|
113
|
+
FXMenuSeparator.new(menu_pane)
|
|
114
|
+
|
|
115
|
+
FXMenuCommand.new(menu_pane, "found Form Item" ).connect(SEL_COMMAND) {
|
|
116
|
+
|
|
117
|
+
notify(:add_site_to_scope, item.to_s)
|
|
118
|
+
}
|
|
119
|
+
else
|
|
120
|
+
puts "Didn't click Forms"
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
# submenu = FXMenuPane.new(self) do |domain_menu|
|
|
124
|
+
|
|
125
|
+
# @filtered_domains.each do |domain, filter|
|
|
126
|
+
# hide_domain = FXMenuCommand.new(domain_menu, "#{domain}" )
|
|
127
|
+
# hide_domain.connect(SEL_COMMAND) {
|
|
128
|
+
# @interface.default_settings[:domain_filters].delete(filter)
|
|
129
|
+
# @filtered_domains.clear
|
|
130
|
+
# @interface.updateTreeLists
|
|
131
|
+
# }
|
|
132
|
+
# end
|
|
133
|
+
# end
|
|
134
|
+
# FXMenuCascade.new(menu_pane, "Unhide Domains", nil, submenu)
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
menu_pane.create
|
|
138
|
+
menu_pane.popup(nil, event.root_x, event.root_y)
|
|
139
|
+
app.runModalWhileShown(menu_pane)
|
|
140
|
+
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
def get_node_class(name)
|
|
149
|
+
return nil if name.nil?
|
|
150
|
+
return nil if name.empty?
|
|
151
|
+
puts "get_node_class #{name}"
|
|
152
|
+
|
|
153
|
+
ccname = Watobo::Utils.camelcase(name)
|
|
154
|
+
nc = nil
|
|
155
|
+
unless Watobo::Gui::PageTree.const_defined? ccname
|
|
156
|
+
puts "Creating new class #{ccname}"
|
|
157
|
+
Watobo::Gui::PageTree.class_eval("class #{ccname};end")
|
|
158
|
+
nc = Watobo::Gui::PageTree.const_get(ccname)
|
|
159
|
+
else
|
|
160
|
+
puts "Get existing class #{ccname}"
|
|
161
|
+
nc = Watobo::Gui::PageTree.const_get(ccname)
|
|
162
|
+
end
|
|
163
|
+
puts nc.name
|
|
164
|
+
nc
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def add_form_item(form)
|
|
168
|
+
|
|
169
|
+
node_name = "Forms"
|
|
170
|
+
#nc = get_node_class node_name
|
|
171
|
+
# form_item = self.findItem(node_name, nil, SEARCH_FORWARD|SEARCH_IGNORECASE)
|
|
172
|
+
form_item = self.findItemByData(node_name.to_sym, nil, SEARCH_FORWARD)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
if form_item.nil?
|
|
176
|
+
# found new site
|
|
177
|
+
form_item = self.appendItem(nil, node_name, nil, nil)
|
|
178
|
+
#site = @findings_tree.moveItem(project.first,project,site)
|
|
179
|
+
self.setItemData(form_item, node_name.to_sym)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
form_name_item = nil
|
|
183
|
+
name = "undefined"
|
|
184
|
+
unless form.name.nil?
|
|
185
|
+
name = form.name unless form.name.empty?
|
|
186
|
+
end
|
|
187
|
+
form_name_item = self.appendItem(form_item, name, nil, nil)
|
|
188
|
+
|
|
189
|
+
unless form_name_item.nil?
|
|
190
|
+
self.setItemData(form_name_item, form)
|
|
191
|
+
form.fields.each do |ff|
|
|
192
|
+
form_field_item = self.appendItem(form_name_item, ff.name, nil, nil)
|
|
193
|
+
self.setItemData(form_field_item, ff)
|
|
194
|
+
|
|
195
|
+
end
|
|
196
|
+
form.buttons.each do |fb|
|
|
197
|
+
form_field_item = self.appendItem(form_name_item, fb.name, nil, nil)
|
|
198
|
+
self.setItemData(form_field_item, fb)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
unless form_item.nil?
|
|
203
|
+
form_item.text = "#{node_name} (#{form_item.numChildren})"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def notify(event, *args)
|
|
209
|
+
if @event_dispatcher_listeners[event]
|
|
210
|
+
@event_dispatcher_listeners[event].each do |m|
|
|
211
|
+
m.call(*args) if m.respond_to? :call
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
# namespace end
|
|
217
|
+
end
|
|
218
|
+
end
|