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,12 +1,3 @@
1
- #.
2
- # confirm_scan_dialog.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  require 'watobo/gui/conversation_table'
11
2
 
12
3
  # @private
@@ -1,24 +1,16 @@
1
- #.
2
- # conversation_table.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
  class CustomTableItem < FXTableItem
11
2
  attr_accessor :color
12
3
  attr_accessor :backcolor
4
+
13
5
  def drawContent table, unusable_dc, x, y, w, h
14
- FXDCWindow.new(table) {|dc|
6
+ FXDCWindow.new(table) { |dc|
15
7
  if @color and not selected?
16
8
 
17
9
  if @backcolor
18
- dc.foreground = @backcolor
19
- hg = table.horizontalGridShown? ? 1 : 0
20
- vg = table.verticalGridShown? ? 1 : 0
21
- dc.fillRectangle(x + vg, y + hg, w - vg, h - hg)
10
+ dc.foreground = @backcolor
11
+ hg = table.horizontalGridShown? ? 1 : 0
12
+ vg = table.verticalGridShown? ? 1 : 0
13
+ dc.fillRectangle(x + vg, y + hg, w - vg, h - hg)
22
14
  end
23
15
 
24
16
  dc.foreground = @color
@@ -46,13 +38,13 @@ class FXColoredTable < FXTable
46
38
 
47
39
  def setCellBackground row, column, color
48
40
  getItem(row, column).backcolor = color
49
- # puts getItem(row, column).methods.sort
50
- # updateItem row, column
41
+ # puts getItem(row, column).methods.sort
42
+ # updateItem row, column
51
43
  end
52
44
  end
53
45
 
54
46
  # @private
55
- module Watobo#:nodoc: all
47
+ module Watobo #:nodoc: all
56
48
  module Gui
57
49
  TABLE_COL_METHOD = 0x0001
58
50
  TABLE_COL_HOST = 0x0002
@@ -64,13 +56,14 @@ module Watobo#:nodoc: all
64
56
  TABLE_COL_SSL = 0x0100
65
57
  class ConversationTable < FXTable
66
58
  # class ConversationTable < FXColoredTable
67
-
59
+
68
60
  attr :filter
69
61
 
70
62
  attr_accessor :autoscroll
71
63
  attr_accessor :url_decode
72
64
 
73
65
  include Watobo::Gui::Icons
66
+
74
67
  def subscribe(event, &callback)
75
68
  (@event_dispatcher_listeners[event] ||= []) << callback
76
69
  end
@@ -97,9 +90,9 @@ module Watobo#:nodoc: all
97
90
  self.numRows
98
91
  end
99
92
 
100
-
93
+
101
94
  def apply_filter(filter={})
102
- @filter = filter
95
+ @filter = filter
103
96
  puts @filter.to_yaml if $DEBUG
104
97
  update_table
105
98
  end
@@ -109,15 +102,15 @@ module Watobo#:nodoc: all
109
102
  if currentRow >= 0
110
103
  chatid = getRowText(currentRow).to_i
111
104
  chat = Watobo::Chats.get_by_id(chatid)
112
- return chat
105
+ return chat
113
106
  end
114
107
  return nil
115
108
  end
116
109
 
117
110
  def chat_visible?(chat)
118
111
  begin
119
- return false if @filter[:ok_only] == true and chat.response.responseCode !~ /200/
120
-
112
+ return false if @filter[:ok_only] == true and chat.response.responseCode !~ /200/
113
+
121
114
  if @filter[:unique]
122
115
  unless Watobo::Gui.project.nil?
123
116
  uniq_hash = Watobo::Gui.project.uniqueRequestHash chat.request
@@ -133,7 +126,7 @@ module Watobo#:nodoc: all
133
126
  end
134
127
  # puts "* passed scope"
135
128
  if @filter[:hide_tested]
136
- return false if chat.tested?
129
+ return false if chat.tested?
137
130
  end
138
131
  # puts "* passed hide tested"
139
132
  unless @filter[:doc_filter].include?(chat.request.doctype)
@@ -145,8 +138,8 @@ module Watobo#:nodoc: all
145
138
  # puts @filter.to_yaml
146
139
  # puts chat.response.responseCode
147
140
 
148
- if @filter[:response] == true
149
- return false if @filter[:text_only] == true and chat.response.content_type !~ /(text|javascript|xml|json)/
141
+ if @filter[:response] == true
142
+ return false if @filter[:text_only] == true and chat.response.content_type !~ /(text|javascript|xml|json)/
150
143
  return true if chat.response.join.unpack("C*").pack("C*") =~ /#{@filter[:text]}/i
151
144
  end
152
145
 
@@ -160,7 +153,7 @@ module Watobo#:nodoc: all
160
153
  false
161
154
  end
162
155
 
163
- def showConversation( chat_list = nil, prefs = {} )
156
+ def showConversation(chat_list = nil, prefs = {})
164
157
  clearConversation()
165
158
  if chat_list.nil?
166
159
  Watobo::Chats.each do |chat|
@@ -195,20 +188,20 @@ module Watobo#:nodoc: all
195
188
 
196
189
  def updateComment(row, comment)
197
190
  col = @col_order.index(TABLE_COL_COMMENT)
198
- self.setItemText(row, col, comment.gsub(/[^[:print:]]/,' '))
191
+ self.setItemText(row, col, comment.gsub(/[^[:print:]]/, ' '))
199
192
  end
200
193
 
201
194
  def addChat(chat, *prefs)
202
195
  return false if chat.nil?
203
196
  if self.getNumRows <= 0 then
204
197
  clearConversation()
205
- # initColumns()
198
+ # initColumns()
206
199
  end
207
200
 
208
- @current_chat_list.push chat
201
+ @current_chat_list.push chat
209
202
  if prefs.include? :ignore_filter
210
203
  add_chat_row(chat)
211
- return true
204
+ return true
212
205
  end
213
206
  add_chat_row(chat) if Chats.match?(chat, @filter)
214
207
  return true
@@ -222,18 +215,18 @@ module Watobo#:nodoc: all
222
215
 
223
216
  @columns.each do |type, name|
224
217
  index = @col_order.index(type)
225
- self.setColumnText( index, name )
226
- self.setColumnIcon(@col_order.index(TABLE_COL_SSL), TBL_ICON_LOCK)# puts self.getItem(@col_order.index(col), 0 ).class.to_s
218
+ self.setColumnText(index, name)
219
+ self.setColumnIcon(@col_order.index(TABLE_COL_SSL), TBL_ICON_LOCK) # puts self.getItem(@col_order.index(col), 0 ).class.to_s
227
220
  end
228
221
 
229
222
  end
230
223
 
231
- def initialize( owner, unused = nil )
224
+ def initialize(owner, unused = nil)
232
225
  @event_dispatcher_listeners = Hash.new
233
226
 
234
227
  super(owner, :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
235
-
236
- @filter = {}
228
+
229
+ @filter = {}
237
230
 
238
231
  @url_decode = true
239
232
 
@@ -243,7 +236,7 @@ module Watobo#:nodoc: all
243
236
  self.setCellColor(1, 0, FXRGB(240, 255, 240))
244
237
  self.setCellColor(1, 1, FXRGB(240, 240, 255))
245
238
 
246
- # reset_filter
239
+ # reset_filter
247
240
  # FXMAPFUNC(SEL_CLICKED, FXTable::ID_SELECT_CELL, :onSelectCell)
248
241
  @current_chat_list = []
249
242
  @uniq_chats = Hash.new
@@ -265,7 +258,7 @@ module Watobo#:nodoc: all
265
258
  @columns[TABLE_COL_SSL] = ""
266
259
 
267
260
  # initialize columns order
268
- @col_order = [ TABLE_COL_SSL, TABLE_COL_METHOD, TABLE_COL_HOST, TABLE_COL_PATH, TABLE_COL_PARMS, TABLE_COL_STATUS, TABLE_COL_COOKIE, TABLE_COL_COMMENT ]
261
+ @col_order = [TABLE_COL_SSL, TABLE_COL_METHOD, TABLE_COL_HOST, TABLE_COL_PATH, TABLE_COL_PARMS, TABLE_COL_STATUS, TABLE_COL_COOKIE, TABLE_COL_COMMENT]
269
262
 
270
263
  # init cell width
271
264
  @cell_width = Hash.new
@@ -296,66 +289,68 @@ module Watobo#:nodoc: all
296
289
  column_width = self.getColumnWidth(index)
297
290
 
298
291
  new_width = case column_width
299
- when column_width > @cell_auto_max
300
- @cell_auto_max
301
- when ( column_width > @cell_width_defaults[type] )
302
- @cell_width_defaults[type]
303
- when @cell_width_defaults[type]
304
- self.fitColumnsToContents(index)
305
- w = self.getColumnWidth(index)
306
- w = @cell_auto_max if self.getColumnWidth(index) > @cell_auto_max
307
- w = @cell_width_defaults[type] if self.getColumnWidth(index) < @cell_width_defaults[type]
308
- w
309
- else
310
- @cell_width_defaults[type]
311
- end
292
+ when column_width > @cell_auto_max
293
+ @cell_auto_max
294
+ when (column_width > @cell_width_defaults[type])
295
+ @cell_width_defaults[type]
296
+ when @cell_width_defaults[type]
297
+ self.fitColumnsToContents(index)
298
+ w = self.getColumnWidth(index)
299
+ w = @cell_auto_max if self.getColumnWidth(index) > @cell_auto_max
300
+ w = @cell_width_defaults[type] if self.getColumnWidth(index) < @cell_width_defaults[type]
301
+ w
302
+ else
303
+ @cell_width_defaults[type]
304
+ end
312
305
  self.setColumnWidth(index, new_width)
313
306
  @cell_width[type] = new_width
314
307
  self.rowHeaderMode = 0
315
308
 
316
309
  adjustCellWidth()
317
-
318
-
310
+
311
+
319
312
  end
320
-
321
- self.connect(SEL_CHANGED){ |sender, sel, item|
322
- # puts "SEL_CHANGED #{item.row}"
313
+
314
+ self.connect(SEL_CHANGED) { |sender, sel, item|
315
+ # puts "SEL_CHANGED #{item.row}"
323
316
  self.selectRow(item.row, false)
324
- chat = self.getItemData(item.row, 0)
325
- notify(:chat_selected, chat) if chat.respond_to? :request
317
+ chat = self.getItemData(item.row, 0)
318
+ notify(:chat_selected, chat) if chat.respond_to? :request
326
319
  }
327
-
328
- self.connect(SEL_COMMAND){ |sender, sel, item|
329
- # puts "SEL_COMMAND #{item.row}"
320
+
321
+ self.connect(SEL_COMMAND) { |sender, sel, item|
322
+ # puts "SEL_COMMAND #{item.row}"
330
323
  self.selectRow(item.row, false)
331
- chat = self.getItemData(item.row, 0)
332
- notify(:chat_selected, chat) if chat.respond_to? :request
324
+ chat = self.getItemData(item.row, 0)
325
+ notify(:chat_selected, chat) if chat.respond_to? :request
333
326
  }
334
-
335
- self.connect(SEL_DOUBLECLICKED){ |sender, sel, item|
336
- # puts "SEL_DOUBLECLICKED #{item.row}"
337
- self.selectRow(item.row, false)
338
- chat = self.getItemData(item.row, 0)
339
- notify(:chat_doubleclicked, chat) if chat.respond_to? :request
327
+
328
+ self.connect(SEL_DOUBLECLICKED) { |sender, sel, item|
329
+ # puts "SEL_DOUBLECLICKED #{item.row}"
330
+ if item.row >= 0
331
+ self.selectRow(item.row, false)
332
+ chat = self.getItemData(item.row, 0)
333
+ notify(:chat_doubleclicked, chat) if chat.respond_to? :request
334
+ end
340
335
  }
341
-
342
- self.connect(SEL_SELECTED){ |sender, sel, item|
343
- # puts "SEL_SELECTED #{item.row}"
336
+
337
+ self.connect(SEL_SELECTED) { |sender, sel, item|
338
+ # puts "SEL_SELECTED #{item.row}"
344
339
  self.selectRow(item.row, false)
345
- chat = self.getItemData(item.row, 0)
346
- notify(:chat_selected, chat) if chat.respond_to? :request
340
+ chat = self.getItemData(item.row, 0)
341
+ notify(:chat_selected, chat) if chat.respond_to? :request
347
342
  }
348
343
 
349
344
  adjustCellWidth()
350
345
 
351
346
  addHotkeyHandler(self)
352
-
347
+
353
348
  start_update_timer
354
349
  end
355
350
 
356
351
  def scrollUp()
357
352
  #self.makePositionVisible(0, 0)
358
- self.setPosition(self.xPosition, 0)
353
+ self.setPosition(self.xPosition, 0)
359
354
  end
360
355
 
361
356
  def scrollDown()
@@ -367,17 +362,17 @@ module Watobo#:nodoc: all
367
362
  #puts "contentHeight: #{self.contentHeight}"
368
363
  #puts "y-diff: #{self.viewportHeight - self.contentHeight}"
369
364
  #puts "---"
370
- self.setPosition(self.xPosition, (self.viewportHeight - self.contentHeight))
365
+ self.setPosition(self.xPosition, (self.viewportHeight - self.contentHeight))
371
366
  end
372
-
367
+
373
368
  def start_update_timer
374
369
  @last_row_count = 0
375
- @timer = FXApp.instance.addTimeout( 150, :repeat => true) {
370
+ Watobo.save_thread {
376
371
  if self.getNumRows != @last_row_count
377
- scrollDown if @autoscroll == true
378
- @last_row_count = self.getNumRows
372
+ scrollDown if @autoscroll == true
373
+ @last_row_count = self.getNumRows
379
374
  end
380
- }
375
+ }
381
376
 
382
377
  end
383
378
 
@@ -392,10 +387,10 @@ module Watobo#:nodoc: all
392
387
 
393
388
  def add_chat_row(chat)
394
389
  return false unless chat.respond_to? :request
395
- return false unless chat.respond_to? :response
390
+ return false unless chat.respond_to? :response
396
391
  return false if chat.request.nil?
397
392
  return false if chat.response.nil?
398
-
393
+
399
394
  lastRowIndex = self.getNumRows
400
395
  self.appendRows(1)
401
396
 
@@ -412,7 +407,7 @@ module Watobo#:nodoc: all
412
407
 
413
408
  index = @col_order.index(TABLE_COL_HOST)
414
409
  self.setItemText(lastRowIndex, index, chat.request.host)
415
- self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
410
+ self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
416
411
 
417
412
  index = @col_order.index(TABLE_COL_PATH)
418
413
  self.setItemText(lastRowIndex, index, chat.request.path)
@@ -422,14 +417,14 @@ module Watobo#:nodoc: all
422
417
  ps = ""
423
418
  rup = chat.request.urlparms
424
419
  unless rup.nil?
425
- ps << rup
426
- end
420
+ ps << rup
421
+ end
427
422
 
428
423
  if chat.request.method =~ /POST/ and !chat.request.body.nil? then
429
- post_parms_string = ''
430
- post_parms_string << chat.request.body
431
- ps << "&&" unless ps.empty?
432
- ps << post_parms_string
424
+ post_parms_string = ''
425
+ post_parms_string << chat.request.body
426
+ ps << "&&" unless ps.empty?
427
+ ps << post_parms_string
433
428
  end
434
429
 
435
430
  ps = "*MULTIPART*" if chat.request.content_type =~ /multipart/i
@@ -437,24 +432,24 @@ module Watobo#:nodoc: all
437
432
  parms = ""
438
433
  unless ps.empty?
439
434
  ps_ascii = ps.force_encoding('ASCII-8BIT')
440
-
435
+
441
436
  if @url_decode == true
442
437
  if chat.request.content_type =~ /(json|xml)/
443
438
  parms = ps_ascii
444
- else
445
- parms = CGI.unescape(ps_ascii)
439
+ else
440
+ parms = CGI.unescape(ps_ascii)
446
441
  end
447
442
  end
448
- parms.gsub!(/[^[:print:]]/,'.')
443
+ parms.gsub!(/[^[:print:]]/, '.')
449
444
 
450
445
  end
451
-
446
+
452
447
  self.setItemText(lastRowIndex, index, parms)
453
448
  self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
454
449
 
455
450
  index = @col_order.index(TABLE_COL_STATUS)
456
451
  self.setItemText(lastRowIndex, index, chat.response.status)
457
- self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
452
+ self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
458
453
 
459
454
  if chat.response.header_value("set-cookie").first then
460
455
  index = @col_order.index(TABLE_COL_COOKIE)
@@ -470,12 +465,12 @@ module Watobo#:nodoc: all
470
465
  self.setItemText(lastRowIndex, index, cc)
471
466
  self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
472
467
  end
473
-
468
+
474
469
  self.setItemData(lastRowIndex, 0, chat)
475
470
 
476
471
  #self.makePositionVisible(self.numRows-1, 0) if @autoscroll == true
477
472
  if @autoscroll == true
478
- self.setPosition(self.xPosition, (self.viewportHeight - self.contentHeight - 20 ))
473
+ self.setPosition(self.xPosition, (self.viewportHeight - self.contentHeight - 20))
479
474
  end
480
475
  end
481
476
 
@@ -487,8 +482,8 @@ module Watobo#:nodoc: all
487
482
  add_chat_row(chat)
488
483
  end
489
484
  end
490
-
491
-
485
+
486
+
492
487
  def adjustCellWidth()
493
488
  begin
494
489
  self.rowHeader.width = 40
@@ -507,54 +502,54 @@ module Watobo#:nodoc: all
507
502
  @ctrl_pressed = false
508
503
 
509
504
  widget.connect(SEL_KEYPRESS) { |sender, sel, event|
510
- # puts event.code
511
- cont = false
505
+ # puts event.code
506
+ cont = false
512
507
  @ctrl_pressed = true if event.code == KEY_Control_L or event.code == KEY_Control_R
513
508
  # @shift_pressed = true if @ctrl_pressed and ( event.code == KEY_Shift_L or event.code == KEY_Shift_R )
514
- if event.code == KEY_Return
515
- chat = current_chat
516
- notify(:chat_doubleclicked, chat) if chat.respond_to? :request
517
- cont = true # special handling of KEY_Return, because we don't want a linebreak in textbox.
509
+ if event.code == KEY_Return
510
+ chat = current_chat
511
+ notify(:chat_doubleclicked, chat) if chat.respond_to? :request
512
+ cont = true # special handling of KEY_Return, because we don't want a linebreak in textbox.
518
513
  end
519
514
 
520
515
  case event.code
521
- when KEY_F1
522
-
523
- unless event.moved?
524
- FXMenuPane.new(self) do |menu_pane|
525
- FXMenuCaption.new(menu_pane, "Hotkeys:")
526
- FXMenuSeparator.new(menu_pane)
527
- [ "G - Goto",
528
- "<ctrl-n> - Goto Next",
529
- "<ctrl-N> - Goto Prev",
530
- "<space> - Edit Comment"
531
- ].each do |hk|
532
- FXMenuCaption.new(menu_pane, hk).backColor = 'yellow'
516
+ when KEY_F1
517
+
518
+ unless event.moved?
519
+ FXMenuPane.new(self) do |menu_pane|
520
+ FXMenuCaption.new(menu_pane, "Hotkeys:")
521
+ FXMenuSeparator.new(menu_pane)
522
+ ["G - Goto",
523
+ "<ctrl-n> - Goto Next",
524
+ "<ctrl-N> - Goto Prev",
525
+ "<space> - Edit Comment"
526
+ ].each do |hk|
527
+ FXMenuCaption.new(menu_pane, hk).backColor = 'yellow'
528
+ end
529
+
530
+ menu_pane.create
531
+ menu_pane.popup(nil, event.root_x, event.root_y)
532
+ app.runModalWhileShown(menu_pane)
533
533
  end
534
534
 
535
- menu_pane.create
536
- menu_pane.popup(nil, event.root_x, event.root_y)
537
- app.runModalWhileShown(menu_pane)
538
535
  end
539
536
 
540
- end
541
-
542
- when KEY_space
543
- chat = current_chat
544
- notify(:edit_comment, chat) if chat
545
- when KEY_G
546
- open_goto_url_dialog
547
- cont = true
537
+ when KEY_space
538
+ chat = current_chat
539
+ notify(:edit_comment, chat) if chat
540
+ when KEY_G
541
+ open_goto_url_dialog
542
+ cont = true
548
543
  end
549
544
 
550
545
  if @ctrl_pressed
551
546
  case event.code
552
- when KEY_n
553
- show_next
554
- when KEY_N
555
- show_prev
556
- when KEY_f
557
- notify(:open_filter_dlg)
547
+ when KEY_n
548
+ show_next
549
+ when KEY_N
550
+ show_prev
551
+ when KEY_f
552
+ notify(:open_filter_dlg)
558
553
  end
559
554
  cont = false
560
555
  end
@@ -576,61 +571,60 @@ module Watobo#:nodoc: all
576
571
  end
577
572
  true
578
573
  end
579
-
574
+
580
575
  def show_next()
581
576
  i = get_next_match
582
577
  if i >= 0
583
- selectRow(i, false)
584
- setCurrentItem(i, 2)
585
- makePositionVisible(i,2)
586
- end
578
+ selectRow(i, false)
579
+ setCurrentItem(i, 2)
580
+ makePositionVisible(i, 2)
581
+ end
587
582
  end
588
-
583
+
589
584
  def show_prev()
590
585
  i = get_prev_match
591
586
  if i >= 0
592
- selectRow(i, false)
593
- setCurrentItem(i, 2)
594
- makePositionVisible(i,2)
595
- end
587
+ selectRow(i, false)
588
+ setCurrentItem(i, 2)
589
+ makePositionVisible(i, 2)
590
+ end
596
591
  end
597
-
598
-
592
+
593
+
599
594
  def show_nearest()
600
595
  sel = -1
601
596
  pi = get_prev_match()
602
597
  ni = get_next_match()
603
-
598
+
604
599
  sel = pi
605
- if ( ni >= 0 ) and ( pi >= 0 )
606
- sel = ( currentRow - pi ) > ( ni - currentRow ) ? ni : pi
600
+ if (ni >= 0) and (pi >= 0)
601
+ sel = (currentRow - pi) > (ni - currentRow) ? ni : pi
607
602
  elsif pi >= 0
608
603
  sel = pi
609
- else
604
+ else
610
605
  sel = ni
611
606
  end
612
-
607
+
613
608
  if sel >= 0
614
- selectRow(sel, false)
609
+ selectRow(sel, false)
615
610
  setCurrentItem(sel, 2)
616
- makePositionVisible(sel,2)
611
+ makePositionVisible(sel, 2)
617
612
  end
618
-
613
+
619
614
  false
620
615
  end
621
-
622
-
623
-
616
+
617
+
624
618
  def get_next_match()
625
619
  return -1 if @url_pattern.nil?
626
620
  return -1 if @url_pattern.empty?
627
-
621
+
628
622
  row = currentRow + 1
629
623
  match = -1
630
624
  while row < numRows
631
625
  chat = self.getItemData(row, 0)
632
626
  if chat.request.url.to_s =~ /#{@url_pattern}/i
633
- match = row
627
+ match = row
634
628
  #puts chat.request.url.to_s
635
629
  end
636
630
  return match if match >= 0
@@ -638,17 +632,17 @@ module Watobo#:nodoc: all
638
632
  end
639
633
  match
640
634
  end
641
-
635
+
642
636
  def get_prev_match()
643
637
  return -1 if @url_pattern.nil?
644
638
  return -1 if @url_pattern.empty?
645
-
639
+
646
640
  row = currentRow - 1
647
641
  match = -1
648
642
  while row >= 0
649
643
  chat = self.getItemData(row, 0)
650
644
  if chat.request.url.to_s =~ /#{@url_pattern}/i
651
- match = row
645
+ match = row
652
646
  #puts chat.request.url.to_s
653
647
  end
654
648
  return match if match >= 0