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,125 +1,118 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# crawler_gui.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 Plugin
|
|
13
|
-
module Crawler
|
|
14
|
-
def self.start_url
|
|
15
|
-
@start_url ||= nil
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.start_url=(url)
|
|
19
|
-
# puts "Set Start-URL to #{url}"
|
|
20
|
-
# puts url.class
|
|
21
|
-
begin
|
|
22
|
-
@start_url ||= nil
|
|
23
|
-
@start_url = url
|
|
24
|
-
|
|
25
|
-
@start_url = URI.parse(url) unless url.respond_to? :host
|
|
26
|
-
|
|
27
|
-
rescue => bang
|
|
28
|
-
puts bang
|
|
29
|
-
@start_url = nil
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
@start_url
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class Gui < Watobo::Plugin2
|
|
36
|
-
class PasswordMatchError < StandardError;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
@
|
|
67
|
-
@
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
2
|
+
module Watobo #:nodoc: all
|
|
3
|
+
module Plugin
|
|
4
|
+
module Crawler
|
|
5
|
+
def self.start_url
|
|
6
|
+
@start_url ||= nil
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.start_url=(url)
|
|
10
|
+
# puts "Set Start-URL to #{url}"
|
|
11
|
+
# puts url.class
|
|
12
|
+
begin
|
|
13
|
+
@start_url ||= nil
|
|
14
|
+
@start_url = url
|
|
15
|
+
|
|
16
|
+
@start_url = URI.parse(url) unless url.respond_to? :host
|
|
17
|
+
|
|
18
|
+
rescue => bang
|
|
19
|
+
puts bang
|
|
20
|
+
@start_url = nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@start_url
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Gui < Watobo::Plugin2
|
|
27
|
+
class PasswordMatchError < StandardError;
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class UsernameError < StandardError;
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
icon_file "crawler.ico"
|
|
34
|
+
|
|
35
|
+
include Watobo::Constants
|
|
36
|
+
include Watobo::Plugin::Crawler::Constants
|
|
37
|
+
|
|
38
|
+
def updateView
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def start_url
|
|
43
|
+
url = url_valid? ? URI.parse(@url_txt.text) : nil
|
|
44
|
+
return url
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def settings
|
|
48
|
+
@settings_tabbook
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def set_tab_index(index)
|
|
52
|
+
@settings_tabbook.setCurrent index
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def initialize(owner, project=nil, chat=nil)
|
|
56
|
+
super(owner, "Crawler", project, :opts => DECOR_ALL, :width => 800, :height => 600)
|
|
57
|
+
@plugin_name = "Crawler"
|
|
58
|
+
@project = project
|
|
59
|
+
@status_lock = Mutex.new
|
|
60
|
+
@crawl_status = {
|
|
61
|
+
:engine_status => CRAWL_NONE,
|
|
62
|
+
:page_size => 0,
|
|
63
|
+
:link_size => 0,
|
|
64
|
+
:skipped_domains => 0
|
|
72
65
|
}
|
|
73
|
-
@cookie_jar = nil
|
|
74
|
-
|
|
75
|
-
main = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
76
|
-
FXLabel.new(main, "Start URL, e.g. http://my.target.to/scan/:")
|
|
77
|
-
frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
|
|
78
|
-
# FXLabel.new(frame, "http://")
|
|
66
|
+
@cookie_jar = nil
|
|
67
|
+
|
|
68
|
+
main = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
69
|
+
FXLabel.new(main, "Start URL, e.g. http://my.target.to/scan/:")
|
|
70
|
+
frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
|
|
71
|
+
# FXLabel.new(frame, "http://")
|
|
79
72
|
@url_txt = FXTextField.new(frame, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
|
|
80
73
|
|
|
81
|
-
@start_button = FXButton.new(frame, "start", :opts => BUTTON_DEFAULT|BUTTON_NORMAL
|
|
82
|
-
@start_button.disable
|
|
83
|
-
|
|
84
|
-
@url_txt.connect(SEL_COMMAND){ |sender, sel, item|
|
|
85
|
-
if url_valid?
|
|
86
|
-
# @start_button.setFocus()
|
|
87
|
-
Watobo::Plugin::Crawler.start_url = start_url
|
|
88
|
-
end
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
@url_txt.connect(SEL_CHANGED){
|
|
92
|
-
update_url_state
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
@start_button.connect(SEL_COMMAND){ |sender, sel, item|
|
|
96
|
-
case sender.text
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
end
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@crawler = Watobo::Crawler::Engine.new
|
|
105
|
-
|
|
106
|
-
@settings_tabbook = SettingsTabBook.new(main)
|
|
107
|
-
@settings_tabbook.general.set @crawler.settings
|
|
108
|
-
@settings_tabbook.auth.crawler = @crawler
|
|
74
|
+
@start_button = FXButton.new(frame, "start", :opts => BUTTON_DEFAULT|BUTTON_NORMAL)
|
|
75
|
+
@start_button.disable
|
|
76
|
+
|
|
77
|
+
@url_txt.connect(SEL_COMMAND) { |sender, sel, item|
|
|
78
|
+
if url_valid?
|
|
79
|
+
# @start_button.setFocus()
|
|
80
|
+
Watobo::Plugin::Crawler.start_url = start_url
|
|
81
|
+
end
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@url_txt.connect(SEL_CHANGED) {
|
|
85
|
+
update_url_state
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@start_button.connect(SEL_COMMAND) { |sender, sel, item|
|
|
89
|
+
case sender.text
|
|
90
|
+
when /start/i
|
|
91
|
+
start
|
|
92
|
+
when /cancel/i
|
|
93
|
+
cancel
|
|
94
|
+
end
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@crawler = Watobo::Crawler::Engine.new
|
|
98
|
+
|
|
99
|
+
@settings_tabbook = SettingsTabBook.new(main)
|
|
100
|
+
@settings_tabbook.general.set @crawler.settings
|
|
101
|
+
@settings_tabbook.auth.crawler = @crawler
|
|
109
102
|
@settings_tabbook.scope.set @crawler.settings
|
|
110
103
|
|
|
111
104
|
unless chat.nil?
|
|
112
105
|
begin
|
|
113
106
|
url = chat.request.url
|
|
114
107
|
@url_txt.text = "#{url}"
|
|
115
|
-
chat.request.headers("Authorization"){ |h|
|
|
108
|
+
chat.request.headers("Authorization") { |h|
|
|
116
109
|
if h =~ /Basic (.*)/i
|
|
117
110
|
user, pw = Base64.decode64($1).strip.split(":")
|
|
118
|
-
auth = {
|
|
119
|
-
|
|
120
|
-
|
|
111
|
+
auth = {:username => user,
|
|
112
|
+
:password => pw,
|
|
113
|
+
:auth_type => :basic
|
|
121
114
|
}
|
|
122
|
-
|
|
115
|
+
@settings_tabbook.auth.set(auth)
|
|
123
116
|
end
|
|
124
117
|
}
|
|
125
118
|
unless chat.request.cookies.empty?
|
|
@@ -128,11 +121,11 @@ module Watobo#:nodoc: all
|
|
|
128
121
|
|
|
129
122
|
chat.request.cookies.each do |c|
|
|
130
123
|
name, value = c.split("=")
|
|
131
|
-
cprefs = {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
124
|
+
cprefs = {:domain => domain,
|
|
125
|
+
:name => name,
|
|
126
|
+
:value => value,
|
|
127
|
+
:path => '/',
|
|
128
|
+
:expires => (Date.today+1).to_s
|
|
136
129
|
}
|
|
137
130
|
cookie = Mechanize::Cookie.new cprefs
|
|
138
131
|
@cookie_jar << cookie
|
|
@@ -142,181 +135,183 @@ module Watobo#:nodoc: all
|
|
|
142
135
|
puts bang
|
|
143
136
|
puts bang.backtrace
|
|
144
137
|
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
@log_viewer = @settings_tabbook.log_viewer
|
|
148
|
-
|
|
149
|
-
@status_frame = StatusFrame.new(main)
|
|
150
|
-
|
|
151
|
-
#@crawler.subscribe( :update_status ){ |status|
|
|
152
|
-
# @status_lock.synchronize do
|
|
153
|
-
# @crawl_status.update status
|
|
154
|
-
# end
|
|
155
|
-
#}
|
|
156
|
-
|
|
157
|
-
stbk = @settings_tabbook
|
|
158
|
-
[ @crawler, stbk.auth].each do |i|
|
|
159
|
-
i.subscribe( :log ){ |msg|
|
|
160
|
-
@log_viewer.log(LOG_INFO, msg)
|
|
161
|
-
}
|
|
162
138
|
end
|
|
163
139
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
140
|
+
@log_viewer = @settings_tabbook.log_viewer
|
|
141
|
+
|
|
142
|
+
@status_frame = StatusFrame.new(main)
|
|
143
|
+
|
|
144
|
+
#@crawler.subscribe( :update_status ){ |status|
|
|
145
|
+
# @status_lock.synchronize do
|
|
146
|
+
# @crawl_status.update status
|
|
147
|
+
# end
|
|
148
|
+
#}
|
|
149
|
+
|
|
150
|
+
stbk = @settings_tabbook
|
|
151
|
+
[@crawler, stbk.auth].each do |i|
|
|
152
|
+
i.subscribe(:log) { |msg|
|
|
153
|
+
@log_viewer.log(LOG_INFO, msg)
|
|
154
|
+
}
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
update_url_state
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
|
|
168
161
|
private
|
|
169
162
|
|
|
170
163
|
def update_url_state
|
|
171
164
|
if url_valid?
|
|
172
165
|
|
|
173
|
-
|
|
166
|
+
@start_button.enable
|
|
174
167
|
else
|
|
175
|
-
|
|
176
|
-
|
|
168
|
+
@start_button.disable
|
|
169
|
+
# Watobo::Plugin::Crawler.start_url = nil
|
|
177
170
|
end
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def remove_update_timer
|
|
181
|
-
app = FXApp.instance
|
|
182
|
-
if app.hasTimeout? @update_timer
|
|
183
|
-
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
# def add_update_timer(ms=50)
|
|
188
|
-
# @update_timer = FXApp.instance.addTimeout( ms, :repeat => true) {
|
|
189
|
-
# update_status
|
|
190
|
-
# }
|
|
191
|
-
# end
|
|
192
|
-
def on_update_timer
|
|
193
|
-
update_status
|
|
194
|
-
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def remove_update_timer
|
|
174
|
+
app = FXApp.instance
|
|
175
|
+
if app.hasTimeout? @update_timer
|
|
176
|
+
app.removeTimeout @update_timer
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# def add_update_timer(ms=50)
|
|
181
|
+
# @update_timer = FXApp.instance.addTimeout( ms, :repeat => true) {
|
|
182
|
+
# update_status
|
|
183
|
+
# }
|
|
184
|
+
# end
|
|
185
|
+
def on_update_timer
|
|
186
|
+
update_status
|
|
187
|
+
end
|
|
195
188
|
|
|
196
189
|
def update_status
|
|
197
190
|
@status_frame.update_status Watobo::Crawler::Status.get
|
|
198
|
-
es = Watobo::Crawler::Status.engine
|
|
199
|
-
unless es.nil?
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
ss
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
prefs
|
|
292
|
-
prefs.update
|
|
191
|
+
es = Watobo::Crawler::Status.engine
|
|
192
|
+
unless es.nil?
|
|
193
|
+
# Watobo::Gui.application.runOnUiThread do
|
|
194
|
+
case es
|
|
195
|
+
when CRAWL_NONE
|
|
196
|
+
@start_button.text = "start"
|
|
197
|
+
when CRAWL_RUNNING
|
|
198
|
+
@start_button.text = "cancel"
|
|
199
|
+
|
|
200
|
+
when CRAWL_PAUSED
|
|
201
|
+
@start_button.text = "start"
|
|
202
|
+
end
|
|
203
|
+
#end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def cancel
|
|
208
|
+
remove_update_timer()
|
|
209
|
+
@crawler.cancel
|
|
210
|
+
@start_button.text = "start"
|
|
211
|
+
update_status
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def auth_settings()
|
|
215
|
+
puts "= Authentication Settings ="
|
|
216
|
+
auth = @settings_tabbook.auth.to_h
|
|
217
|
+
# puts auth.to_yaml
|
|
218
|
+
case auth[:auth_type]
|
|
219
|
+
when :basic
|
|
220
|
+
auth[:auth_uri] = start_url
|
|
221
|
+
unless auth[:password] == auth[:retype]
|
|
222
|
+
raise PasswordMatchError, "Passwords Don't Match!"
|
|
223
|
+
end
|
|
224
|
+
if auth[:username].empty?
|
|
225
|
+
raise UsernameError, "Username is empty!"
|
|
226
|
+
end
|
|
227
|
+
when :form
|
|
228
|
+
if auth.has_key? :form
|
|
229
|
+
begin
|
|
230
|
+
if auth[:form].buttons.length > 0
|
|
231
|
+
auth[:form].click_button
|
|
232
|
+
#@crawler.send_form(form).
|
|
233
|
+
elsif auth[:form].respond_to? :submit
|
|
234
|
+
puts "Submitting Form"
|
|
235
|
+
p = auth[:form].submit()
|
|
236
|
+
#puts p.class
|
|
237
|
+
end
|
|
238
|
+
rescue => bang
|
|
239
|
+
puts bang
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
puts "---"
|
|
244
|
+
auth
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def scope_settings()
|
|
248
|
+
# puts "= Scope Settings ="
|
|
249
|
+
scope = @settings_tabbook.scope
|
|
250
|
+
ss = scope.to_h
|
|
251
|
+
ss[:root_path] = start_url.path_mp if scope.path_restricted?
|
|
252
|
+
ss
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def general_settings()
|
|
256
|
+
# puts "= General Settings ="
|
|
257
|
+
|
|
258
|
+
gs = @settings_tabbook.general.to_h
|
|
259
|
+
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def hook_settings
|
|
263
|
+
hs = @settings_tabbook.hooks.to_h
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def url_valid?
|
|
267
|
+
begin
|
|
268
|
+
return false unless @url_txt.text.strip =~ /^https?:\/\//
|
|
269
|
+
url = URI.parse(@url_txt.text.strip)
|
|
270
|
+
# puts url.host.class
|
|
271
|
+
return true unless url.host.nil?
|
|
272
|
+
return false
|
|
273
|
+
rescue => bang
|
|
274
|
+
puts bang if $DEBUG
|
|
275
|
+
return false
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def start
|
|
280
|
+
return false unless url_valid?
|
|
281
|
+
|
|
282
|
+
begin
|
|
283
|
+
|
|
284
|
+
prefs ={}
|
|
285
|
+
prefs.update auth_settings
|
|
286
|
+
prefs.update scope_settings
|
|
287
|
+
prefs.update general_settings
|
|
293
288
|
prefs.update hook_settings
|
|
294
289
|
|
|
295
290
|
unless @cookie_jar.nil?
|
|
296
291
|
prefs[:cookie_jar] = @cookie_jar
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
add_update_timer(1000)
|
|
300
|
-
|
|
301
|
-
Thread.new(@url_txt.text,prefs){|turl,tprefs|
|
|
302
|
-
@crawler.run(turl, tprefs)
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
@start_button.text = 'Cancel'
|
|
306
|
-
|
|
307
|
-
rescue PasswordMatchError
|
|
308
|
-
|
|
309
|
-
FXMessageBox.information(self,MBOX_OK,"Password Error", "The provided passwords don't match!")
|
|
310
|
-
rescue UsernameError
|
|
311
|
-
|
|
312
|
-
FXMessageBox.information(self,MBOX_OK,"Username Error", "Need a valid username.")
|
|
313
|
-
rescue => bang
|
|
314
|
-
puts bang
|
|
315
|
-
end
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
end
|
|
319
|
-
|
|
320
|
-
end
|
|
321
|
-
end
|
|
322
|
-
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
add_update_timer(1000)
|
|
295
|
+
|
|
296
|
+
Thread.new(@url_txt.text, prefs) { |turl, tprefs|
|
|
297
|
+
@crawler.run(turl, tprefs)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
@start_button.text = 'Cancel'
|
|
301
|
+
|
|
302
|
+
rescue PasswordMatchError
|
|
303
|
+
#puts "Passwords Don't Match!"
|
|
304
|
+
FXMessageBox.information(self, MBOX_OK, "Password Error", "The provided passwords don't match!")
|
|
305
|
+
rescue UsernameError
|
|
306
|
+
#puts "Passwords Don't Match!"
|
|
307
|
+
FXMessageBox.information(self, MBOX_OK, "Username Error", "Need a valid username.")
|
|
308
|
+
rescue => bang
|
|
309
|
+
puts bang
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|