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,107 +1,98 @@
1
- #.
2
- # general_settings_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 GeneralSettingsFrame < FXVerticalFrame
16
- def to_h
17
- {
18
- :max_depth => @max_depth_txt.text.to_i,
19
- :max_threads => @max_threads_txt.text.to_i,
20
- :max_repeat => @max_repeat_txt.text.to_i,
21
- :delay => @delay_txt.text.to_i,
22
- # TODO: :user_agent => @user_agent_txt.text,
23
- :submit_forms => @submit_forms_cb.checked?,
24
- :excluded_fields => @excluded_field_patterns.to_a,
25
- :head_request_pattern => @rewrite_method_cb.checked? ? @head_request_pattern_txt.text : nil
26
- }
27
- end
28
-
29
- def set(settings)
30
- @submit_forms_cb.checkState = settings[:submit_forms] if settings.has_key? :submit_forms
31
- @max_depth_txt.text = settings[:max_depth].to_s if settings.has_key? :max_depth
32
- @max_threads_txt.text = settings[:max_threads].to_s if settings.has_key? :max_threads
33
- @max_repeat_txt.text = settings[:max_repeat].to_s if settings.has_key? :max_repeat
34
- @head_request_pattern_txt.text = settings[:head_request_pattern].to_s if settings.has_key? :head_request_pattern
35
- @delay_txt.text = settings[:delay].to_s if settings.has_key? :delay
36
- @excluded_field_patterns.set settings[:excluded_fields] if settings.has_key? :excluded_fields
37
-
38
- update_form
39
- end
40
-
41
- def update_form
42
- [ @submit_forms_cb, @max_depth_txt, @max_threads_txt, @max_repeat_txt, @delay_txt, @head_request_pattern_txt, @excluded_field_patterns ].each do |e|
43
- e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
44
- end
45
- end
46
-
47
- def initialize(owner)
48
- super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
49
- iframe = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK)
50
-
51
- outer_matrix = FXMatrix.new(iframe, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
52
- gbframe = FXGroupBox.new(outer_matrix, "Performance", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
53
-
54
- matrix = FXMatrix.new(gbframe, 2, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
55
-
56
- FXLabel.new(matrix, "Max. Depth:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
57
- @max_depth_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
58
-
59
- FXLabel.new(matrix, "Max. Threads:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
60
- @max_threads_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
61
-
62
- FXLabel.new(matrix, "Max. Repeat:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
63
- @max_repeat_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
64
-
65
- FXLabel.new(matrix, "Delay (ms):", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
66
- @delay_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
67
-
68
-
69
-
70
- gbframe = FXGroupBox.new(outer_matrix, "Form Handling", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
71
- iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
72
- @submit_forms_cb = FXCheckButton.new(iframe, "Submit Forms", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
73
- @submit_forms_cb.checkState = true
74
-
75
- @fill_forms_cb = FXCheckButton.new(iframe, "Fill Forms", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
76
- @fill_forms_cb.checkState = false
77
- @fill_forms_cb.disable
78
-
79
- FXLabel.new(iframe, "Don't send forms if they contain following field names (regex):")
80
- @excluded_field_patterns = Watobo::Gui::ListBox.new(iframe)
81
-
82
- #f = FXVerticalFrame.new(outer_matrix, :opts =>LAYOUT_FILL_X|LAYOUT_FILL_Y)
83
- gbframe = FXGroupBox.new(outer_matrix, "Rewrite", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
84
- iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH, :width => 250)
85
- fxtext = FXText.new(iframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
86
- fxtext.backColor = fxtext.parent.backColor
87
- fxtext.disable
88
- text = "To speed up the crawl process and to save bandwidth it is recommended to use HEAD requests for specific document extensions."
89
- text << "The response to a HEAD request only includes the http headers but no body. The extensions pattern is defined as an regular expression (case insesitive),"
90
- text << "e.g. '(pdf|swf|doc|flv|jpg|png|gif)' - without quotes."
91
-
92
- fxtext.setText(text)
93
-
94
- @rewrite_method_cb = FXCheckButton.new(iframe, "Use HEAD method for:", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
95
- @rewrite_method_cb.checkState = true
96
- f = FXHorizontalFrame.new(iframe, :opts => LAYOUT_FILL_X)
97
- FXLabel.new(f, "Ext. Pattern:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
98
- @head_request_pattern_txt = FXTextField.new(f, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
99
- @head_request_pattern_txt.text = '(pdf|swf|doc|flv|jpg|png|gif|zip|tar|gz|bz2|tgz)'
100
-
101
- end
102
-
103
- end
104
- end
105
- end
106
- end
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ module Crawler
5
+ class Gui
6
+ class GeneralSettingsFrame < FXVerticalFrame
7
+ def to_h
8
+ {
9
+ :max_depth => @max_depth_txt.text.to_i,
10
+ :max_threads => @max_threads_txt.text.to_i,
11
+ :max_repeat => @max_repeat_txt.text.to_i,
12
+ :delay => @delay_txt.text.to_i,
13
+ # TODO: :user_agent => @user_agent_txt.text,
14
+ :submit_forms => @submit_forms_cb.checked?,
15
+ :excluded_fields => @excluded_field_patterns.to_a,
16
+ :head_request_pattern => @rewrite_method_cb.checked? ? @head_request_pattern_txt.text : nil
17
+ }
18
+ end
19
+
20
+ def set(settings)
21
+ @submit_forms_cb.checkState = settings[:submit_forms] if settings.has_key? :submit_forms
22
+ @max_depth_txt.text = settings[:max_depth].to_s if settings.has_key? :max_depth
23
+ @max_threads_txt.text = settings[:max_threads].to_s if settings.has_key? :max_threads
24
+ @max_repeat_txt.text = settings[:max_repeat].to_s if settings.has_key? :max_repeat
25
+ @head_request_pattern_txt.text = settings[:head_request_pattern].to_s if settings.has_key? :head_request_pattern
26
+ @delay_txt.text = settings[:delay].to_s if settings.has_key? :delay
27
+ @excluded_field_patterns.set settings[:excluded_fields] if settings.has_key? :excluded_fields
28
+
29
+ update_form
30
+ end
31
+
32
+ def update_form
33
+ [ @submit_forms_cb, @max_depth_txt, @max_threads_txt, @max_repeat_txt, @delay_txt, @head_request_pattern_txt, @excluded_field_patterns ].each do |e|
34
+ e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
35
+ end
36
+ end
37
+
38
+ def initialize(owner)
39
+ super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
40
+ iframe = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK)
41
+
42
+ outer_matrix = FXMatrix.new(iframe, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
43
+ gbframe = FXGroupBox.new(outer_matrix, "Performance", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
44
+
45
+ matrix = FXMatrix.new(gbframe, 2, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
46
+
47
+ FXLabel.new(matrix, "Max. Depth:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
48
+ @max_depth_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
49
+
50
+ FXLabel.new(matrix, "Max. Threads:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
51
+ @max_threads_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
52
+
53
+ FXLabel.new(matrix, "Max. Repeat:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
54
+ @max_repeat_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
55
+
56
+ FXLabel.new(matrix, "Delay (ms):", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
57
+ @delay_txt = FXTextField.new(matrix, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
58
+
59
+
60
+
61
+ gbframe = FXGroupBox.new(outer_matrix, "Form Handling", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
62
+ iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
63
+ @submit_forms_cb = FXCheckButton.new(iframe, "Submit Forms", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
64
+ @submit_forms_cb.checkState = true
65
+
66
+ @fill_forms_cb = FXCheckButton.new(iframe, "Fill Forms", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
67
+ @fill_forms_cb.checkState = false
68
+ @fill_forms_cb.disable
69
+
70
+ FXLabel.new(iframe, "Don't send forms if they contain following field names (regex):")
71
+ @excluded_field_patterns = Watobo::Gui::ListBox.new(iframe)
72
+
73
+ #f = FXVerticalFrame.new(outer_matrix, :opts =>LAYOUT_FILL_X|LAYOUT_FILL_Y)
74
+ gbframe = FXGroupBox.new(outer_matrix, "Rewrite", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
75
+ iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH, :width => 250)
76
+ fxtext = FXText.new(iframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
77
+ fxtext.backColor = fxtext.parent.backColor
78
+ fxtext.disable
79
+ text = "To speed up the crawl process and to save bandwidth it is recommended to use HEAD requests for specific document extensions."
80
+ text << "The response to a HEAD request only includes the http headers but no body. The extensions pattern is defined as an regular expression (case insesitive),"
81
+ text << "e.g. '(pdf|swf|doc|flv|jpg|png|gif)' - without quotes."
82
+
83
+ fxtext.setText(text)
84
+
85
+ @rewrite_method_cb = FXCheckButton.new(iframe, "Use HEAD method for:", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
86
+ @rewrite_method_cb.checkState = true
87
+ f = FXHorizontalFrame.new(iframe, :opts => LAYOUT_FILL_X)
88
+ FXLabel.new(f, "Ext. Pattern:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
89
+ @head_request_pattern_txt = FXTextField.new(f, 10, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
90
+ @head_request_pattern_txt.text = '(pdf|swf|doc|flv|jpg|png|gif|zip|tar|gz|bz2|tgz)'
91
+
92
+ end
93
+
94
+ end
95
+ end
96
+ end
97
+ end
107
98
  end
@@ -1,91 +1,82 @@
1
- #.
2
- # hooks_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 HooksFrame < FXVerticalFrame
16
-
17
- def to_h
18
- hooks = {}
19
- pch = pre_conn_hook
20
- hooks[:pre_connect_hook] = pch if pch.respond_to? :call
21
-
22
- hooks
23
- end
24
- def pre_conn_hook
25
- return nil unless pre_conn_valid?
26
- hook = eval(pre_conn_code)
27
-
28
- hook
29
- end
30
-
31
- def selected
32
- @pre_txt.setFocus()
33
- end
34
-
35
- def pre_conn_valid?
36
- return false if pre_conn_code.empty?
37
- begin
38
- eval(pre_conn_code)
39
- return true
40
- rescue SyntaxError, LocalJumpError, NameError => e
41
- # puts "Error in PreConnCode!!"
42
- # puts e
43
- # puts e.backtrace
44
- raise SyntaxError, "SyntaxError in Pre-Connect-Code'#{expr}'"
45
- #return false
46
- rescue => bang
47
- puts bang
48
- puts bang.backtrace
49
- return false
50
- #raise bang
51
- end
52
-
53
- end
54
-
55
- def pre_conn_code
56
- return "" if @pre_txt.text.empty?
57
- code = "lambda { |agent,request|\n"
58
- code << @pre_txt.text
59
- code << "\n}"
60
- end
61
-
62
- def initialize(owner)
63
- super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK, :padding => 0)
64
- main = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y)
65
-
66
- gbframe = FXGroupBox.new(main, "Pre-Connection", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
67
- frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
68
- #text_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, :padding =>0)
69
- fxtext = FXText.new(frame, :opts => LAYOUT_FILL_X|TEXT_WORDWRAP)
70
- fxtext.backColor = fxtext.parent.backColor
71
- fxtext.disable
72
- text = "You can define a script which gets executed just before each connection. So you are able to modify the Mechanize::Agent and Mechanize::Requests just before the request is sent to the server.\n"
73
- text << "For more information about pre_connection_hooks check the Mechanize homepage (http://mechanize.rubyforge.org/)."
74
-
75
- fxtext.setText(text)
76
-
77
- FXLabel.new(frame, "lambda{ |agent, request|")
78
- txt_frame = FXVerticalFrame.new(frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
79
- @pre_txt = FXText.new(txt_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
80
- FXLabel.new(frame, "}")
81
- @pre_txt.setText("")
82
- # cannot set the focus here because of a crash on ubuntu systems
83
- # https://bugs.launchpad.net/ubuntu/+source/fox1.6/+bug/887038
84
- # @pre_txt.setFocus()
85
- end
86
-
87
- end
88
- end
89
- end
90
- end
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ module Crawler
5
+ class Gui
6
+ class HooksFrame < FXVerticalFrame
7
+
8
+ def to_h
9
+ hooks = {}
10
+ pch = pre_conn_hook
11
+ hooks[:pre_connect_hook] = pch if pch.respond_to? :call
12
+
13
+ hooks
14
+ end
15
+ def pre_conn_hook
16
+ return nil unless pre_conn_valid?
17
+ hook = eval(pre_conn_code)
18
+
19
+ hook
20
+ end
21
+
22
+ def selected
23
+ @pre_txt.setFocus()
24
+ end
25
+
26
+ def pre_conn_valid?
27
+ return false if pre_conn_code.empty?
28
+ begin
29
+ eval(pre_conn_code)
30
+ return true
31
+ rescue SyntaxError, LocalJumpError, NameError => e
32
+ # puts "Error in PreConnCode!!"
33
+ # puts e
34
+ # puts e.backtrace
35
+ raise SyntaxError, "SyntaxError in Pre-Connect-Code'#{expr}'"
36
+ #return false
37
+ rescue => bang
38
+ puts bang
39
+ puts bang.backtrace
40
+ return false
41
+ #raise bang
42
+ end
43
+
44
+ end
45
+
46
+ def pre_conn_code
47
+ return "" if @pre_txt.text.empty?
48
+ code = "lambda { |agent,request|\n"
49
+ code << @pre_txt.text
50
+ code << "\n}"
51
+ end
52
+
53
+ def initialize(owner)
54
+ super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK, :padding => 0)
55
+ main = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y)
56
+
57
+ gbframe = FXGroupBox.new(main, "Pre-Connection", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
58
+ frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
59
+ #text_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, :padding =>0)
60
+ fxtext = FXText.new(frame, :opts => LAYOUT_FILL_X|TEXT_WORDWRAP)
61
+ fxtext.backColor = fxtext.parent.backColor
62
+ fxtext.disable
63
+ text = "You can define a script which gets executed just before each connection. So you are able to modify the Mechanize::Agent and Mechanize::Requests just before the request is sent to the server.\n"
64
+ text << "For more information about pre_connection_hooks check the Mechanize homepage (http://mechanize.rubyforge.org/)."
65
+
66
+ fxtext.setText(text)
67
+
68
+ FXLabel.new(frame, "lambda{ |agent, request|")
69
+ txt_frame = FXVerticalFrame.new(frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
70
+ @pre_txt = FXText.new(txt_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
71
+ FXLabel.new(frame, "}")
72
+ @pre_txt.setText("")
73
+ # cannot set the focus here because of a crash on ubuntu systems
74
+ # https://bugs.launchpad.net/ubuntu/+source/fox1.6/+bug/887038
75
+ # @pre_txt.setFocus()
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ end
91
82
  end
@@ -1,61 +1,52 @@
1
- #.
2
- # scope_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
-
16
-
17
- class ScopeFrame < FXVerticalFrame
18
- def to_h
19
- {
20
- :allowed_hosts => @allowed_hosts_box.to_a,
21
- :allowed_urls => @allowed_urls_box.to_a,
22
- :excluded_urls => @exluded_urls_box.to_a
23
- }
24
- end
25
-
26
- def path_restricted?
27
- @restrict_path_cb.checked?
28
- end
29
-
30
- def set(s)
31
- @allowed_hosts_box.append s[:allowed_hosts] if s.has_key? :allowed_hosts
32
- @exluded_urls_box.append s[:allowed_urls] if s.has_key? :allowed_urls
33
- @exluded_urls_box.append s[:excluded_urls] if s.has_key? :excluded_urls
34
-
35
- end
36
-
37
- def update_form
38
- @widgets.each do |e|
39
- e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
40
- end
41
- end
42
-
43
- def initialize(owner)
44
- super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
45
- iframe = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK)
46
- #iframe = self
47
- @restrict_path_cb = FXCheckButton.new(iframe, "restrict to start path", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
48
- @restrict_path_cb.checkState = true
49
-
50
- outer_matrix = FXMatrix.new(iframe, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
51
- @allowed_hosts_box = Watobo::Gui::ListBox.new(outer_matrix, "Allowed Hosts")
52
- @exluded_urls_box = Watobo::Gui::ListBox.new(outer_matrix, "Excluded URLs")
53
- @allowed_urls_box = Watobo::Gui::ListBox.new(outer_matrix, "Allowed URLs")
54
-
55
- end
56
-
57
- end
58
- end
59
- end
60
- end
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ module Crawler
5
+ class Gui
6
+
7
+
8
+ class ScopeFrame < FXVerticalFrame
9
+ def to_h
10
+ {
11
+ :allowed_hosts => @allowed_hosts_box.to_a,
12
+ :allowed_urls => @allowed_urls_box.to_a,
13
+ :excluded_urls => @exluded_urls_box.to_a
14
+ }
15
+ end
16
+
17
+ def path_restricted?
18
+ @restrict_path_cb.checked?
19
+ end
20
+
21
+ def set(s)
22
+ @allowed_hosts_box.append s[:allowed_hosts] if s.has_key? :allowed_hosts
23
+ @exluded_urls_box.append s[:allowed_urls] if s.has_key? :allowed_urls
24
+ @exluded_urls_box.append s[:excluded_urls] if s.has_key? :excluded_urls
25
+
26
+ end
27
+
28
+ def update_form
29
+ @widgets.each do |e|
30
+ e.handle(self, FXSEL(SEL_UPDATE, 0), nil)
31
+ end
32
+ end
33
+
34
+ def initialize(owner)
35
+ super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
36
+ iframe = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK)
37
+ #iframe = self
38
+ @restrict_path_cb = FXCheckButton.new(iframe, "restrict to start path", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
39
+ @restrict_path_cb.checkState = true
40
+
41
+ outer_matrix = FXMatrix.new(iframe, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
42
+ @allowed_hosts_box = Watobo::Gui::ListBox.new(outer_matrix, "Allowed Hosts")
43
+ @exluded_urls_box = Watobo::Gui::ListBox.new(outer_matrix, "Excluded URLs")
44
+ @allowed_urls_box = Watobo::Gui::ListBox.new(outer_matrix, "Allowed URLs")
45
+
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+ end
61
52
  end