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
data/plugins/crawler/crawler.rb
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
%w( constants bags grabber engine uri_mp status ).each do |l|
|
|
11
|
-
require_relative File.join("lib", l)
|
|
12
|
-
end
|
|
13
|
-
|
|
1
|
+
%w( constants bags grabber engine uri_mp status ).each do |l|
|
|
2
|
+
require_relative File.join("lib", l)
|
|
3
|
+
end
|
|
4
|
+
|
data/plugins/crawler/gui.rb
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
# 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
|
|
1
|
+
require_relative 'crawler.rb'
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
require_relative File.join("gui", l)
|
|
15
|
-
end
|
|
3
|
+
%w( crawler_gui settings_tabbook general_settings_frame status_frame hooks_frame auth_frame scope_frame ).each do |l|
|
|
4
|
+
#puts "Loading >> #{l}"
|
|
5
|
+
require_relative File.join("gui", l)
|
|
6
|
+
end
|
|
@@ -1,105 +1,96 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# auth_frame.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
|
-
class Gui
|
|
15
|
-
class FormFieldsTable < FXTable
|
|
16
|
-
def subscribe(event, &callback)
|
|
17
|
-
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def clearEvents(event)
|
|
21
|
-
@event_dispatcher_listener[event].clear
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def update_fields
|
|
25
|
-
self.getNumRows.times do |i|
|
|
26
|
-
self.getItemData(i,0).value = self.getItemText(i,2)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def clear_fields
|
|
31
|
-
initTable
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def initialize(owner, opts={})
|
|
35
|
-
super(owner, opts)
|
|
36
|
-
|
|
37
|
-
@event_dispatcher_listeners = Hash.new
|
|
38
|
-
initTable()
|
|
39
|
-
|
|
40
|
-
self.connect(SEL_COMMAND, method(:onTableClick))
|
|
41
|
-
|
|
42
|
-
self.columnHeader.connect(SEL_COMMAND) do |sender, sel, index|
|
|
43
|
-
# self.fitColumnsToContents(index)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def add_field(field)
|
|
48
|
-
lastRowIndex = self.getNumRows
|
|
49
|
-
self.appendRows(1)
|
|
50
|
-
self.setItemData(lastRowIndex, 0, field)
|
|
51
|
-
self.setItemText(lastRowIndex, 0, field.name)
|
|
52
|
-
self.getItem(lastRowIndex, 0).justify = FXTableItem::LEFT
|
|
53
|
-
self.setItemText(lastRowIndex, 1, field.type)
|
|
54
|
-
puts field.methods.sort
|
|
55
|
-
self.getItem(lastRowIndex, 1).justify = FXTableItem::LEFT
|
|
56
|
-
self.setItemText(lastRowIndex, 2, field.value)
|
|
57
|
-
self.getItem(lastRowIndex, 2).justify = FXTableItem::LEFT
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
private
|
|
61
|
-
|
|
62
|
-
def onTableClick(sender, sel, item)
|
|
63
|
-
begin
|
|
64
|
-
row = item.row
|
|
65
|
-
self.selectRow(row, false)
|
|
66
|
-
self.startInput(row,2)
|
|
67
|
-
rescue => bang
|
|
68
|
-
puts bang
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def notify(event, *args)
|
|
73
|
-
if @event_dispatcher_listeners[event]
|
|
74
|
-
@event_dispatcher_listeners[event].each do |m|
|
|
75
|
-
m.call(*args) if m.respond_to? :call
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def initTable
|
|
81
|
-
self.clearItems()
|
|
82
|
-
self.setTableSize(0, 3)
|
|
83
|
-
|
|
84
|
-
self.setColumnText( 0, "Name" )
|
|
85
|
-
self.setColumnText( 1, "Type" )
|
|
86
|
-
self.setColumnText( 2, "Value" )
|
|
87
|
-
|
|
88
|
-
self.rowHeader.width = 0
|
|
89
|
-
self.setColumnWidth(0, 100)
|
|
90
|
-
self.setColumnWidth(1, 100)
|
|
91
|
-
self.setColumnWidth(2, 100)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
class AuthFrame < FXVerticalFrame
|
|
96
|
-
attr_accessor :crawler
|
|
97
|
-
def subscribe(event, &callback)
|
|
98
|
-
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def clearEvents(event)
|
|
102
|
-
@event_dispatcher_listener[event].clear
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Plugin
|
|
4
|
+
module Crawler
|
|
5
|
+
class Gui
|
|
6
|
+
class FormFieldsTable < FXTable
|
|
7
|
+
def subscribe(event, &callback)
|
|
8
|
+
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def clearEvents(event)
|
|
12
|
+
@event_dispatcher_listener[event].clear
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def update_fields
|
|
16
|
+
self.getNumRows.times do |i|
|
|
17
|
+
self.getItemData(i,0).value = self.getItemText(i,2)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def clear_fields
|
|
22
|
+
initTable
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize(owner, opts={})
|
|
26
|
+
super(owner, opts)
|
|
27
|
+
|
|
28
|
+
@event_dispatcher_listeners = Hash.new
|
|
29
|
+
initTable()
|
|
30
|
+
|
|
31
|
+
self.connect(SEL_COMMAND, method(:onTableClick))
|
|
32
|
+
|
|
33
|
+
self.columnHeader.connect(SEL_COMMAND) do |sender, sel, index|
|
|
34
|
+
# self.fitColumnsToContents(index)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def add_field(field)
|
|
39
|
+
lastRowIndex = self.getNumRows
|
|
40
|
+
self.appendRows(1)
|
|
41
|
+
self.setItemData(lastRowIndex, 0, field)
|
|
42
|
+
self.setItemText(lastRowIndex, 0, field.name)
|
|
43
|
+
self.getItem(lastRowIndex, 0).justify = FXTableItem::LEFT
|
|
44
|
+
self.setItemText(lastRowIndex, 1, field.type)
|
|
45
|
+
puts field.methods.sort
|
|
46
|
+
self.getItem(lastRowIndex, 1).justify = FXTableItem::LEFT
|
|
47
|
+
self.setItemText(lastRowIndex, 2, field.value)
|
|
48
|
+
self.getItem(lastRowIndex, 2).justify = FXTableItem::LEFT
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def onTableClick(sender, sel, item)
|
|
54
|
+
begin
|
|
55
|
+
row = item.row
|
|
56
|
+
self.selectRow(row, false)
|
|
57
|
+
self.startInput(row,2)
|
|
58
|
+
rescue => bang
|
|
59
|
+
puts bang
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def notify(event, *args)
|
|
64
|
+
if @event_dispatcher_listeners[event]
|
|
65
|
+
@event_dispatcher_listeners[event].each do |m|
|
|
66
|
+
m.call(*args) if m.respond_to? :call
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def initTable
|
|
72
|
+
self.clearItems()
|
|
73
|
+
self.setTableSize(0, 3)
|
|
74
|
+
|
|
75
|
+
self.setColumnText( 0, "Name" )
|
|
76
|
+
self.setColumnText( 1, "Type" )
|
|
77
|
+
self.setColumnText( 2, "Value" )
|
|
78
|
+
|
|
79
|
+
self.rowHeader.width = 0
|
|
80
|
+
self.setColumnWidth(0, 100)
|
|
81
|
+
self.setColumnWidth(1, 100)
|
|
82
|
+
self.setColumnWidth(2, 100)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
class AuthFrame < FXVerticalFrame
|
|
87
|
+
attr_accessor :crawler
|
|
88
|
+
def subscribe(event, &callback)
|
|
89
|
+
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def clearEvents(event)
|
|
93
|
+
@event_dispatcher_listener[event].clear
|
|
103
94
|
end
|
|
104
95
|
|
|
105
96
|
def set(settings)
|
|
@@ -115,182 +106,182 @@ module Watobo#:nodoc: all
|
|
|
115
106
|
@switcher.current = @auth_type_dt.value
|
|
116
107
|
update_form
|
|
117
108
|
return true
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def to_h
|
|
121
|
-
a = case @auth_type_dt.value
|
|
122
|
-
when 0
|
|
123
|
-
{
|
|
124
|
-
:auth_type => :none
|
|
125
|
-
}
|
|
126
|
-
when 1
|
|
127
|
-
{
|
|
128
|
-
:auth_type => :basic,
|
|
129
|
-
:username => @basic_auth_user_txt.text,
|
|
130
|
-
:password => @basic_auth_passwd_txt.text,
|
|
131
|
-
:retype => @basic_auth_retype_txt.text
|
|
132
|
-
# :uri => URI.parse
|
|
133
|
-
}
|
|
134
|
-
when 2
|
|
135
|
-
@form_fields_table.update_fields
|
|
136
|
-
|
|
137
|
-
{
|
|
138
|
-
:auth_type => :form,
|
|
139
|
-
:form => @auth_form,
|
|
140
|
-
:cookie_jar => @agent.respond_to?(:cookie_jar) ? @agent.cookie_jar : nil
|
|
141
|
-
}
|
|
142
|
-
end
|
|
143
|
-
a
|
|
144
|
-
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# def set(settings)
|
|
148
|
-
# @form_auth_url_txt.text = settings[:form_auth_url].to_s if settings.has_key? :form_auth_url
|
|
149
|
-
# update_form
|
|
150
|
-
# end
|
|
151
|
-
|
|
152
|
-
def update_form
|
|
153
|
-
[ @form_auth_url_txt, @no_auth_rb, @basic_auth_rb, @form_auth_rb ].each do |e|
|
|
154
|
-
e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def initialize(owner, opts={})
|
|
159
|
-
super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK|FRAME_RAISED, :padding => 0)
|
|
160
|
-
frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
161
|
-
#left_frm = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_Y|FRAME_NONE)
|
|
162
|
-
@event_dispatcher_listeners = Hash.new
|
|
163
|
-
@crawler = opts[:crawler] if opts.has_key? :crawler
|
|
164
|
-
@start_url = ""
|
|
165
|
-
|
|
166
|
-
auth_gb= FXGroupBox.new(frame, "Authentication", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
|
|
167
|
-
auth_frm = FXVerticalFrame.new(auth_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
168
|
-
@auth_form = nil
|
|
169
|
-
@auth_type_dt = FXDataTarget.new(0)
|
|
170
|
-
|
|
171
|
-
@no_auth_rb = FXRadioButton.new(auth_frm, "None", @auth_type_dt, FXDataTarget::ID_OPTION)
|
|
172
|
-
|
|
173
|
-
@basic_auth_rb = FXRadioButton.new(auth_frm, "Basic", @auth_type_dt, FXDataTarget::ID_OPTION + 1)
|
|
174
|
-
|
|
175
|
-
@form_auth_rb = FXRadioButton.new(auth_frm, "Form", @auth_type_dt, FXDataTarget::ID_OPTION + 2)
|
|
176
|
-
|
|
177
|
-
# group_box = FXGroupBox.new(self, "Collection",LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
|
|
178
|
-
# frame = FXVerticalFrame.new(group_box, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_GROOVE)
|
|
179
|
-
# @collectionList = FXList.new(frame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
180
|
-
|
|
181
|
-
@switcher = FXSwitcher.new(auth_frm,LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
182
|
-
frame = FXHorizontalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
183
|
-
FXLabel.new(frame, "No Authentication Selected", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
184
|
-
frame = FXHorizontalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
185
|
-
FXLabel.new(frame, "Username:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
186
|
-
@basic_auth_user_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
|
|
187
|
-
FXLabel.new(frame, "Password:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
188
|
-
@basic_auth_passwd_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
189
|
-
FXLabel.new(frame, "Retype:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
190
|
-
@basic_auth_retype_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
191
|
-
|
|
192
|
-
form_auth_frame = FXVerticalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
193
|
-
frame = FXHorizontalFrame.new(form_auth_frame, :opts => LAYOUT_FILL_X|FRAME_NONE)
|
|
194
|
-
FXLabel.new(frame, "URL of LoginForm, leave empty to use Start URL:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
195
|
-
@form_auth_url_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_X)
|
|
196
|
-
@fetch_button = FXButton.new(frame, "load page", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
|
|
197
|
-
|
|
198
|
-
form_frame = FXHorizontalFrame.new(form_auth_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
199
|
-
frame = FXHorizontalFrame.new(form_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
200
|
-
@page_tree = Watobo::Gui::PageTree.new(frame)
|
|
201
|
-
frame = FXHorizontalFrame.new(form_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK)
|
|
202
|
-
@form_fields_table = FormFieldsTable.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
203
|
-
|
|
204
|
-
@auth_type_dt.connect(SEL_COMMAND) {
|
|
205
|
-
@basic_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
206
|
-
@form_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
207
|
-
@no_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
208
|
-
@switcher.current = @auth_type_dt.value
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
@basic_auth_passwd_txt.connect(SEL_CHANGED){ password_check }
|
|
212
|
-
@basic_auth_retype_txt.connect(SEL_CHANGED){ password_check }
|
|
213
|
-
|
|
214
|
-
@fetch_button.connect(SEL_COMMAND){
|
|
215
|
-
begin
|
|
216
|
-
@form_fields_table.clear_fields
|
|
217
|
-
@page_tree.clearItems
|
|
218
|
-
|
|
219
|
-
page = nil
|
|
220
|
-
url = nil
|
|
221
|
-
|
|
222
|
-
if @form_auth_url_txt.text.empty?
|
|
223
|
-
unless Watobo::Plugin::Crawler.start_url.nil?
|
|
224
|
-
uri = Watobo::Plugin::Crawler.start_url
|
|
225
|
-
end
|
|
226
|
-
else
|
|
227
|
-
url = @form_auth_url_txt.text unless @form_auth_url_txt.text.empty?
|
|
228
|
-
uri = URI.parse(url)
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
notify(:log, "GET PAGE << #{uri.to_s}")
|
|
232
|
-
@agent, page = @crawler.get_page(uri)
|
|
233
|
-
notify(:log, "PAGE LOADED")
|
|
234
|
-
@page_tree.page = page
|
|
235
|
-
rescue => bang
|
|
236
|
-
notify(:log, "could not get page #{uri.to_s}")
|
|
237
|
-
puts "Could not get page for #{uri.to_s}"
|
|
238
|
-
puts bang
|
|
239
|
-
puts bang.backtrace if $DEBUG
|
|
240
|
-
end
|
|
241
|
-
true
|
|
242
|
-
}
|
|
243
|
-
@switcher.current = @auth_type_dt.value
|
|
244
|
-
|
|
245
|
-
@page_tree.subscribe(:form_selected){|form|
|
|
246
|
-
@auth_form = form
|
|
247
|
-
@form_fields_table.clear_fields
|
|
248
|
-
form.fields.each do |field|
|
|
249
|
-
@form_fields_table.add_field field
|
|
250
|
-
end
|
|
251
|
-
form.buttons.each do |field|
|
|
252
|
-
@form_fields_table.add_field field
|
|
253
|
-
end
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
private
|
|
259
|
-
|
|
260
|
-
def password_check
|
|
261
|
-
unless @basic_auth_passwd_txt.text == @basic_auth_retype_txt.text
|
|
262
|
-
@basic_auth_retype_txt.backColor = FXColor::Red
|
|
263
|
-
else
|
|
264
|
-
@basic_auth_retype_txt.backColor = FXColor::Green
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
def notify(event, *args)
|
|
269
|
-
if @event_dispatcher_listeners[event]
|
|
270
|
-
@event_dispatcher_listeners[event].each do |m|
|
|
271
|
-
m.call(*args) if m.respond_to? :call
|
|
272
|
-
end
|
|
273
|
-
end
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
def enable_basic_auth
|
|
277
|
-
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
def disable_basic_auth
|
|
281
|
-
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
def enable_form_auth
|
|
285
|
-
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
def disable_form_auth
|
|
289
|
-
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
end
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def to_h
|
|
112
|
+
a = case @auth_type_dt.value
|
|
113
|
+
when 0
|
|
114
|
+
{
|
|
115
|
+
:auth_type => :none
|
|
116
|
+
}
|
|
117
|
+
when 1
|
|
118
|
+
{
|
|
119
|
+
:auth_type => :basic,
|
|
120
|
+
:username => @basic_auth_user_txt.text,
|
|
121
|
+
:password => @basic_auth_passwd_txt.text,
|
|
122
|
+
:retype => @basic_auth_retype_txt.text
|
|
123
|
+
# :uri => URI.parse
|
|
124
|
+
}
|
|
125
|
+
when 2
|
|
126
|
+
@form_fields_table.update_fields
|
|
127
|
+
|
|
128
|
+
{
|
|
129
|
+
:auth_type => :form,
|
|
130
|
+
:form => @auth_form,
|
|
131
|
+
:cookie_jar => @agent.respond_to?(:cookie_jar) ? @agent.cookie_jar : nil
|
|
132
|
+
}
|
|
133
|
+
end
|
|
134
|
+
a
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# def set(settings)
|
|
139
|
+
# @form_auth_url_txt.text = settings[:form_auth_url].to_s if settings.has_key? :form_auth_url
|
|
140
|
+
# update_form
|
|
141
|
+
# end
|
|
142
|
+
|
|
143
|
+
def update_form
|
|
144
|
+
[ @form_auth_url_txt, @no_auth_rb, @basic_auth_rb, @form_auth_rb ].each do |e|
|
|
145
|
+
e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def initialize(owner, opts={})
|
|
150
|
+
super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK|FRAME_RAISED, :padding => 0)
|
|
151
|
+
frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
152
|
+
#left_frm = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_Y|FRAME_NONE)
|
|
153
|
+
@event_dispatcher_listeners = Hash.new
|
|
154
|
+
@crawler = opts[:crawler] if opts.has_key? :crawler
|
|
155
|
+
@start_url = ""
|
|
156
|
+
|
|
157
|
+
auth_gb= FXGroupBox.new(frame, "Authentication", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
|
|
158
|
+
auth_frm = FXVerticalFrame.new(auth_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
159
|
+
@auth_form = nil
|
|
160
|
+
@auth_type_dt = FXDataTarget.new(0)
|
|
161
|
+
|
|
162
|
+
@no_auth_rb = FXRadioButton.new(auth_frm, "None", @auth_type_dt, FXDataTarget::ID_OPTION)
|
|
163
|
+
|
|
164
|
+
@basic_auth_rb = FXRadioButton.new(auth_frm, "Basic", @auth_type_dt, FXDataTarget::ID_OPTION + 1)
|
|
165
|
+
|
|
166
|
+
@form_auth_rb = FXRadioButton.new(auth_frm, "Form", @auth_type_dt, FXDataTarget::ID_OPTION + 2)
|
|
167
|
+
|
|
168
|
+
# group_box = FXGroupBox.new(self, "Collection",LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
|
|
169
|
+
# frame = FXVerticalFrame.new(group_box, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_GROOVE)
|
|
170
|
+
# @collectionList = FXList.new(frame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
171
|
+
|
|
172
|
+
@switcher = FXSwitcher.new(auth_frm,LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
173
|
+
frame = FXHorizontalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
174
|
+
FXLabel.new(frame, "No Authentication Selected", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
175
|
+
frame = FXHorizontalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
176
|
+
FXLabel.new(frame, "Username:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
177
|
+
@basic_auth_user_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
|
|
178
|
+
FXLabel.new(frame, "Password:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
179
|
+
@basic_auth_passwd_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
180
|
+
FXLabel.new(frame, "Retype:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
181
|
+
@basic_auth_retype_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
|
|
182
|
+
|
|
183
|
+
form_auth_frame = FXVerticalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
184
|
+
frame = FXHorizontalFrame.new(form_auth_frame, :opts => LAYOUT_FILL_X|FRAME_NONE)
|
|
185
|
+
FXLabel.new(frame, "URL of LoginForm, leave empty to use Start URL:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
186
|
+
@form_auth_url_txt = FXTextField.new(frame, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_X)
|
|
187
|
+
@fetch_button = FXButton.new(frame, "load page", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
|
|
188
|
+
|
|
189
|
+
form_frame = FXHorizontalFrame.new(form_auth_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE)
|
|
190
|
+
frame = FXHorizontalFrame.new(form_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
191
|
+
@page_tree = Watobo::Gui::PageTree.new(frame)
|
|
192
|
+
frame = FXHorizontalFrame.new(form_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK)
|
|
193
|
+
@form_fields_table = FormFieldsTable.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
194
|
+
|
|
195
|
+
@auth_type_dt.connect(SEL_COMMAND) {
|
|
196
|
+
@basic_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
197
|
+
@form_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
198
|
+
@no_auth_rb.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
199
|
+
@switcher.current = @auth_type_dt.value
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@basic_auth_passwd_txt.connect(SEL_CHANGED){ password_check }
|
|
203
|
+
@basic_auth_retype_txt.connect(SEL_CHANGED){ password_check }
|
|
204
|
+
|
|
205
|
+
@fetch_button.connect(SEL_COMMAND){
|
|
206
|
+
begin
|
|
207
|
+
@form_fields_table.clear_fields
|
|
208
|
+
@page_tree.clearItems
|
|
209
|
+
|
|
210
|
+
page = nil
|
|
211
|
+
url = nil
|
|
212
|
+
|
|
213
|
+
if @form_auth_url_txt.text.empty?
|
|
214
|
+
unless Watobo::Plugin::Crawler.start_url.nil?
|
|
215
|
+
uri = Watobo::Plugin::Crawler.start_url
|
|
216
|
+
end
|
|
217
|
+
else
|
|
218
|
+
url = @form_auth_url_txt.text unless @form_auth_url_txt.text.empty?
|
|
219
|
+
uri = URI.parse(url)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
notify(:log, "GET PAGE << #{uri.to_s}")
|
|
223
|
+
@agent, page = @crawler.get_page(uri)
|
|
224
|
+
notify(:log, "PAGE LOADED")
|
|
225
|
+
@page_tree.page = page
|
|
226
|
+
rescue => bang
|
|
227
|
+
notify(:log, "could not get page #{uri.to_s}")
|
|
228
|
+
puts "Could not get page for #{uri.to_s}"
|
|
229
|
+
puts bang
|
|
230
|
+
puts bang.backtrace if $DEBUG
|
|
231
|
+
end
|
|
232
|
+
true
|
|
233
|
+
}
|
|
234
|
+
@switcher.current = @auth_type_dt.value
|
|
235
|
+
|
|
236
|
+
@page_tree.subscribe(:form_selected){|form|
|
|
237
|
+
@auth_form = form
|
|
238
|
+
@form_fields_table.clear_fields
|
|
239
|
+
form.fields.each do |field|
|
|
240
|
+
@form_fields_table.add_field field
|
|
241
|
+
end
|
|
242
|
+
form.buttons.each do |field|
|
|
243
|
+
@form_fields_table.add_field field
|
|
244
|
+
end
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
private
|
|
250
|
+
|
|
251
|
+
def password_check
|
|
252
|
+
unless @basic_auth_passwd_txt.text == @basic_auth_retype_txt.text
|
|
253
|
+
@basic_auth_retype_txt.backColor = FXColor::Red
|
|
254
|
+
else
|
|
255
|
+
@basic_auth_retype_txt.backColor = FXColor::Green
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def notify(event, *args)
|
|
260
|
+
if @event_dispatcher_listeners[event]
|
|
261
|
+
@event_dispatcher_listeners[event].each do |m|
|
|
262
|
+
m.call(*args) if m.respond_to? :call
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def enable_basic_auth
|
|
268
|
+
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def disable_basic_auth
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def enable_form_auth
|
|
276
|
+
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def disable_form_auth
|
|
280
|
+
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
296
287
|
end
|