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,383 +1,374 @@
1
- #.
2
- # rewrite_rules_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
  # @private
11
- module Watobo#:nodoc: all
12
- module Gui
13
- class RulesTableCtrl < FXHorizontalFrame
14
- attr_accessor :target
15
-
16
- def initialize(owner,target = nil, opts)
17
- @target = target
18
- super owner, opts
19
- matrix = FXMatrix.new(self, 4, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
20
-
21
- %w( Action Location Pattern Content).each do |l|
22
- FXLabel.new(matrix, l)
23
- end
24
-
25
- @actions_combo = FXComboBox.new(matrix, 10, nil, 0, COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
26
- #@filterCombo.width =200
27
-
28
- @actions_combo.numVisible = 0
29
- @actions_combo.numColumns = 10
30
- @actions_combo.editable = false
31
- @actions_combo.connect(SEL_COMMAND){}
32
-
33
- @locations_combo = FXComboBox.new(matrix, 10, nil, 0, COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
34
- #@filterCombo.width =200
35
-
36
- @locations_combo.numVisible = 0
37
- @locations_combo.numColumns = 10
38
- @locations_combo.editable = false
39
- @locations_combo.connect(SEL_COMMAND){}
40
-
41
- @pattern_txt = FXTextField.new(matrix, 20, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN)
42
- @content_txt = FXTextField.new(matrix, 20, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN)
43
-
44
- frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
45
- top_btn_frame = FXHorizontalFrame.new(frame,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
46
-
47
- @del_btn = FXButton.new(top_btn_frame, "Del" , nil, nil)
48
- @del_btn.enable
49
- @del_btn.connect(SEL_COMMAND){ delete_rule }
50
-
51
- # @edit_btn = FXButton.new(top_btn_frame, "Edit ..." , nil, nil)
52
- # @edit_btn.enable
53
- # @edit_btn.connect(SEL_COMMAND){ delete_rule }
54
-
55
- @up_btn = FXButton.new(top_btn_frame, "Up" , nil, nil)
56
- @up_btn.enable
57
-
58
- @down_btn = FXButton.new(top_btn_frame, "Down" , nil, nil)
59
- @down_btn.enable
60
-
61
- @filter_btn = FXButton.new(top_btn_frame, "Filter" , nil, nil)
62
- @filter_btn.enable
63
- @filter_btn.connect(SEL_COMMAND){ open_filter_dialog }
64
-
65
-
66
- add_btn_frame = FXHorizontalFrame.new(frame,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
67
- @add_btn = FXButton.new(add_btn_frame, "Add ..." , nil, nil, )
68
- @add_btn.enable
69
- @add_btn.connect(SEL_COMMAND){ add_rule }
70
-
71
- end
72
-
73
- private
74
-
75
- def init_handlers()
76
-
77
- end
78
-
79
- def clear_actions
80
- @actions_combo.clearItems()
81
- end
82
-
83
- def add_action(a)
84
- @actions_combo.appendItem(a.to_s, a)
85
- @actions_combo.numVisible = @actions_combo.numItems
86
- end
87
-
88
- def add_location(l)
89
- @locations_combo.appendItem(l.to_s, l)
90
- @locations_combo.numVisible = @locations_combo.numItems
91
- end
92
-
93
- def delete_rule
94
- @target.delete_current_row if @target.respond_to? :delete_current_row
95
-
96
- end
97
-
98
- def add_rule
99
- return false if @target.nil?
100
- #TODO: Add some checks if rule is ok
101
- @target.add_rule Watobo::Interceptor::CarverRule.new(:action => @actions_combo.getItemData(@actions_combo.currentItem),
102
- :location => @locations_combo.getItemData(@locations_combo.currentItem),
103
- :pattern => @pattern_txt.text,
104
- :content => @content_txt.text,
105
- :filter => nil
106
- )
107
- end
108
-
109
- def open_filter_dialog
110
-
111
- end
112
-
113
- end
114
-
115
- class RequestRulesCtrl < RulesTableCtrl
116
- def initialize(owner, target, opts)
117
- super owner, target, opts
118
- add_action :rewrite
119
- add_action :flag
120
- add_location :url
121
- add_location :body
122
- add_location :header
123
- add_location :cookie
124
- add_location :http_parm
125
-
126
- end
127
-
128
- def open_filter_dialog
129
- rule = @target.current_rule
130
- return false if rule.nil?
131
- dlg = Watobo::Gui::RequestFilterDialog.new( self, rule )
132
- if dlg.execute != 0 then
133
- # TODO: Apply interceptor settings
134
- rule.set_filter dlg.filter
135
- @target.reset_table
136
-
137
- end
138
- end
139
- end
140
-
141
- class ResponseRulesCtrl < RulesTableCtrl
142
- def initialize(owner, target, opts)
143
- super owner, target, opts
144
- add_action :rewrite
145
- add_location :body
146
- add_location :header
147
- add_location :replace_all
148
- end
149
-
150
- def open_filter_dialog
151
- rule = @target.current_rule
152
- return false if rule.nil?
153
- dlg = Watobo::Gui::ResponseFilterDialog.new( self, rule )
154
- if dlg.execute != 0 then
155
- # TODO: Apply interceptor settings
156
- rule.set_filter dlg.filter
157
- @target.reset_table
158
- end
159
- end
160
- end
161
-
162
- class RulesTable < FXTable
163
- attr :rules
164
- def add_rule(rule)
165
- @rules << rule
166
- add_rule_row(rule)
167
- end
168
-
169
- def current_rule
170
- return nil if self.currentRow < 0
171
- return @rules[self.currentRow]
172
- end
173
-
174
- def delete_row_by_index(index)
175
- return false if index < 0
176
- return false if index > self.numRows-1
177
- @rules.delete_at index
178
- self.clearItems
179
- reset_table
180
- true
181
- end
182
-
183
- def reset_table
184
- init_columns
185
-
186
- @rules.each do |r|
187
- add_rule_row r
188
- end
189
- adjust_cell_width
190
- self.selectRow self.currentRow if self.currentRow >= 0
191
- end
192
-
193
- def delete_current_row
194
- i = self.currentRow
195
- return false if i < 0
196
- delete_row_by_index i
197
- end
198
-
199
- def initialize( owner, rules=[], opts={} )
200
- @event_dispatcher_listeners = Hash.new
201
- parms = { :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP,
202
- :padding => 2
203
- }
204
- parms.update opts
205
-
206
- super(owner, parms)
207
-
208
- self.extend Watobo::Subscriber
209
- self.setBackColor(FXRGB(255, 255, 255))
210
- self.setCellColor(0, 0, FXRGB(255, 255, 255))
211
- self.setCellColor(0, 1, FXRGB(255, 240, 240))
212
- self.setCellColor(1, 0, FXRGB(240, 255, 240))
213
- self.setCellColor(1, 1, FXRGB(240, 240, 255))
214
-
215
- @columns=Hash.new
216
-
217
- @rules = []
218
- @rules.concat rules
219
-
220
- add_column "Action", 50
221
- add_column "Location", 80
222
- add_column "Pattern", 80
223
- add_column "Content", 80
224
- add_column "Filter", 80
225
-
226
- init_columns
227
-
228
- @rules.each do |r|
229
- add_rule_row r
230
- end
231
- adjust_cell_width
232
-
233
- self.connect(SEL_SELECTED){|sender,sel,pos|
234
- self.selectRow pos.row
235
- # notify(:rule_selected, @rules[pos.row])
236
- }
237
- end
238
-
239
- private
240
-
241
- def add_rule_row(rule)
242
- row_index = self.getNumRows
243
- self.appendRows(1)
244
-
245
- self.rowHeader.setItemJustify(row_index, FXHeaderItem::RIGHT)
246
- self.setRowText(row_index, (row_index+1).to_s)
247
-
248
- index = @columns[:action][:order]
249
- self.setItemText(row_index, index, rule.action_name)
250
- self.getItem(row_index, index).justify = FXTableItem::LEFT
251
-
252
- index = @columns[:location][:order]
253
- self.setItemText(row_index, index, rule.location_name)
254
- self.getItem(row_index, index).justify = FXTableItem::LEFT
255
-
256
- index = @columns[:pattern][:order]
257
- self.setItemText(row_index, index, rule.pattern_name)
258
- self.getItem(row_index, index).justify = FXTableItem::LEFT
259
-
260
- index = @columns[:content][:order]
261
- self.setItemText(row_index, index, rule.content_name)
262
- self.getItem(row_index, index).justify = FXTableItem::LEFT
263
-
264
- index = @columns[:filter][:order]
265
- self.setItemText(row_index, index, rule.filter_name)
266
- self.getItem(row_index, index).justify = FXTableItem::LEFT
267
-
268
-
269
- end
270
- def add_column(name, width, order=0)
271
- o = ( order == 0 ) ? @columns.length : order
272
- @columns[name.downcase.to_sym] = { :name => name,
273
- :width => width,
274
- :order => o
275
- }
276
-
277
- end
278
-
279
- def adjust_cell_width()
280
- begin
281
- self.rowHeader.width = 30
282
- #self.fitColumnsToContents(0)
283
- @columns.each_with_index do |v,i|
284
-
285
- self.setColumnWidth(i, v[1][:width])
286
- end
287
- rescue => bang
288
- puts "!!!ERROR: adjustCellWidth"
289
- puts bang
290
- puts bang.backtrace
291
- end
292
-
293
- end
294
-
295
- def init_columns
296
- self.setTableSize(0, @columns.length)
297
- self.visibleRows = 5
298
- self.visibleColumns = @columns.length
299
-
300
- @columns.sort_by{|k,v| v[:order] }.each_with_index do |v,i|
301
- self.setColumnText( i, v[1][:name] )
302
- end
303
-
304
- end
305
-
306
- end
307
-
308
- class RequestRulesTable < RulesTable
309
- def initialize(owner, opts={})
310
- super owner, opts
311
- add_column "Action", 50
312
- add_column "Location", 80
313
- add_column "Pattern", 80
314
- add_column "Content", 80
315
- add_column "Filter", 80
316
-
317
- init_columns
318
- adjust_cell_width
319
-
320
- end
321
- end
322
-
323
- class RewriteRulesDialog < FXDialogBox
324
-
325
- include Responder
326
- def request_rules
327
- @request_rules_table.rules
328
- end
329
-
330
- def response_rules
331
- @response_rules_table.rules
332
- end
333
-
334
- def initialize(owner, settings = {} )
335
- super(owner, "Rewrite Rules", DECOR_TITLE|DECOR_BORDER|DECOR_CLOSE, :width => 650, :height => 610)
336
-
337
- FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
338
-
339
- @main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
340
- init_request_rules(@main_frame)
341
- init_response_rules(@main_frame)
342
-
343
- buttons_frame = FXHorizontalFrame.new(@main_frame, :opts => LAYOUT_FILL_X|LAYOUT_BOTTOM)
344
- @finishButton = FXButton.new(buttons_frame, "Accept" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
345
- @finishButton.enable
346
- @finishButton.connect(SEL_COMMAND) do |sender, sel, item|
347
- #self.handle(self, FXSEL(SEL_COMMAND, ID_CANCEL), nil)
348
- self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
349
- end
350
-
351
- @cancelButton = FXButton.new(buttons_frame, "Cancel" ,
352
- :target => self, :selector => FXDialogBox::ID_CANCEL,
353
- :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
354
- end
355
-
356
- private
357
-
358
- def onAccept(sender, sel, event)
359
-
360
- getApp().stopModal(self, 1)
361
- self.hide()
362
- return 1
363
- end
364
-
365
- def init_request_rules(owner)
366
-
367
- gbframe = FXGroupBox.new(owner, "Request Rules", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
368
- frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X, :padding => 0)
369
-
370
- @request_rules_table = RulesTable.new(frame, Interceptor::RequestCarver.rules)
371
- @request_rules_ctrl = RequestRulesCtrl.new(gbframe, @request_rules_table, :opts => LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK)
372
- end
373
-
374
- def init_response_rules(owner)
375
- gbframe = FXGroupBox.new(owner, "Response Rules", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
376
- frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X, :padding => 0)
377
-
378
- @response_rules_table = RulesTable.new(frame, Interceptor::ResponseCarver.rules)
379
- @response_rules_ctrl = ResponseRulesCtrl.new(gbframe, @response_rules_table, :opts => LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK)
380
- end
381
- end
382
- end
2
+ module Watobo#:nodoc: all
3
+ module Gui
4
+ class RulesTableCtrl < FXHorizontalFrame
5
+ attr_accessor :target
6
+
7
+ def initialize(owner,target = nil, opts)
8
+ @target = target
9
+ super owner, opts
10
+ matrix = FXMatrix.new(self, 4, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y)
11
+
12
+ %w( Action Location Pattern Content).each do |l|
13
+ FXLabel.new(matrix, l)
14
+ end
15
+
16
+ @actions_combo = FXComboBox.new(matrix, 10, nil, 0, COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
17
+ #@filterCombo.width =200
18
+
19
+ @actions_combo.numVisible = 0
20
+ @actions_combo.numColumns = 10
21
+ @actions_combo.editable = false
22
+ @actions_combo.connect(SEL_COMMAND){}
23
+
24
+ @locations_combo = FXComboBox.new(matrix, 10, nil, 0, COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK)
25
+ #@filterCombo.width =200
26
+
27
+ @locations_combo.numVisible = 0
28
+ @locations_combo.numColumns = 10
29
+ @locations_combo.editable = false
30
+ @locations_combo.connect(SEL_COMMAND){}
31
+
32
+ @pattern_txt = FXTextField.new(matrix, 20, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN)
33
+ @content_txt = FXTextField.new(matrix, 20, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN)
34
+
35
+ frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
36
+ top_btn_frame = FXHorizontalFrame.new(frame,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
37
+
38
+ @del_btn = FXButton.new(top_btn_frame, "Del" , nil, nil)
39
+ @del_btn.enable
40
+ @del_btn.connect(SEL_COMMAND){ delete_rule }
41
+
42
+ # @edit_btn = FXButton.new(top_btn_frame, "Edit ..." , nil, nil)
43
+ # @edit_btn.enable
44
+ # @edit_btn.connect(SEL_COMMAND){ delete_rule }
45
+
46
+ @up_btn = FXButton.new(top_btn_frame, "Up" , nil, nil)
47
+ @up_btn.enable
48
+
49
+ @down_btn = FXButton.new(top_btn_frame, "Down" , nil, nil)
50
+ @down_btn.enable
51
+
52
+ @filter_btn = FXButton.new(top_btn_frame, "Filter" , nil, nil)
53
+ @filter_btn.enable
54
+ @filter_btn.connect(SEL_COMMAND){ open_filter_dialog }
55
+
56
+
57
+ add_btn_frame = FXHorizontalFrame.new(frame,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
58
+ @add_btn = FXButton.new(add_btn_frame, "Add ..." , nil, nil, )
59
+ @add_btn.enable
60
+ @add_btn.connect(SEL_COMMAND){ add_rule }
61
+
62
+ end
63
+
64
+ private
65
+
66
+ def init_handlers()
67
+
68
+ end
69
+
70
+ def clear_actions
71
+ @actions_combo.clearItems()
72
+ end
73
+
74
+ def add_action(a)
75
+ @actions_combo.appendItem(a.to_s, a)
76
+ @actions_combo.numVisible = @actions_combo.numItems
77
+ end
78
+
79
+ def add_location(l)
80
+ @locations_combo.appendItem(l.to_s, l)
81
+ @locations_combo.numVisible = @locations_combo.numItems
82
+ end
83
+
84
+ def delete_rule
85
+ @target.delete_current_row if @target.respond_to? :delete_current_row
86
+
87
+ end
88
+
89
+ def add_rule
90
+ return false if @target.nil?
91
+ #TODO: Add some checks if rule is ok
92
+ @target.add_rule Watobo::Interceptor::CarverRule.new(:action => @actions_combo.getItemData(@actions_combo.currentItem),
93
+ :location => @locations_combo.getItemData(@locations_combo.currentItem),
94
+ :pattern => @pattern_txt.text,
95
+ :content => @content_txt.text,
96
+ :filter => nil
97
+ )
98
+ end
99
+
100
+ def open_filter_dialog
101
+
102
+ end
103
+
104
+ end
105
+
106
+ class RequestRulesCtrl < RulesTableCtrl
107
+ def initialize(owner, target, opts)
108
+ super owner, target, opts
109
+ add_action :rewrite
110
+ add_action :flag
111
+ add_location :url
112
+ add_location :body
113
+ add_location :header
114
+ add_location :cookie
115
+ add_location :http_parm
116
+
117
+ end
118
+
119
+ def open_filter_dialog
120
+ rule = @target.current_rule
121
+ return false if rule.nil?
122
+ dlg = Watobo::Gui::RequestFilterDialog.new( self, rule )
123
+ if dlg.execute != 0 then
124
+ # TODO: Apply interceptor settings
125
+ rule.set_filter dlg.filter
126
+ @target.reset_table
127
+
128
+ end
129
+ end
130
+ end
131
+
132
+ class ResponseRulesCtrl < RulesTableCtrl
133
+ def initialize(owner, target, opts)
134
+ super owner, target, opts
135
+ add_action :rewrite
136
+ add_location :body
137
+ add_location :header
138
+ add_location :replace_all
139
+ end
140
+
141
+ def open_filter_dialog
142
+ rule = @target.current_rule
143
+ return false if rule.nil?
144
+ dlg = Watobo::Gui::ResponseFilterDialog.new( self, rule )
145
+ if dlg.execute != 0 then
146
+ # TODO: Apply interceptor settings
147
+ rule.set_filter dlg.filter
148
+ @target.reset_table
149
+ end
150
+ end
151
+ end
152
+
153
+ class RulesTable < FXTable
154
+ attr :rules
155
+ def add_rule(rule)
156
+ @rules << rule
157
+ add_rule_row(rule)
158
+ end
159
+
160
+ def current_rule
161
+ return nil if self.currentRow < 0
162
+ return @rules[self.currentRow]
163
+ end
164
+
165
+ def delete_row_by_index(index)
166
+ return false if index < 0
167
+ return false if index > self.numRows-1
168
+ @rules.delete_at index
169
+ self.clearItems
170
+ reset_table
171
+ true
172
+ end
173
+
174
+ def reset_table
175
+ init_columns
176
+
177
+ @rules.each do |r|
178
+ add_rule_row r
179
+ end
180
+ adjust_cell_width
181
+ self.selectRow self.currentRow if self.currentRow >= 0
182
+ end
183
+
184
+ def delete_current_row
185
+ i = self.currentRow
186
+ return false if i < 0
187
+ delete_row_by_index i
188
+ end
189
+
190
+ def initialize( owner, rules=[], opts={} )
191
+ @event_dispatcher_listeners = Hash.new
192
+ parms = { :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP,
193
+ :padding => 2
194
+ }
195
+ parms.update opts
196
+
197
+ super(owner, parms)
198
+
199
+ self.extend Watobo::Subscriber
200
+ self.setBackColor(FXRGB(255, 255, 255))
201
+ self.setCellColor(0, 0, FXRGB(255, 255, 255))
202
+ self.setCellColor(0, 1, FXRGB(255, 240, 240))
203
+ self.setCellColor(1, 0, FXRGB(240, 255, 240))
204
+ self.setCellColor(1, 1, FXRGB(240, 240, 255))
205
+
206
+ @columns=Hash.new
207
+
208
+ @rules = []
209
+ @rules.concat rules
210
+
211
+ add_column "Action", 50
212
+ add_column "Location", 80
213
+ add_column "Pattern", 80
214
+ add_column "Content", 80
215
+ add_column "Filter", 80
216
+
217
+ init_columns
218
+
219
+ @rules.each do |r|
220
+ add_rule_row r
221
+ end
222
+ adjust_cell_width
223
+
224
+ self.connect(SEL_SELECTED){|sender,sel,pos|
225
+ self.selectRow pos.row
226
+ # notify(:rule_selected, @rules[pos.row])
227
+ }
228
+ end
229
+
230
+ private
231
+
232
+ def add_rule_row(rule)
233
+ row_index = self.getNumRows
234
+ self.appendRows(1)
235
+
236
+ self.rowHeader.setItemJustify(row_index, FXHeaderItem::RIGHT)
237
+ self.setRowText(row_index, (row_index+1).to_s)
238
+
239
+ index = @columns[:action][:order]
240
+ self.setItemText(row_index, index, rule.action_name)
241
+ self.getItem(row_index, index).justify = FXTableItem::LEFT
242
+
243
+ index = @columns[:location][:order]
244
+ self.setItemText(row_index, index, rule.location_name)
245
+ self.getItem(row_index, index).justify = FXTableItem::LEFT
246
+
247
+ index = @columns[:pattern][:order]
248
+ self.setItemText(row_index, index, rule.pattern_name)
249
+ self.getItem(row_index, index).justify = FXTableItem::LEFT
250
+
251
+ index = @columns[:content][:order]
252
+ self.setItemText(row_index, index, rule.content_name)
253
+ self.getItem(row_index, index).justify = FXTableItem::LEFT
254
+
255
+ index = @columns[:filter][:order]
256
+ self.setItemText(row_index, index, rule.filter_name)
257
+ self.getItem(row_index, index).justify = FXTableItem::LEFT
258
+
259
+
260
+ end
261
+ def add_column(name, width, order=0)
262
+ o = ( order == 0 ) ? @columns.length : order
263
+ @columns[name.downcase.to_sym] = { :name => name,
264
+ :width => width,
265
+ :order => o
266
+ }
267
+
268
+ end
269
+
270
+ def adjust_cell_width()
271
+ begin
272
+ self.rowHeader.width = 30
273
+ #self.fitColumnsToContents(0)
274
+ @columns.each_with_index do |v,i|
275
+
276
+ self.setColumnWidth(i, v[1][:width])
277
+ end
278
+ rescue => bang
279
+ puts "!!!ERROR: adjustCellWidth"
280
+ puts bang
281
+ puts bang.backtrace
282
+ end
283
+
284
+ end
285
+
286
+ def init_columns
287
+ self.setTableSize(0, @columns.length)
288
+ self.visibleRows = 5
289
+ self.visibleColumns = @columns.length
290
+
291
+ @columns.sort_by{|k,v| v[:order] }.each_with_index do |v,i|
292
+ self.setColumnText( i, v[1][:name] )
293
+ end
294
+
295
+ end
296
+
297
+ end
298
+
299
+ class RequestRulesTable < RulesTable
300
+ def initialize(owner, opts={})
301
+ super owner, opts
302
+ add_column "Action", 50
303
+ add_column "Location", 80
304
+ add_column "Pattern", 80
305
+ add_column "Content", 80
306
+ add_column "Filter", 80
307
+
308
+ init_columns
309
+ adjust_cell_width
310
+
311
+ end
312
+ end
313
+
314
+ class RewriteRulesDialog < FXDialogBox
315
+
316
+ include Responder
317
+ def request_rules
318
+ @request_rules_table.rules
319
+ end
320
+
321
+ def response_rules
322
+ @response_rules_table.rules
323
+ end
324
+
325
+ def initialize(owner, settings = {} )
326
+ super(owner, "Rewrite Rules", DECOR_TITLE|DECOR_BORDER|DECOR_CLOSE, :width => 650, :height => 610)
327
+
328
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
329
+
330
+ @main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
331
+ init_request_rules(@main_frame)
332
+ init_response_rules(@main_frame)
333
+
334
+ buttons_frame = FXHorizontalFrame.new(@main_frame, :opts => LAYOUT_FILL_X|LAYOUT_BOTTOM)
335
+ @finishButton = FXButton.new(buttons_frame, "Accept" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
336
+ @finishButton.enable
337
+ @finishButton.connect(SEL_COMMAND) do |sender, sel, item|
338
+ #self.handle(self, FXSEL(SEL_COMMAND, ID_CANCEL), nil)
339
+ self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
340
+ end
341
+
342
+ @cancelButton = FXButton.new(buttons_frame, "Cancel" ,
343
+ :target => self, :selector => FXDialogBox::ID_CANCEL,
344
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
345
+ end
346
+
347
+ private
348
+
349
+ def onAccept(sender, sel, event)
350
+
351
+ getApp().stopModal(self, 1)
352
+ self.hide()
353
+ return 1
354
+ end
355
+
356
+ def init_request_rules(owner)
357
+
358
+ gbframe = FXGroupBox.new(owner, "Request Rules", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
359
+ frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X, :padding => 0)
360
+
361
+ @request_rules_table = RulesTable.new(frame, Interceptor::RequestCarver.rules)
362
+ @request_rules_ctrl = RequestRulesCtrl.new(gbframe, @request_rules_table, :opts => LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK)
363
+ end
364
+
365
+ def init_response_rules(owner)
366
+ gbframe = FXGroupBox.new(owner, "Response Rules", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
367
+ frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X, :padding => 0)
368
+
369
+ @response_rules_table = RulesTable.new(frame, Interceptor::ResponseCarver.rules)
370
+ @response_rules_ctrl = ResponseRulesCtrl.new(gbframe, @response_rules_table, :opts => LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK)
371
+ end
372
+ end
373
+ end
383
374
  end