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.
Files changed (283) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +46 -1
  3. data/bin/nfq_server.rb +0 -9
  4. data/bin/watobo_gui.rb +3 -13
  5. data/custom-views/prettify-json.rb +9 -18
  6. data/icons/watobo.ico +0 -0
  7. data/icons/watobo.ico.old +0 -0
  8. data/lib/watobo.rb +10 -19
  9. data/lib/watobo/adapters.rb +5 -14
  10. data/lib/watobo/adapters/data_store.rb +50 -59
  11. data/lib/watobo/adapters/file/file_store.rb +287 -296
  12. data/lib/watobo/adapters/file/marshal_store.rb +293 -296
  13. data/lib/watobo/adapters/session_store.rb +5 -14
  14. data/lib/watobo/ca.rb +1 -10
  15. data/lib/watobo/config.rb +197 -206
  16. data/lib/watobo/constants.rb +0 -9
  17. data/lib/watobo/core.rb +3 -12
  18. data/lib/watobo/core/active_check.rb +72 -135
  19. data/lib/watobo/core/active_checks.rb +49 -58
  20. data/lib/watobo/core/ca.rb +369 -389
  21. data/lib/watobo/core/cert_store.rb +34 -43
  22. data/lib/watobo/core/chat.rb +92 -101
  23. data/lib/watobo/core/chats.rb +271 -280
  24. data/lib/watobo/core/client_cert_store.rb +106 -35
  25. data/lib/watobo/core/conversation.rb +48 -57
  26. data/lib/watobo/core/cookie.rb +23 -32
  27. data/lib/watobo/core/egress_handlers.rb +98 -0
  28. data/lib/watobo/core/finding.rb +66 -75
  29. data/lib/watobo/core/findings.rb +107 -114
  30. data/lib/watobo/core/forwarding_proxy.rb +13 -22
  31. data/lib/watobo/core/fuzz_gen.rb +0 -9
  32. data/lib/watobo/core/intercept_carver.rb +166 -177
  33. data/lib/watobo/core/intercept_filter.rb +235 -244
  34. data/lib/watobo/core/interceptor.rb +98 -107
  35. data/lib/watobo/core/min_class.rb +4 -13
  36. data/lib/watobo/core/netfilter_queue.rb +170 -179
  37. data/lib/watobo/core/ott_cache.rb +132 -141
  38. data/lib/watobo/core/parameter.rb +43 -52
  39. data/lib/watobo/core/passive_check.rb +103 -102
  40. data/lib/watobo/core/passive_checks.rb +48 -57
  41. data/lib/watobo/core/passive_scanner.rb +54 -55
  42. data/lib/watobo/core/plugin.rb +11 -20
  43. data/lib/watobo/core/project.rb +3 -9
  44. data/lib/watobo/core/proxy.rb +43 -52
  45. data/lib/watobo/core/request.rb +125 -123
  46. data/lib/watobo/core/response.rb +44 -53
  47. data/lib/watobo/core/scanner.rb +0 -9
  48. data/lib/watobo/core/scanner3.rb +405 -414
  49. data/lib/watobo/core/scope.rb +83 -92
  50. data/lib/watobo/core/session.rb +1043 -1026
  51. data/lib/watobo/core/sid_cache.rb +98 -107
  52. data/lib/watobo/core/subscriber.rb +25 -34
  53. data/lib/watobo/defaults.rb +21 -30
  54. data/lib/watobo/external/diff/lcs.rb +0 -9
  55. data/lib/watobo/external/diff/lcs/array.rb +0 -9
  56. data/lib/watobo/external/diff/lcs/block.rb +0 -9
  57. data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
  58. data/lib/watobo/external/diff/lcs/change.rb +0 -9
  59. data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
  60. data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
  61. data/lib/watobo/external/diff/lcs/string.rb +0 -9
  62. data/lib/watobo/externals.rb +6 -15
  63. data/lib/watobo/framework.rb +4 -13
  64. data/lib/watobo/framework/create_project.rb +60 -69
  65. data/lib/watobo/framework/init.rb +0 -9
  66. data/lib/watobo/framework/init_modules.rb +0 -9
  67. data/lib/watobo/framework/license_text.rb +28 -37
  68. data/lib/watobo/framework/load_chat.rb +13 -22
  69. data/lib/watobo/gui.rb +132 -123
  70. data/lib/watobo/gui/about_watobo.rb +0 -9
  71. data/lib/watobo/gui/browser_preview.rb +0 -9
  72. data/lib/watobo/gui/certificate_dialog.rb +0 -9
  73. data/lib/watobo/gui/chat_diff.rb +0 -9
  74. data/lib/watobo/gui/chatviewer_frame.rb +73 -72
  75. data/lib/watobo/gui/checkboxtree.rb +0 -9
  76. data/lib/watobo/gui/checks_policy_frame.rb +0 -9
  77. data/lib/watobo/gui/client_cert_dialog.rb +96 -87
  78. data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
  79. data/lib/watobo/gui/conversation_table.rb +158 -164
  80. data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
  81. data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
  82. data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
  83. data/lib/watobo/gui/custom_viewer.rb +374 -383
  84. data/lib/watobo/gui/dashboard.rb +296 -303
  85. data/lib/watobo/gui/define_scope_frame.rb +0 -9
  86. data/lib/watobo/gui/differ_frame.rb +215 -224
  87. data/lib/watobo/gui/edit_comment.rb +0 -9
  88. data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
  89. data/lib/watobo/gui/export_dialog.rb +104 -113
  90. data/lib/watobo/gui/finding_info.rb +0 -9
  91. data/lib/watobo/gui/findings_tree.rb +210 -217
  92. data/lib/watobo/gui/full_scan_dialog.rb +0 -9
  93. data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
  94. data/lib/watobo/gui/fxsave_thread.rb +14 -0
  95. data/lib/watobo/gui/goto_url_dialog.rb +70 -79
  96. data/lib/watobo/gui/hex_viewer.rb +0 -9
  97. data/lib/watobo/gui/html_viewer.rb +287 -296
  98. data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
  99. data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
  100. data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
  101. data/lib/watobo/gui/json_viewer.rb +287 -0
  102. data/lib/watobo/gui/list_box.rb +101 -110
  103. data/lib/watobo/gui/log_file_viewer.rb +32 -41
  104. data/lib/watobo/gui/log_viewer.rb +83 -88
  105. data/lib/watobo/gui/login_wizzard.rb +0 -9
  106. data/lib/watobo/gui/main_window.rb +587 -618
  107. data/lib/watobo/gui/manual_request_editor.rb +620 -565
  108. data/lib/watobo/gui/master_pw_dialog.rb +0 -9
  109. data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
  110. data/lib/watobo/gui/page_tree.rb +217 -226
  111. data/lib/watobo/gui/password_policy_dialog.rb +0 -9
  112. data/lib/watobo/gui/plugin_board.rb +0 -9
  113. data/lib/watobo/gui/preferences_dialog.rb +0 -9
  114. data/lib/watobo/gui/progress_window.rb +17 -27
  115. data/lib/watobo/gui/project_wizzard.rb +0 -9
  116. data/lib/watobo/gui/proxy_dialog.rb +1 -10
  117. data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
  118. data/lib/watobo/gui/request_builder_frame.rb +102 -111
  119. data/lib/watobo/gui/request_editor.rb +181 -137
  120. data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
  121. data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
  122. data/lib/watobo/gui/save_chat_dialog.rb +140 -149
  123. data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
  124. data/lib/watobo/gui/select_chat_dialog.rb +0 -9
  125. data/lib/watobo/gui/session_management_dialog.rb +0 -9
  126. data/lib/watobo/gui/sites_tree.rb +0 -9
  127. data/lib/watobo/gui/status_bar.rb +0 -9
  128. data/lib/watobo/gui/table_editor.rb +0 -9
  129. data/lib/watobo/gui/tagless_viewer.rb +0 -9
  130. data/lib/watobo/gui/templates/plugin.rb +0 -9
  131. data/lib/watobo/gui/templates/plugin2.rb +92 -100
  132. data/lib/watobo/gui/templates/plugin_base.rb +144 -153
  133. data/lib/watobo/gui/text_viewer.rb +0 -9
  134. data/lib/watobo/gui/transcoder_window.rb +0 -9
  135. data/lib/watobo/gui/utils/gui_utils.rb +0 -9
  136. data/lib/watobo/gui/utils/init_icons.rb +86 -95
  137. data/lib/watobo/gui/utils/load_icons.rb +33 -42
  138. data/lib/watobo/gui/utils/load_plugins.rb +116 -119
  139. data/lib/watobo/gui/utils/master_password.rb +68 -77
  140. data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
  141. data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
  142. data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
  143. data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
  144. data/lib/watobo/gui/utils/session_history.rb +112 -121
  145. data/lib/watobo/gui/workspace_dialog.rb +0 -9
  146. data/lib/watobo/gui/www_auth_dialog.rb +0 -9
  147. data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
  148. data/lib/watobo/http.rb +4 -13
  149. data/lib/watobo/http/cookies/cookies.rb +26 -35
  150. data/lib/watobo/http/data/data.rb +45 -54
  151. data/lib/watobo/http/data/json.rb +47 -55
  152. data/lib/watobo/http/url/url.rb +38 -47
  153. data/lib/watobo/http/xml/xml.rb +124 -130
  154. data/lib/watobo/interceptor.rb +3 -12
  155. data/lib/watobo/interceptor/proxy.rb +742 -739
  156. data/lib/watobo/interceptor/transparent.rb +22 -24
  157. data/lib/watobo/mixins.rb +10 -19
  158. data/lib/watobo/mixins/check_info.rb +27 -36
  159. data/lib/watobo/mixins/httpparser.rb +613 -637
  160. data/lib/watobo/mixins/request_parser.rb +88 -97
  161. data/lib/watobo/mixins/shapers.rb +515 -529
  162. data/lib/watobo/mixins/transcoders.rb +3 -11
  163. data/lib/watobo/parser.rb +1 -10
  164. data/lib/watobo/parser/html.rb +83 -92
  165. data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
  166. data/lib/watobo/sockets.rb +3 -12
  167. data/lib/watobo/sockets/agent.rb +828 -837
  168. data/lib/watobo/sockets/client_socket.rb +308 -312
  169. data/lib/watobo/sockets/connection.rb +401 -410
  170. data/lib/watobo/sockets/http_socket.rb +11 -13
  171. data/lib/watobo/sockets/ntlm_auth.rb +129 -138
  172. data/lib/watobo/utils.rb +10 -19
  173. data/lib/watobo/utils/check_regex.rb +0 -9
  174. data/lib/watobo/utils/copy_object.rb +0 -9
  175. data/lib/watobo/utils/crypto.rb +0 -9
  176. data/lib/watobo/utils/expand_range.rb +23 -32
  177. data/lib/watobo/utils/export_xml.rb +97 -106
  178. data/lib/watobo/utils/file_management.rb +9 -11
  179. data/lib/watobo/utils/hexprint.rb +9 -18
  180. data/lib/watobo/utils/load_chat.rb +0 -9
  181. data/lib/watobo/utils/load_icon.rb +0 -9
  182. data/lib/watobo/utils/ntlm.rb +866 -875
  183. data/lib/watobo/utils/print_debug.rb +12 -21
  184. data/lib/watobo/utils/response_builder.rb +90 -99
  185. data/lib/watobo/utils/response_hash.rb +0 -9
  186. data/lib/watobo/utils/secure_eval.rb +0 -9
  187. data/lib/watobo/utils/strings.rb +10 -19
  188. data/lib/watobo/utils/text2request.rb +0 -9
  189. data/lib/watobo/utils/url.rb +23 -32
  190. data/lib/watobo/utils/utf16.rb +11 -20
  191. data/modules/active/Apache/mod_status.rb +0 -9
  192. data/modules/active/Apache/multiview.rb +151 -160
  193. data/modules/active/Flash/crossdomain.rb +0 -9
  194. data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
  195. data/modules/active/cq5/cq5_default_selectors.rb +106 -115
  196. data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
  197. data/modules/active/directories/dirwalker.rb +0 -9
  198. data/modules/active/discovery/fileextensions.rb +0 -9
  199. data/modules/active/discovery/http_methods.rb +0 -9
  200. data/modules/active/discovery/jsmapfiles.rb +79 -0
  201. data/modules/active/domino/domino_db.rb +68 -76
  202. data/modules/active/dotNET/custom_errors.rb +102 -111
  203. data/modules/active/dotNET/dotnet_files.rb +90 -99
  204. data/modules/active/fileinclusion/lfi_simple.rb +0 -9
  205. data/modules/active/jboss/jboss_basic.rb +0 -9
  206. data/modules/active/sap/business_objects.rb +51 -60
  207. data/modules/active/sap/its_commands.rb +0 -9
  208. data/modules/active/sap/its_service_parameter.rb +0 -9
  209. data/modules/active/sap/its_services.rb +0 -9
  210. data/modules/active/sap/its_xss.rb +0 -9
  211. data/modules/active/shell_shock/shell_shock.rb +139 -148
  212. data/modules/active/siebel/siebel_apps.rb +160 -169
  213. data/modules/active/sqlinjection/sql_boolean.rb +0 -9
  214. data/modules/active/sqlinjection/sql_numerical.rb +198 -0
  215. data/modules/active/sqlinjection/sqli_error.rb +0 -9
  216. data/modules/active/sqlinjection/sqli_timing.rb +220 -229
  217. data/modules/active/struts2/default_handler_ognl.rb +106 -115
  218. data/modules/active/struts2/include_params_ognl.rb +105 -114
  219. data/modules/active/xml/xml_xxe.rb +112 -123
  220. data/modules/active/xss/xss_ng.rb +214 -223
  221. data/modules/active/xss/xss_simple.rb +0 -9
  222. data/modules/passive/ajax.rb +68 -77
  223. data/modules/passive/autocomplete.rb +56 -65
  224. data/modules/passive/cookie_options.rb +0 -9
  225. data/modules/passive/cookie_xss.rb +0 -9
  226. data/modules/passive/detect_code.rb +0 -9
  227. data/modules/passive/detect_fileupload.rb +0 -9
  228. data/modules/passive/detect_infrastructure.rb +0 -9
  229. data/modules/passive/detect_one_time_tokens.rb +0 -9
  230. data/modules/passive/dirindexing.rb +0 -9
  231. data/modules/passive/disclosure_domino.rb +55 -64
  232. data/modules/passive/disclosure_emails.rb +0 -9
  233. data/modules/passive/disclosure_ipaddr.rb +55 -53
  234. data/modules/passive/filename_as_parameter.rb +0 -9
  235. data/modules/passive/form_spotter.rb +0 -9
  236. data/modules/passive/hidden_fields.rb +50 -59
  237. data/modules/passive/hotspots.rb +0 -9
  238. data/modules/passive/in_script_parameter.rb +0 -9
  239. data/modules/passive/json_web_token.rb +93 -0
  240. data/modules/passive/multiple_server_headers.rb +0 -9
  241. data/modules/passive/possible_login.rb +0 -9
  242. data/modules/passive/redirect_url.rb +0 -9
  243. data/modules/passive/redirectionz.rb +0 -9
  244. data/modules/passive/sap-headers.rb +56 -65
  245. data/modules/passive/xss_dom.rb +0 -9
  246. data/plugins/aem/aem.rb +11 -20
  247. data/plugins/aem/gui/main.rb +118 -127
  248. data/plugins/aem/gui/tree_view.rb +171 -180
  249. data/plugins/aem/lib/agent.rb +130 -138
  250. data/plugins/aem/lib/dispatcher.rb +45 -51
  251. data/plugins/aem/lib/engine.rb +177 -186
  252. data/plugins/catalog/catalog.rb +345 -355
  253. data/plugins/crawler/crawler.rb +4 -13
  254. data/plugins/crawler/gui.rb +5 -14
  255. data/plugins/crawler/gui/auth_frame.rb +270 -279
  256. data/plugins/crawler/gui/crawler_gui.rb +271 -276
  257. data/plugins/crawler/gui/general_settings_frame.rb +96 -105
  258. data/plugins/crawler/gui/hooks_frame.rb +80 -89
  259. data/plugins/crawler/gui/scope_frame.rb +50 -59
  260. data/plugins/crawler/gui/settings_tabbook.rb +38 -47
  261. data/plugins/crawler/gui/status_frame.rb +59 -68
  262. data/plugins/crawler/lib/bags.rb +18 -27
  263. data/plugins/crawler/lib/constants.rb +11 -20
  264. data/plugins/crawler/lib/engine.rb +488 -497
  265. data/plugins/crawler/lib/grabber.rb +68 -77
  266. data/plugins/crawler/lib/status.rb +71 -80
  267. data/plugins/crawler/lib/uri_mp.rb +12 -21
  268. data/plugins/filefinder/filefinder.rb +326 -333
  269. data/plugins/sqlmap/bin/test.rb +78 -87
  270. data/plugins/sqlmap/gui.rb +4 -13
  271. data/plugins/sqlmap/gui/main.rb +218 -227
  272. data/plugins/sqlmap/gui/options_frame.rb +97 -106
  273. data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
  274. data/plugins/sqlmap/sqlmap.rb +2 -11
  275. data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
  276. data/plugins/sslchecker/gui/cipher_table.rb +246 -254
  277. data/plugins/sslchecker/gui/gui.rb +258 -264
  278. data/plugins/sslchecker/gui/sslchecker.rb +4 -13
  279. data/plugins/sslchecker/lib/check.rb +127 -133
  280. data/plugins/wshell/gui/main.rb +119 -117
  281. data/plugins/wshell/lib/core.rb +38 -88
  282. data/plugins/wshell/wshell.rb +11 -20
  283. 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; end
37
-
38
- class UsernameError < StandardError; end
39
-
40
- icon_file "crawler.ico"
41
-
42
- include Watobo::Constants
43
- include Watobo::Plugin::Crawler::Constants
44
-
45
- def updateView
46
-
47
- end
48
-
49
- def start_url
50
- url = url_valid? ? URI.parse(@url_txt.text) : nil
51
- return url
52
- end
53
-
54
- def settings
55
- @settings_tabbook
56
- end
57
-
58
- def set_tab_index(index)
59
- @settings_tabbook.setCurrent index
60
- end
61
-
62
- def initialize(owner, project=nil, chat=nil)
63
- super(owner, "Crawler", project, :opts => DECOR_ALL, :width=>800, :height=>600)
64
- @plugin_name = "Crawler"
65
- @project = project
66
- @status_lock = Mutex.new
67
- @crawl_status = {
68
- :engine_status => CRAWL_NONE,
69
- :page_size => 0,
70
- :link_size => 0,
71
- :skipped_domains => 0
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
- when /start/i
98
- start
99
- when /cancel/i
100
- cancel
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 = { :username => user,
119
- :password => pw,
120
- :auth_type => :basic
111
+ auth = {:username => user,
112
+ :password => pw,
113
+ :auth_type => :basic
121
114
  }
122
- @settings_tabbook.auth.set(auth)
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 = { :domain => domain,
132
- :name => name,
133
- :value => value,
134
- :path => '/',
135
- :expires => (Date.today+1).to_s
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
- update_url_state
165
-
166
- end
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
- @start_button.enable
166
+ @start_button.enable
174
167
  else
175
- @start_button.disable
176
- # Watobo::Plugin::Crawler.start_url = nil
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
- app.removeTimeout @update_timer
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
- case es
201
- when CRAWL_NONE
202
- @start_button.text = "start"
203
- when CRAWL_RUNNING
204
- @start_button.text = "cancel"
205
-
206
- when CRAWL_PAUSED
207
- @start_button.text = "start"
208
- end
209
- end
210
- end
211
-
212
- def cancel
213
- remove_update_timer()
214
- @crawler.cancel
215
- @start_button.text = "start"
216
- update_status
217
- end
218
-
219
- def auth_settings()
220
- puts "= Authentication Settings ="
221
- auth = @settings_tabbook.auth.to_h
222
- # puts auth.to_yaml
223
- case auth[:auth_type]
224
- when :basic
225
- auth[:auth_uri] = start_url
226
- unless auth[:password] == auth[:retype]
227
- raise PasswordMatchError, "Passwords Don't Match!"
228
- end
229
- if auth[:username].empty?
230
- raise UsernameError, "Username is empty!"
231
- end
232
- when :form
233
- if auth.has_key? :form
234
- begin
235
- if auth[:form].buttons.length > 0
236
- auth[:form].click_button
237
- #@crawler.send_form(form).
238
- elsif auth[:form].respond_to? :submit
239
- puts "Submitting Form"
240
- p = auth[:form].submit()
241
- #puts p.class
242
- end
243
- rescue => bang
244
- puts bang
245
- end
246
- end
247
- end
248
- puts "---"
249
- auth
250
- end
251
-
252
- def scope_settings()
253
- # puts "= Scope Settings ="
254
- scope = @settings_tabbook.scope
255
- ss = scope.to_h
256
- ss[:root_path] = start_url.path_mp if scope.path_restricted?
257
- ss
258
- end
259
-
260
- def general_settings()
261
- # puts "= General Settings ="
262
-
263
- gs = @settings_tabbook.general.to_h
264
-
265
- end
266
-
267
- def hook_settings
268
- hs = @settings_tabbook.hooks.to_h
269
- end
270
-
271
- def url_valid?
272
- begin
273
- return false unless @url_txt.text.strip =~ /^https?:\/\//
274
- url = URI.parse(@url_txt.text.strip)
275
- # puts url.host.class
276
- return true unless url.host.nil?
277
- return false
278
- rescue => bang
279
- puts bang if $DEBUG
280
- return false
281
- end
282
- end
283
-
284
- def start
285
- return false unless url_valid?
286
-
287
- begin
288
-
289
- prefs ={}
290
- prefs.update auth_settings
291
- prefs.update scope_settings
292
- prefs.update general_settings
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
- #puts "Passwords Don't Match!"
309
- FXMessageBox.information(self,MBOX_OK,"Password Error", "The provided passwords don't match!")
310
- rescue UsernameError
311
- #puts "Passwords Don't Match!"
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