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
- # define_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
  require 'fox16'
11
2
 
12
3
  include Fox
@@ -1,226 +1,217 @@
1
- #.
2
- # differ_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 Gui
13
- class SelectionInfo < FXVerticalFrame
14
- def update(info)
15
- begin
16
- @hid_label.text = info[:hid] || "-"
17
- @url_label.text = info[:url] || "-"
18
- @length_label.text = info[:length] || "-"
19
- @status_label.text = info[:status] || "-"
20
-
21
- rescue => bang
22
- puts "!!! Could not update SelectionInfo"
23
- puts bang
24
- end
25
- end
26
-
27
- def clear()
28
- @hid_label.text = "-"
29
- @url_label.text = "-"
30
- @length_label.text = "-"
31
- @status_label.text = "-"
32
- end
33
-
34
- def initialize(owner, opts)
35
- super(owner, opts)
36
- frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
37
- FXLabel.new(frame, "History-ID: ")
38
- @hid_label = FXLabel.new(frame, " - ")
39
-
40
- frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
41
- FXLabel.new(frame, "URL: ")
42
- @url_label = FXLabel.new(frame, " - ")
43
-
44
- frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
45
- FXLabel.new(frame, "Length: ")
46
- @length_label = FXLabel.new(frame, " - ")
47
-
48
- frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
49
- FXLabel.new(frame, "Status: ")
50
- @status_label = FXLabel.new(frame, " - ")
51
- end
52
- end
53
-
54
- class DiffFrame < FXVerticalFrame
55
- include Responder
56
-
57
- ID_HISTORY_BUTTON = FXMainWindow::ID_LAST
58
- def onHistoryButton(sender, sel, event)
59
- @history_slider.reset()
60
- sender.parent.backColor = FXColor::Red
61
- @slider_selection = sender.parent.item
62
- end
63
-
64
- def updateHistory(history)
65
- @slider_selection = nil
66
- @history = history
67
- # @history_slider.update(history)
68
- updateHistoryTable()
69
- # updateSelections()
70
- end
71
-
72
- def onTableClick(sender,sel,item)
73
- begin
74
-
75
- row = item.row
76
- @historyTable.selectRow(row, false)
77
- hi = @historyTable.getRowText(row).to_i - 1
78
-
79
- if @first_selection and @second_selection
80
- @first_selection = nil
81
- @second_selection = nil
82
- end
83
-
84
- if !@first_selection
85
- @first_selection = @history[hi]
86
- else
87
- @second_selection = @history[hi]
88
- end
89
-
90
- updateSelection()
91
-
92
- rescue => bang
93
- puts "!!!ERROR: onTableClick"
94
- puts bang
95
- puts "!!!"
96
-
97
- end
98
- end
99
-
100
- def initHistoryTable()
101
- @historyTable.clearItems()
102
- @historyTable.setTableSize(0, 3)
103
-
104
- @historyTable.setColumnText( 0, "STATUS" )
105
- @historyTable.setColumnText( 1, "LENGTH" )
106
- @historyTable.setColumnText( 2, "URL" )
107
-
108
- @historyTable.rowHeader.width = 50
109
- @historyTable.setColumnWidth(0, 100)
110
-
111
- @historyTable.setColumnWidth(1, 100)
112
- @historyTable.setColumnWidth(2, 200)
113
-
114
- end
115
-
116
- def updateHistoryTable()
117
- begin
118
- @historyTable.clearItems()
119
- initHistoryTable()
120
-
121
- @history.each do |h|
122
- lastRowIndex = @historyTable.getNumRows
123
- @historyTable.appendRows(1)
124
- @historyTable.setRowText(lastRowIndex, (@history.index(h) + 1 ).to_s)
125
- @historyTable.setItemText(lastRowIndex, 0, h.response.status) if h.response.respond_to? :status
126
- @historyTable.setItemText(lastRowIndex, 1, h.response.join.length.to_s)
127
- @historyTable.setItemText(lastRowIndex, 2, h.request.url.to_s) if h.request.respond_to? :url
128
- 3.times do |i|
129
- i = @historyTable.getItem(lastRowIndex, i)
130
- i.justify = FXTableItem::LEFT unless i.nil?
131
- end
132
- end
133
- rescue => bang
134
- puts bang
135
- end
136
-
137
- end
138
-
139
- def updateSelection()
140
- @first_sel_info.clear()
141
- @second_sel_info.clear()
142
-
143
- if @first_selection
144
-
145
- @first_sel_info.update( :url => @first_selection.request.url.to_s,
146
- :hid => (@history.index(@first_selection) + 1).to_s,
147
- :status => @first_selection.response.status,
148
- :length => @first_selection.response.join.length.to_s)
149
-
150
- end
151
-
152
- if @second_selection
153
- @second_sel_info.update( :url => @second_selection.request.url.to_s,
154
- :hid => (@history.index(@second_selection) + 1).to_s,
155
- :status => @second_selection.response.status,
156
- :length => @second_selection.response.join.length.to_s)
157
-
158
- end
159
- end
160
-
161
- def getDiffChats()
162
- first = nil
163
- second = nil
164
- begin
165
- case @first_chat_dt.value
166
- when 0
167
- 0
168
- when 1
169
- 0
170
- end
171
-
172
- rescue
173
-
174
- return first, second
175
- end
176
- end
177
-
178
- def initialize(owner, opts)
179
- super(owner, opts)
180
-
181
- @history_size = 10
182
- @history = []
183
- @slider_selection = nil
184
- @first_selection = nil
185
- @second_selection = nil
186
-
187
- FXMAPFUNC(SEL_COMMAND, DiffFrame::ID_HISTORY_BUTTON, 'onHistoryButton')
188
-
189
- frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN)
190
- # frame_left = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH, :width => 70, :padding => 0)
191
- # @history_slider = HistorySlider.new(frame_left, self, @history_size, opts)
192
-
193
- frame_right = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
194
- sunken = FXVerticalFrame.new(frame_right, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
195
- @historyTable = FXTable.new(sunken, :opts => FRAME_SUNKEN|TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
196
- initHistoryTable()
197
-
198
- @historyTable.connect(SEL_COMMAND, method(:onTableClick))
199
-
200
- first_chat_gb = FXGroupBox.new(frame_right, "First Chat", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
201
- @first_sel_info = SelectionInfo.new(first_chat_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
202
- second_chat_gb = FXGroupBox.new(frame_right, "Second Chat", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
203
- @second_sel_info = SelectionInfo.new(second_chat_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
204
-
205
- diff_button = FXButton.new(frame_right, "Diff it!", nil, nil, 0, :opts => LAYOUT_FILL_X|FRAME_RAISED|FRAME_THICK)
206
-
207
- diff_button.connect(SEL_COMMAND) {
208
- # new, orig = getDiffChats()
209
- if @first_selection and @second_selection then
210
- first_request = Watobo::Utils.copyObject(@first_selection.request)
211
- first_response = Watobo::Utils.copyObject(@first_selection.response)
212
- second_request = Watobo::Utils.copyObject(@second_selection.request)
213
- second_response = Watobo::Utils.copyObject(@second_selection.response)
214
-
215
- chat_one = Watobo::Chat.new(first_request, first_response, :id => 0)
216
- chat_two = Watobo::Chat.new(second_request, second_response, :id => 0)
217
- project = nil
218
- diffViewer = ChatDiffViewer.new(FXApp.instance, chat_one, chat_two)
219
- diffViewer.create
220
- diffViewer.show(Fox::PLACEMENT_SCREEN)
221
- end
222
- }
223
- end
224
- end
225
- end
2
+ module Watobo#:nodoc: all
3
+ module Gui
4
+ class SelectionInfo < FXVerticalFrame
5
+ def update(info)
6
+ begin
7
+ @hid_label.text = info[:hid] || "-"
8
+ @url_label.text = info[:url] || "-"
9
+ @length_label.text = info[:length] || "-"
10
+ @status_label.text = info[:status] || "-"
11
+
12
+ rescue => bang
13
+ puts "!!! Could not update SelectionInfo"
14
+ puts bang
15
+ end
16
+ end
17
+
18
+ def clear()
19
+ @hid_label.text = "-"
20
+ @url_label.text = "-"
21
+ @length_label.text = "-"
22
+ @status_label.text = "-"
23
+ end
24
+
25
+ def initialize(owner, opts)
26
+ super(owner, opts)
27
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
28
+ FXLabel.new(frame, "History-ID: ")
29
+ @hid_label = FXLabel.new(frame, " - ")
30
+
31
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
32
+ FXLabel.new(frame, "URL: ")
33
+ @url_label = FXLabel.new(frame, " - ")
34
+
35
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
36
+ FXLabel.new(frame, "Length: ")
37
+ @length_label = FXLabel.new(frame, " - ")
38
+
39
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_NONE|LAYOUT_FILL_X, :padding => 0)
40
+ FXLabel.new(frame, "Status: ")
41
+ @status_label = FXLabel.new(frame, " - ")
42
+ end
43
+ end
44
+
45
+ class DiffFrame < FXVerticalFrame
46
+ include Responder
47
+
48
+ ID_HISTORY_BUTTON = FXMainWindow::ID_LAST
49
+ def onHistoryButton(sender, sel, event)
50
+ @history_slider.reset()
51
+ sender.parent.backColor = FXColor::Red
52
+ @slider_selection = sender.parent.item
53
+ end
54
+
55
+ def updateHistory(history)
56
+ @slider_selection = nil
57
+ @history = history
58
+ # @history_slider.update(history)
59
+ updateHistoryTable()
60
+ # updateSelections()
61
+ end
62
+
63
+ def onTableClick(sender,sel,item)
64
+ begin
65
+
66
+ row = item.row
67
+ @historyTable.selectRow(row, false)
68
+ hi = @historyTable.getRowText(row).to_i - 1
69
+
70
+ if @first_selection and @second_selection
71
+ @first_selection = nil
72
+ @second_selection = nil
73
+ end
74
+
75
+ if !@first_selection
76
+ @first_selection = @history[hi]
77
+ else
78
+ @second_selection = @history[hi]
79
+ end
80
+
81
+ updateSelection()
82
+
83
+ rescue => bang
84
+ puts "!!!ERROR: onTableClick"
85
+ puts bang
86
+ puts "!!!"
87
+
88
+ end
89
+ end
90
+
91
+ def initHistoryTable()
92
+ @historyTable.clearItems()
93
+ @historyTable.setTableSize(0, 3)
94
+
95
+ @historyTable.setColumnText( 0, "STATUS" )
96
+ @historyTable.setColumnText( 1, "LENGTH" )
97
+ @historyTable.setColumnText( 2, "URL" )
98
+
99
+ @historyTable.rowHeader.width = 50
100
+ @historyTable.setColumnWidth(0, 100)
101
+
102
+ @historyTable.setColumnWidth(1, 100)
103
+ @historyTable.setColumnWidth(2, 200)
104
+
105
+ end
106
+
107
+ def updateHistoryTable()
108
+ begin
109
+ @historyTable.clearItems()
110
+ initHistoryTable()
111
+
112
+ @history.each do |h|
113
+ lastRowIndex = @historyTable.getNumRows
114
+ @historyTable.appendRows(1)
115
+ @historyTable.setRowText(lastRowIndex, (@history.index(h) + 1 ).to_s)
116
+ @historyTable.setItemText(lastRowIndex, 0, h.response.status) if h.response.respond_to? :status
117
+ @historyTable.setItemText(lastRowIndex, 1, h.response.join.length.to_s)
118
+ @historyTable.setItemText(lastRowIndex, 2, h.request.url.to_s) if h.request.respond_to? :url
119
+ 3.times do |i|
120
+ i = @historyTable.getItem(lastRowIndex, i)
121
+ i.justify = FXTableItem::LEFT unless i.nil?
122
+ end
123
+ end
124
+ rescue => bang
125
+ puts bang
126
+ end
127
+
128
+ end
129
+
130
+ def updateSelection()
131
+ @first_sel_info.clear()
132
+ @second_sel_info.clear()
133
+
134
+ if @first_selection
135
+
136
+ @first_sel_info.update( :url => @first_selection.request.url.to_s,
137
+ :hid => (@history.index(@first_selection) + 1).to_s,
138
+ :status => @first_selection.response.status,
139
+ :length => @first_selection.response.join.length.to_s)
140
+
141
+ end
142
+
143
+ if @second_selection
144
+ @second_sel_info.update( :url => @second_selection.request.url.to_s,
145
+ :hid => (@history.index(@second_selection) + 1).to_s,
146
+ :status => @second_selection.response.status,
147
+ :length => @second_selection.response.join.length.to_s)
148
+
149
+ end
150
+ end
151
+
152
+ def getDiffChats()
153
+ first = nil
154
+ second = nil
155
+ begin
156
+ case @first_chat_dt.value
157
+ when 0
158
+ 0
159
+ when 1
160
+ 0
161
+ end
162
+
163
+ rescue
164
+
165
+ return first, second
166
+ end
167
+ end
168
+
169
+ def initialize(owner, opts)
170
+ super(owner, opts)
171
+
172
+ @history_size = 10
173
+ @history = []
174
+ @slider_selection = nil
175
+ @first_selection = nil
176
+ @second_selection = nil
177
+
178
+ FXMAPFUNC(SEL_COMMAND, DiffFrame::ID_HISTORY_BUTTON, 'onHistoryButton')
179
+
180
+ frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN)
181
+ # frame_left = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH, :width => 70, :padding => 0)
182
+ # @history_slider = HistorySlider.new(frame_left, self, @history_size, opts)
183
+
184
+ frame_right = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
185
+ sunken = FXVerticalFrame.new(frame_right, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
186
+ @historyTable = FXTable.new(sunken, :opts => FRAME_SUNKEN|TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
187
+ initHistoryTable()
188
+
189
+ @historyTable.connect(SEL_COMMAND, method(:onTableClick))
190
+
191
+ first_chat_gb = FXGroupBox.new(frame_right, "First Chat", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
192
+ @first_sel_info = SelectionInfo.new(first_chat_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
193
+ second_chat_gb = FXGroupBox.new(frame_right, "Second Chat", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
194
+ @second_sel_info = SelectionInfo.new(second_chat_gb, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
195
+
196
+ diff_button = FXButton.new(frame_right, "Diff it!", nil, nil, 0, :opts => LAYOUT_FILL_X|FRAME_RAISED|FRAME_THICK)
197
+
198
+ diff_button.connect(SEL_COMMAND) {
199
+ # new, orig = getDiffChats()
200
+ if @first_selection and @second_selection then
201
+ first_request = Watobo::Utils.copyObject(@first_selection.request)
202
+ first_response = Watobo::Utils.copyObject(@first_selection.response)
203
+ second_request = Watobo::Utils.copyObject(@second_selection.request)
204
+ second_response = Watobo::Utils.copyObject(@second_selection.response)
205
+
206
+ chat_one = Watobo::Chat.new(first_request, first_response, :id => 0)
207
+ chat_two = Watobo::Chat.new(second_request, second_response, :id => 0)
208
+ project = nil
209
+ diffViewer = ChatDiffViewer.new(FXApp.instance, chat_one, chat_two)
210
+ diffViewer.create
211
+ diffViewer.show(Fox::PLACEMENT_SCREEN)
212
+ end
213
+ }
214
+ end
215
+ end
216
+ end
226
217
  end