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
- # redirectionz.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
2
  module Watobo#:nodoc: all
12
3
  module Modules
@@ -1,66 +1,57 @@
1
- #.
2
- # sap-headers.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
1
 
10
-
11
- # @private
12
- module Watobo#:nodoc: all
13
- module Modules
14
- module Passive
15
-
16
-
17
- class Sap_headers < Watobo::PassiveCheck
18
-
19
- def initialize(project)
20
- @project = project
21
- super(project)
22
- @info.update(
23
- :check_name => 'SAP Headers', # name of check which briefly describes functionality, will be used for tree and progress views
24
- :description => "checks for headers which contain 'sap-', e.g. sap-srt_server_info.", # description of checkfunction
25
- :author => "Andreas Schmidt", # author of check
26
- :version => "0.9" # check version
27
- )
28
-
29
- @finding.update(
30
- :threat => 'May reveal sensitive information..', # thread of vulnerability, e.g. loss of information
31
- :class => "SAP Header", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
32
- :type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
33
- )
34
-
35
- @tested_directories = []
36
-
37
- @pattern_list = [ '^sap-' ]
38
-
39
-
40
- end
41
-
42
- def do_test(chat)
43
- begin
44
-
45
- @pattern_list.each do |pat|
46
- chat.response.headers(pat) do |header|
47
- next unless chat.response.has_body?
48
- match = header.split(":")[0]
49
- addFinding(
50
- :proof_pattern => "#{header}",
51
- :chat => chat,
52
- :title => "#{match}"
53
- )
54
-
55
- end
56
- end
57
- rescue => bang
58
- puts "ERROR!! #{Module.nesting[0].name}"
59
- puts bang
60
- end
61
- end
62
- end
63
-
64
- end
65
- end
66
- end
2
+ # @private
3
+ module Watobo#:nodoc: all
4
+ module Modules
5
+ module Passive
6
+
7
+
8
+ class Sap_headers < Watobo::PassiveCheck
9
+
10
+ def initialize(project)
11
+ @project = project
12
+ super(project)
13
+ @info.update(
14
+ :check_name => 'SAP Headers', # name of check which briefly describes functionality, will be used for tree and progress views
15
+ :description => "checks for headers which contain 'sap-', e.g. sap-srt_server_info.", # description of checkfunction
16
+ :author => "Andreas Schmidt", # author of check
17
+ :version => "0.9" # check version
18
+ )
19
+
20
+ @finding.update(
21
+ :threat => 'May reveal sensitive information..', # thread of vulnerability, e.g. loss of information
22
+ :class => "SAP Header", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
23
+ :type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
24
+ )
25
+
26
+ @tested_directories = []
27
+
28
+ @pattern_list = [ '^sap-' ]
29
+
30
+
31
+ end
32
+
33
+ def do_test(chat)
34
+ begin
35
+
36
+ @pattern_list.each do |pat|
37
+ chat.response.headers(pat) do |header|
38
+ next unless chat.response.has_body?
39
+ match = header.split(":")[0]
40
+ addFinding(
41
+ :proof_pattern => "#{header}",
42
+ :chat => chat,
43
+ :title => "#{match}"
44
+ )
45
+
46
+ end
47
+ end
48
+ rescue => bang
49
+ puts "ERROR!! #{Module.nesting[0].name}"
50
+ puts bang
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -1,12 +1,3 @@
1
- #.
2
- # xss_dom.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 'cgi'
11
2
 
12
3
  # @private
@@ -1,21 +1,12 @@
1
- #.
2
- # aem.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
1
+ # @private
2
+ module Watobo#:nodoc: all::Plugin
3
+ module Plugin
4
+ class AEM < Watobo::PluginBase
5
+ plugin_name "AEM"
6
+ description "Adobe Experience Manager Enumerator"
7
+ load_libs
8
+ load_gui :main, :tree_view
9
+ end
10
+ end
11
+ end
9
12
 
10
- # @private
11
- module Watobo#:nodoc: all::Plugin
12
- module Plugin
13
- class AEM < Watobo::PluginBase
14
- plugin_name "AEM"
15
- description "Adobe Experience Manager Enumerator"
16
- load_libs
17
- load_gui :main, :tree_view
18
- end
19
- end
20
- end
21
-
@@ -1,128 +1,119 @@
1
- #.
2
- # main.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
- # @private
11
- module Watobo#:nodoc: all
12
- module Plugin
13
- class AEM
14
- class Gui < Watobo::PluginGui
15
-
16
- window_title "Adobe Experience Manager Enumerator"
17
- icon_file "aem.ico"
18
- def start
19
- @results = []
20
- @tree_view.clear
21
- @tree_view.set_base_dir @url.text
22
- Watobo::Plugin::CQ5.reset
23
- # Watobo::Plugin::CQ5.use_relative_path = @relative_path_cb.checked?
24
- Watobo::Plugin::CQ5.ignore_patterns = @ignore_cb.checked? ? @ignore_patterns_list.to_a : []
25
- Watobo::Plugin::CQ5.run( @url.text , @results_queue)
26
- end
27
-
28
- def stop
29
- Watobo::Plugin::CQ5.stop
30
- end
31
-
32
- def initialize()
33
- @results = []
34
- @export_path = Watobo.workspace_path
35
- @results_queue = Queue.new
36
-
37
- super()
38
-
39
- main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
40
-
41
- url_frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
42
- @url = FXTextField.new(url_frame, 25, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_X|LAYOUT_LEFT)
43
-
44
- @url.setFocus()
45
- @url.setDefault()
46
-
47
- @start_btn = FXButton.new(url_frame, "start")
48
-
49
- @url.connect(SEL_COMMAND){ start }
50
- @start_btn.connect(SEL_COMMAND){ start }
51
-
52
- @stop_btn = FXButton.new(url_frame, "stop")
53
- @stop_btn.connect(SEL_COMMAND){ stop }
54
-
55
- splitter = FXSplitter.new(main_frame, LAYOUT_FILL_X|SPLITTER_HORIZONTAL|LAYOUT_FILL_Y|SPLITTER_TRACKING)
56
- opts_frame = FXVerticalFrame.new(splitter, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FIX_WIDTH, :width => 450)
57
-
58
-
59
- gbframe = FXGroupBox.new(opts_frame, "Ignore Path Patterns", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
60
- iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
61
- @ignore_cb = FXCheckButton.new(iframe, "enable", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
62
- @ignore_cb.checkState = true
63
-
64
- @invert_cb = FXCheckButton.new(iframe, "invert", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
65
- @invert_cb.checkState = false
66
- @invert_cb.disable
67
-
68
- FXLabel.new(iframe, "Ignore if url matches one of the following patterns (regex):")
69
- @ignore_patterns_list = Watobo::Gui::ListBox.new(iframe)
70
- @ignore_patterns_list.set %w( replication\/data jcr.*versionstorage workflow\/instances audit\/com.day.cq.replication\/content )
71
- #@scope_only_cb.connect(SEL_COMMAND) { }
72
-
73
- #mr_splitter = FXSplitter.new(main_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|SPLITTER_HORIZONTAL|SPLITTER_REVERSED|SPLITTER_TRACKING)
74
- # top = FXHorizontalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_SIDE_BOTTOM)
75
- top_frame = FXVerticalFrame.new(splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FIX_HEIGHT|FRAME_SUNKEN,:height => 500)
76
- @tree_view = TreeView.new top_frame
77
-
78
-
79
- frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
80
- @counter = FXLabel.new(frame, "")
81
- @queue_size = FXLabel.new(frame, "")
82
- update_counter
83
-
84
- @tree_view.subscribe(:show_info){|item|
85
- puts "Item clicked"
86
- puts item[:url]
87
- }
88
-
89
- @save_btn = FXButton.new(frame, "save", :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
90
- @save_btn.connect(SEL_COMMAND){ save_results }
91
-
92
- update_timer(500){
93
- max = 100
94
- count = 0
95
- while @results_queue.size > 0 and count < max
96
- r = @results_queue.deq
97
- @results << r
98
- #puts @results.length
99
- @tree_view.add r
100
- count += 1
101
- end
102
- update_counter
103
- }
104
- end
105
-
106
- private
107
-
108
- def update_counter
109
- @counter.text = "Total: #{@results.length}"
110
- @queue_size.text = "Queue: #{Watobo::Plugin::CQ5.queue_size}"
111
- end
112
-
113
- def save_results
114
- fname = "cq5_" + Time.now.to_i.to_s + ".json"
115
- dst_file = File.join(@export_path, fname)
116
- filename = FXFileDialog.getSaveFilename(self, "Select Export File", dst_file)
117
- if filename != "" then
118
- @export_path = File.dirname filename
119
- Thread.new(filename){|fn|
120
- File.open(fn,"wb"){|fh| fh.print JSON.pretty_generate(@results) }
121
- }
122
- end
123
- end
124
-
125
- end
126
- end
127
- end
1
+ # @private
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ class AEM
5
+ class Gui < Watobo::PluginGui
6
+
7
+ window_title "Adobe Experience Manager Enumerator"
8
+ icon_file "aem.ico"
9
+ def start
10
+ @results = []
11
+ @tree_view.clear
12
+ @tree_view.set_base_dir @url.text
13
+ Watobo::Plugin::CQ5.reset
14
+ # Watobo::Plugin::CQ5.use_relative_path = @relative_path_cb.checked?
15
+ Watobo::Plugin::CQ5.ignore_patterns = @ignore_cb.checked? ? @ignore_patterns_list.to_a : []
16
+ Watobo::Plugin::CQ5.run( @url.text , @results_queue)
17
+ end
18
+
19
+ def stop
20
+ Watobo::Plugin::CQ5.stop
21
+ end
22
+
23
+ def initialize()
24
+ @results = []
25
+ @export_path = Watobo.workspace_path
26
+ @results_queue = Queue.new
27
+
28
+ super()
29
+
30
+ main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
31
+
32
+ url_frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
33
+ @url = FXTextField.new(url_frame, 25, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_X|LAYOUT_LEFT)
34
+
35
+ @url.setFocus()
36
+ @url.setDefault()
37
+
38
+ @start_btn = FXButton.new(url_frame, "start")
39
+
40
+ @url.connect(SEL_COMMAND){ start }
41
+ @start_btn.connect(SEL_COMMAND){ start }
42
+
43
+ @stop_btn = FXButton.new(url_frame, "stop")
44
+ @stop_btn.connect(SEL_COMMAND){ stop }
45
+
46
+ splitter = FXSplitter.new(main_frame, LAYOUT_FILL_X|SPLITTER_HORIZONTAL|LAYOUT_FILL_Y|SPLITTER_TRACKING)
47
+ opts_frame = FXVerticalFrame.new(splitter, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FIX_WIDTH, :width => 450)
48
+
49
+
50
+ gbframe = FXGroupBox.new(opts_frame, "Ignore Path Patterns", FRAME_GROOVE|LAYOUT_FILL_Y, 0, 0, 0, 0)
51
+ iframe = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
52
+ @ignore_cb = FXCheckButton.new(iframe, "enable", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
53
+ @ignore_cb.checkState = true
54
+
55
+ @invert_cb = FXCheckButton.new(iframe, "invert", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
56
+ @invert_cb.checkState = false
57
+ @invert_cb.disable
58
+
59
+ FXLabel.new(iframe, "Ignore if url matches one of the following patterns (regex):")
60
+ @ignore_patterns_list = Watobo::Gui::ListBox.new(iframe)
61
+ @ignore_patterns_list.set %w( replication\/data jcr.*versionstorage workflow\/instances audit\/com.day.cq.replication\/content )
62
+ #@scope_only_cb.connect(SEL_COMMAND) { }
63
+
64
+ #mr_splitter = FXSplitter.new(main_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|SPLITTER_HORIZONTAL|SPLITTER_REVERSED|SPLITTER_TRACKING)
65
+ # top = FXHorizontalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_SIDE_BOTTOM)
66
+ top_frame = FXVerticalFrame.new(splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_FIX_HEIGHT|FRAME_SUNKEN,:height => 500)
67
+ @tree_view = TreeView.new top_frame
68
+
69
+
70
+ frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
71
+ @counter = FXLabel.new(frame, "")
72
+ @queue_size = FXLabel.new(frame, "")
73
+ update_counter
74
+
75
+ @tree_view.subscribe(:show_info){|item|
76
+ puts "Item clicked"
77
+ puts item[:url]
78
+ }
79
+
80
+ @save_btn = FXButton.new(frame, "save", :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
81
+ @save_btn.connect(SEL_COMMAND){ save_results }
82
+
83
+ update_timer(500){
84
+ max = 100
85
+ count = 0
86
+ while @results_queue.size > 0 and count < max
87
+ r = @results_queue.deq
88
+ @results << r
89
+ #puts @results.length
90
+ @tree_view.add r
91
+ count += 1
92
+ end
93
+ update_counter
94
+ }
95
+ end
96
+
97
+ private
98
+
99
+ def update_counter
100
+ @counter.text = "Total: #{@results.length}"
101
+ @queue_size.text = "Queue: #{Watobo::Plugin::CQ5.queue_size}"
102
+ end
103
+
104
+ def save_results
105
+ fname = "cq5_" + Time.now.to_i.to_s + ".json"
106
+ dst_file = File.join(@export_path, fname)
107
+ filename = FXFileDialog.getSaveFilename(self, "Select Export File", dst_file)
108
+ if filename != "" then
109
+ @export_path = File.dirname filename
110
+ Thread.new(filename){|fn|
111
+ File.open(fn,"wb"){|fh| fh.print JSON.pretty_generate(@results) }
112
+ }
113
+ end
114
+ end
115
+
116
+ end
117
+ end
118
+ end
128
119
  end
@@ -1,180 +1,171 @@
1
- #.
2
- # tree_view.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
- #require 'qcustomize.rb'
11
-
12
- # @private
13
- module Watobo#:nodoc: all
14
- module Plugin
15
- class AEM
16
- class Gui
17
- class TreeView < FXTreeList
18
-
19
- include Watobo::Constants
20
- include Watobo::Gui::Icons
21
-
22
- def subscribe(event, &callback)
23
- (@event_dispatcher_listeners[event] ||= []) << callback
24
- end
25
-
26
- def clear()
27
- @results = []
28
- self.clearItems
29
- end
30
-
31
- #def refresh_tree()
32
- # self.clearItems
33
-
34
- #Watobo::Chats.each do |chat|
35
- # addChat(chat)
36
- #end
37
-
38
- # @interface.updateRequestTable(@project)
39
- #end
40
-
41
- def expandFullTree(item)
42
- self.expandTree(item)
43
- item.each do |c|
44
- expandFullTree(c) if !self.itemLeaf?(c)
45
- end
46
- end
47
-
48
- def collapseFullTree(item)
49
- self.collapseTree(item)
50
- item.each do |c|
51
- collapseFullTree(c) if !self.itemLeaf?(c)
52
- end
53
- end
54
-
55
-
56
-
57
- def add(result)
58
- addItem(result)
59
- end
60
-
61
- def set_base_dir(url)
62
- url.gsub!(/^.*\/\//,'')
63
- subdirs = url.split '/'
64
- subdirs.shift
65
- item = nil
66
- subdirs.each do |d|
67
- # puts "* append #{d}"
68
- nxt = self.appendItem(item, d)#, @folderIcon, @folderIcon)
69
- self.setItemData(nxt, :base_dir)
70
- # puts nxt.class
71
- item = nxt
72
- end
73
-
74
- # @base_dir = subdirs.join '/'
75
- end
76
-
77
- # end
78
- def addItem(result)
79
- #puts result
80
- url = "#{result[:url].to_s}"
81
- url.gsub!(/^.*\/\//,'')
82
- subdirs = url.split '/'
83
- subdirs.shift
84
-
85
- puts subdirs.join ' | '
86
-
87
- item = nil
88
- subdirs.each do |d|
89
- nxt = self.findItem(d, item, SEARCH_FORWARD)
90
- break if nxt.nil?
91
- item = nxt
92
- end
93
-
94
- unless item.nil?
95
- unless subdirs.last == item.text
96
- new_item = self.appendItem(item, subdirs.last)#, @folderIcon, @folderIcon)
97
- self.setItemData(new_item, result)
98
- end
99
- end
100
-
101
- end
102
-
103
- def initialize(parent)
104
-
105
- @parent = parent
106
- @quick_filter = Hash.new
107
- @show_scope_only = false
108
-
109
- @results = []
110
-
111
- super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_RIGHT|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT)
112
-
113
- @event_dispatcher_listeners = Hash.new
114
-
115
- @projectIcon = ICON_PROJECT
116
-
117
- @folderIcon = ICON_FOLDER
118
- @reqIcon = ICON_REQUEST
119
- @siteIcon= ICON_SITE
120
-
121
- @filtered_domains = Hash.new # domains which already have been filtered
122
-
123
- @tree_filters = {
124
- :response_status => []
125
- }
126
-
127
- # session_leaf = self.appendItem(nil, @session_name, @projectIcon, @projectIcon)
128
-
129
- self.connect(SEL_COMMAND) do |sender, sel, item|
130
- url_parts = []
131
- begin
132
- if item.data.is_a? Hash
133
- #if item.data.class.to_s =~ /Qchat/
134
- #@interface.show_chat(item.data)
135
- notify(:show_info, item.data)
136
- end
137
-
138
- rescue => bang
139
- # puts bang
140
- # puts bang.backtrace if $DEBUG
141
- #puts "!!! Error: could not show selected tree item"
142
- end
143
-
144
- getApp().beginWaitCursor do
145
- notify(:show_conversation, @quick_filter[item.object_id]) if @quick_filter[item.object_id]
146
- end
147
- end
148
-
149
- self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
150
- exclude_site = nil
151
- unless event.moved?
152
- FXMenuPane.new(self) do |menu_pane|
153
-
154
- target = FXMenuCheck.new(menu_pane, "test" )
155
-
156
- menu_pane.create
157
- menu_pane.popup(nil, event.root_x, event.root_y)
158
- app.runModalWhileShown(menu_pane)
159
-
160
- end
161
- end
162
- end
163
- end
164
-
165
- private
166
-
167
- def notify(event, *args)
168
- if @event_dispatcher_listeners[event]
169
- @event_dispatcher_listeners[event].each do |m|
170
- m.call(*args) if m.respond_to? :call
171
- end
172
- end
173
- end
174
-
175
- end
176
- # namespace end
177
- end
178
- end
179
- end
180
- end
1
+ #require 'qcustomize.rb'
2
+
3
+ # @private
4
+ module Watobo#:nodoc: all
5
+ module Plugin
6
+ class AEM
7
+ class Gui
8
+ class TreeView < FXTreeList
9
+
10
+ include Watobo::Constants
11
+ include Watobo::Gui::Icons
12
+
13
+ def subscribe(event, &callback)
14
+ (@event_dispatcher_listeners[event] ||= []) << callback
15
+ end
16
+
17
+ def clear()
18
+ @results = []
19
+ self.clearItems
20
+ end
21
+
22
+ #def refresh_tree()
23
+ # self.clearItems
24
+
25
+ #Watobo::Chats.each do |chat|
26
+ # addChat(chat)
27
+ #end
28
+
29
+ # @interface.updateRequestTable(@project)
30
+ #end
31
+
32
+ def expandFullTree(item)
33
+ self.expandTree(item)
34
+ item.each do |c|
35
+ expandFullTree(c) if !self.itemLeaf?(c)
36
+ end
37
+ end
38
+
39
+ def collapseFullTree(item)
40
+ self.collapseTree(item)
41
+ item.each do |c|
42
+ collapseFullTree(c) if !self.itemLeaf?(c)
43
+ end
44
+ end
45
+
46
+
47
+
48
+ def add(result)
49
+ addItem(result)
50
+ end
51
+
52
+ def set_base_dir(url)
53
+ url.gsub!(/^.*\/\//,'')
54
+ subdirs = url.split '/'
55
+ subdirs.shift
56
+ item = nil
57
+ subdirs.each do |d|
58
+ # puts "* append #{d}"
59
+ nxt = self.appendItem(item, d)#, @folderIcon, @folderIcon)
60
+ self.setItemData(nxt, :base_dir)
61
+ # puts nxt.class
62
+ item = nxt
63
+ end
64
+
65
+ # @base_dir = subdirs.join '/'
66
+ end
67
+
68
+ # end
69
+ def addItem(result)
70
+ #puts result
71
+ url = "#{result[:url].to_s}"
72
+ url.gsub!(/^.*\/\//,'')
73
+ subdirs = url.split '/'
74
+ subdirs.shift
75
+
76
+ puts subdirs.join ' | '
77
+
78
+ item = nil
79
+ subdirs.each do |d|
80
+ nxt = self.findItem(d, item, SEARCH_FORWARD)
81
+ break if nxt.nil?
82
+ item = nxt
83
+ end
84
+
85
+ unless item.nil?
86
+ unless subdirs.last == item.text
87
+ new_item = self.appendItem(item, subdirs.last)#, @folderIcon, @folderIcon)
88
+ self.setItemData(new_item, result)
89
+ end
90
+ end
91
+
92
+ end
93
+
94
+ def initialize(parent)
95
+
96
+ @parent = parent
97
+ @quick_filter = Hash.new
98
+ @show_scope_only = false
99
+
100
+ @results = []
101
+
102
+ super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_RIGHT|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT)
103
+
104
+ @event_dispatcher_listeners = Hash.new
105
+
106
+ @projectIcon = ICON_PROJECT
107
+
108
+ @folderIcon = ICON_FOLDER
109
+ @reqIcon = ICON_REQUEST
110
+ @siteIcon= ICON_SITE
111
+
112
+ @filtered_domains = Hash.new # domains which already have been filtered
113
+
114
+ @tree_filters = {
115
+ :response_status => []
116
+ }
117
+
118
+ # session_leaf = self.appendItem(nil, @session_name, @projectIcon, @projectIcon)
119
+
120
+ self.connect(SEL_COMMAND) do |sender, sel, item|
121
+ url_parts = []
122
+ begin
123
+ if item.data.is_a? Hash
124
+ #if item.data.class.to_s =~ /Qchat/
125
+ #@interface.show_chat(item.data)
126
+ notify(:show_info, item.data)
127
+ end
128
+
129
+ rescue => bang
130
+ # puts bang
131
+ # puts bang.backtrace if $DEBUG
132
+ #puts "!!! Error: could not show selected tree item"
133
+ end
134
+
135
+ getApp().beginWaitCursor do
136
+ notify(:show_conversation, @quick_filter[item.object_id]) if @quick_filter[item.object_id]
137
+ end
138
+ end
139
+
140
+ self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
141
+ exclude_site = nil
142
+ unless event.moved?
143
+ FXMenuPane.new(self) do |menu_pane|
144
+
145
+ target = FXMenuCheck.new(menu_pane, "test" )
146
+
147
+ menu_pane.create
148
+ menu_pane.popup(nil, event.root_x, event.root_y)
149
+ app.runModalWhileShown(menu_pane)
150
+
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ private
157
+
158
+ def notify(event, *args)
159
+ if @event_dispatcher_listeners[event]
160
+ @event_dispatcher_listeners[event].each do |m|
161
+ m.call(*args) if m.respond_to? :call
162
+ end
163
+ end
164
+ end
165
+
166
+ end
167
+ # namespace end
168
+ end
169
+ end
170
+ end
171
+ end