watobo 0.9.8.677

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 (260) hide show
  1. data/bin/watobo_gui.rb +39 -0
  2. data/certificates/cert.pem +19 -0
  3. data/certificates/privkey.pem +15 -0
  4. data/certificates/watobo_dh.key +5 -0
  5. data/config/datastore.yml +5 -0
  6. data/config/forwarding_proxy.yml +12 -0
  7. data/config/general.yml +4 -0
  8. data/config/gui.yml +23 -0
  9. data/config/interceptor.yml +16 -0
  10. data/config/scan_policy.yml +13 -0
  11. data/config/scanner.yml +34 -0
  12. data/icons/Add.ico +0 -0
  13. data/icons/Add_24x24.ico +0 -0
  14. data/icons/Bandwidth.ico +0 -0
  15. data/icons/Bandwidth_24x24.ico +0 -0
  16. data/icons/Mr. Bomb.ico +0 -0
  17. data/icons/Mr. Bomb_16x16.ico +0 -0
  18. data/icons/Mr. Bomb_24x24.ico +0 -0
  19. data/icons/Orange Ball.ico +0 -0
  20. data/icons/Orange Ball_16x16.ico +0 -0
  21. data/icons/Orange Ball_24x24.ico +0 -0
  22. data/icons/Pause.ico +0 -0
  23. data/icons/Play.ico +0 -0
  24. data/icons/Play_24x24.ico +0 -0
  25. data/icons/Red Ball.ico +0 -0
  26. data/icons/Red Ball_16x16.ico +0 -0
  27. data/icons/Red Ball_24x24.ico +0 -0
  28. data/icons/Run.ico +0 -0
  29. data/icons/Stop.ico +0 -0
  30. data/icons/Stop_24x24.ico +0 -0
  31. data/icons/Terminal.ico +0 -0
  32. data/icons/Transfer.ico +0 -0
  33. data/icons/Transfer_16x16.ico +0 -0
  34. data/icons/User.ico +0 -0
  35. data/icons/User_16x16.ico +0 -0
  36. data/icons/User_24x24.ico +0 -0
  37. data/icons/Web Browser.ico +0 -0
  38. data/icons/Web Browser_16x16.ico +0 -0
  39. data/icons/Write Document.ico +0 -0
  40. data/icons/Yellow Ball.ico +0 -0
  41. data/icons/Yellow Ball_16x16.ico +0 -0
  42. data/icons/Yellow Ball_24x24.ico +0 -0
  43. data/icons/advanced.ico +0 -0
  44. data/icons/advanced_16x16.ico +0 -0
  45. data/icons/advanced_24x24.ico +0 -0
  46. data/icons/applications.ico +0 -0
  47. data/icons/applications_16x16.ico +0 -0
  48. data/icons/applications_24x24.ico +0 -0
  49. data/icons/browser_16x16.ico +0 -0
  50. data/icons/browser_24x24.ico +0 -0
  51. data/icons/burn.ico +0 -0
  52. data/icons/burn_16x16.ico +0 -0
  53. data/icons/burn_24x24.ico +0 -0
  54. data/icons/calculator.ico +0 -0
  55. data/icons/calculator_24x24.ico +0 -0
  56. data/icons/cb_checked.ico +0 -0
  57. data/icons/cb_checked_orange.ico +0 -0
  58. data/icons/cb_unchecked.ico +0 -0
  59. data/icons/coin_24x24.ico +0 -0
  60. data/icons/conversation.ico +0 -0
  61. data/icons/conversation_24x24.ico +0 -0
  62. data/icons/engine.ico +0 -0
  63. data/icons/filter.ico +0 -0
  64. data/icons/folder.ico +0 -0
  65. data/icons/folder_16x16.ico +0 -0
  66. data/icons/fuzzer_16x16.ico +0 -0
  67. data/icons/fuzzer_24x24.ico +0 -0
  68. data/icons/go-down_16x16.png +0 -0
  69. data/icons/go-up_16x16.png +0 -0
  70. data/icons/help.ico +0 -0
  71. data/icons/help_16x16.ico +0 -0
  72. data/icons/help_24x24.ico +0 -0
  73. data/icons/iChat.ico +0 -0
  74. data/icons/iChat_16x16.ico +0 -0
  75. data/icons/iChat_24x24.ico +0 -0
  76. data/icons/icons.txt +3 -0
  77. data/icons/info.ico +0 -0
  78. data/icons/info_16x16.ico +0 -0
  79. data/icons/info_24x24.ico +0 -0
  80. data/icons/interceptor_24x24.ico +0 -0
  81. data/icons/lock.ico +0 -0
  82. data/icons/lock_12x12.ico +0 -0
  83. data/icons/lock_16x16.ico +0 -0
  84. data/icons/monitor.ico +0 -0
  85. data/icons/plugin.ico +0 -0
  86. data/icons/plugin_24x24.ico +0 -0
  87. data/icons/scan_16x16.png +0 -0
  88. data/icons/send.ico +0 -0
  89. data/icons/server.ico +0 -0
  90. data/icons/server_16x16.ico +0 -0
  91. data/icons/siberas_logo_x24.gif +0 -0
  92. data/icons/tag_blue_32x32.ico +0 -0
  93. data/icons/watobo-48x48.png +0 -0
  94. data/icons/watobo-logo.png +0 -0
  95. data/icons/watobo.ico +0 -0
  96. data/lib/watobo/adapters/data_store.rb +38 -0
  97. data/lib/watobo/adapters/file/file_store.rb +211 -0
  98. data/lib/watobo/adapters/session_store.rb +27 -0
  99. data/lib/watobo/adapters.rb +26 -0
  100. data/lib/watobo/config.rb +143 -0
  101. data/lib/watobo/constants.rb +92 -0
  102. data/lib/watobo/core/active_check.rb +404 -0
  103. data/lib/watobo/core/cookie.rb +69 -0
  104. data/lib/watobo/core/fuzz_gen.rb +160 -0
  105. data/lib/watobo/core/http_socket.rb +142 -0
  106. data/lib/watobo/core/interceptor.rb +729 -0
  107. data/lib/watobo/core/passive_check.rb +141 -0
  108. data/lib/watobo/core/project.rb +1058 -0
  109. data/lib/watobo/core/scanner.rb +396 -0
  110. data/lib/watobo/core/session.rb +1320 -0
  111. data/lib/watobo/core/simple_ca.rb +393 -0
  112. data/lib/watobo/core.rb +34 -0
  113. data/lib/watobo/defaults.rb +40 -0
  114. data/lib/watobo/external/diff/lcs/array.rb +42 -0
  115. data/lib/watobo/external/diff/lcs/block.rb +72 -0
  116. data/lib/watobo/external/diff/lcs/callbacks.rb +343 -0
  117. data/lib/watobo/external/diff/lcs/change.rb +190 -0
  118. data/lib/watobo/external/diff/lcs/hunk.rb +279 -0
  119. data/lib/watobo/external/diff/lcs/ldiff.rb +247 -0
  120. data/lib/watobo/external/diff/lcs/string.rb +40 -0
  121. data/lib/watobo/external/diff/lcs.rb +1124 -0
  122. data/lib/watobo/external/ntlm/ntlm.rb +797 -0
  123. data/lib/watobo/externals.rb +28 -0
  124. data/lib/watobo/framework/create_project.rb +55 -0
  125. data/lib/watobo/framework/init.rb +149 -0
  126. data/lib/watobo/framework/init_modules.rb +116 -0
  127. data/lib/watobo/framework/license_text.rb +50 -0
  128. data/lib/watobo/framework.rb +26 -0
  129. data/lib/watobo/gui/about_watobo.rb +68 -0
  130. data/lib/watobo/gui/browser_preview.rb +460 -0
  131. data/lib/watobo/gui/certificate_dialog.rb +132 -0
  132. data/lib/watobo/gui/chat_diff.rb +415 -0
  133. data/lib/watobo/gui/chatviewer_frame.rb +427 -0
  134. data/lib/watobo/gui/checkboxtree.rb +221 -0
  135. data/lib/watobo/gui/checks_policy_frame.rb +123 -0
  136. data/lib/watobo/gui/client_cert_dialog.rb +227 -0
  137. data/lib/watobo/gui/confirm_scan_dialog.rb +67 -0
  138. data/lib/watobo/gui/conversation_table.rb +386 -0
  139. data/lib/watobo/gui/conversation_table_ctrl.rb +175 -0
  140. data/lib/watobo/gui/csrf_token_dialog.rb +446 -0
  141. data/lib/watobo/gui/dashboard.rb +341 -0
  142. data/lib/watobo/gui/define_scope_frame.rb +380 -0
  143. data/lib/watobo/gui/edit_comment.rb +70 -0
  144. data/lib/watobo/gui/edit_scope_dialog.rb +69 -0
  145. data/lib/watobo/gui/finding_info.rb +212 -0
  146. data/lib/watobo/gui/findings_tree.rb +459 -0
  147. data/lib/watobo/gui/full_scan_dialog.rb +269 -0
  148. data/lib/watobo/gui/fuzzer_gui.rb +1522 -0
  149. data/lib/watobo/gui/hex_viewer.rb +106 -0
  150. data/lib/watobo/gui/interceptor_gui.rb +994 -0
  151. data/lib/watobo/gui/interceptor_settings_dialog.rb +201 -0
  152. data/lib/watobo/gui/log_viewer.rb +97 -0
  153. data/lib/watobo/gui/login_wizzard.rb +301 -0
  154. data/lib/watobo/gui/main_window.rb +1815 -0
  155. data/lib/watobo/gui/manual_request_editor.rb +1105 -0
  156. data/lib/watobo/gui/master_pw_dialog.rb +142 -0
  157. data/lib/watobo/gui/password_policy_dialog.rb +98 -0
  158. data/lib/watobo/gui/plugin/base.rb +82 -0
  159. data/lib/watobo/gui/plugin_board.rb +95 -0
  160. data/lib/watobo/gui/preferences_dialog.rb +116 -0
  161. data/lib/watobo/gui/progress_window.rb +102 -0
  162. data/lib/watobo/gui/project_wizzard.rb +369 -0
  163. data/lib/watobo/gui/proxy_dialog.rb +550 -0
  164. data/lib/watobo/gui/quick_scan_dialog.rb +242 -0
  165. data/lib/watobo/gui/request_editor.rb +480 -0
  166. data/lib/watobo/gui/save_chat_dialog.rb +158 -0
  167. data/lib/watobo/gui/scanner_settings_dialog.rb +360 -0
  168. data/lib/watobo/gui/select_chat_dialog.rb +169 -0
  169. data/lib/watobo/gui/session_management_dialog.rb +688 -0
  170. data/lib/watobo/gui/sites_tree.rb +347 -0
  171. data/lib/watobo/gui/status_bar.rb +88 -0
  172. data/lib/watobo/gui/table_editor.rb +445 -0
  173. data/lib/watobo/gui/tagless_viewer.rb +62 -0
  174. data/lib/watobo/gui/templates/plugin.rb +80 -0
  175. data/lib/watobo/gui/templates/plugin2.rb +103 -0
  176. data/lib/watobo/gui/text_viewer.rb +247 -0
  177. data/lib/watobo/gui/transcoder_window.rb +215 -0
  178. data/lib/watobo/gui/utils/gui_utils.rb +129 -0
  179. data/lib/watobo/gui/utils/init_icons.rb +106 -0
  180. data/lib/watobo/gui/utils/load_icons.rb +54 -0
  181. data/lib/watobo/gui/utils/load_plugins.rb +94 -0
  182. data/lib/watobo/gui/utils/master_password.rb +90 -0
  183. data/lib/watobo/gui/utils/save_default_settings.rb +99 -0
  184. data/lib/watobo/gui/utils/save_project_settings.rb +21 -0
  185. data/lib/watobo/gui/utils/save_proxy_settings.rb +45 -0
  186. data/lib/watobo/gui/utils/save_session_settings.rb +21 -0
  187. data/lib/watobo/gui/utils/session_history.rb +134 -0
  188. data/lib/watobo/gui/workspace_dialog.rb +89 -0
  189. data/lib/watobo/gui/www_auth_dialog.rb +348 -0
  190. data/lib/watobo/gui/xml_viewer_frame.rb +114 -0
  191. data/lib/watobo/gui.rb +139 -0
  192. data/lib/watobo/mixins/httpparser.rb +664 -0
  193. data/lib/watobo/mixins/request_parser.rb +210 -0
  194. data/lib/watobo/mixins/shapers.rb +345 -0
  195. data/lib/watobo/mixins/transcoders.rb +88 -0
  196. data/lib/watobo/mixins.rb +32 -0
  197. data/lib/watobo/utils/check_regex.rb +36 -0
  198. data/lib/watobo/utils/copy_object.rb +29 -0
  199. data/lib/watobo/utils/crypto.rb +74 -0
  200. data/lib/watobo/utils/expand_range.rb +45 -0
  201. data/lib/watobo/utils/file_management.rb +73 -0
  202. data/lib/watobo/utils/load_chat.rb +219 -0
  203. data/lib/watobo/utils/load_icon.rb +47 -0
  204. data/lib/watobo/utils/print_debug.rb +34 -0
  205. data/lib/watobo/utils/response_hash.rb +143 -0
  206. data/lib/watobo/utils/secure_eval.rb +57 -0
  207. data/lib/watobo/utils/text2request.rb +96 -0
  208. data/lib/watobo/utils.rb +32 -0
  209. data/lib/watobo.rb +76 -0
  210. data/modules/active/Apache/mod_status.rb +123 -0
  211. data/modules/active/Flash/crossdomain.rb +102 -0
  212. data/modules/active/directories/dirwalker.rb +89 -0
  213. data/modules/active/discovery/fileextensions.rb +151 -0
  214. data/modules/active/discovery/http_methods.rb +135 -0
  215. data/modules/active/domino/domino_db.lst +164 -0
  216. data/modules/active/domino/domino_db.rb +128 -0
  217. data/modules/active/fileinclusion/lfi_simple.rb +134 -0
  218. data/modules/active/jboss/jboss_basic.rb +119 -0
  219. data/modules/active/sap/business_objects.rb +73 -0
  220. data/modules/active/sap/its_commands.rb +101 -0
  221. data/modules/active/sap/its_service_parameter.rb +105 -0
  222. data/modules/active/sap/its_services.rb +103 -0
  223. data/modules/active/sap/its_xss.rb +98 -0
  224. data/modules/active/sqlinjection/sql_boolean.rb +262 -0
  225. data/modules/active/sqlinjection/sqli_simple.rb +205 -0
  226. data/modules/active/xss/xss_simple.rb +179 -0
  227. data/modules/passive/cookie_options.rb +97 -0
  228. data/modules/passive/cookie_xss.rb +85 -0
  229. data/modules/passive/detect_code.rb +89 -0
  230. data/modules/passive/detect_fileupload.rb +80 -0
  231. data/modules/passive/detect_infrastructure.rb +98 -0
  232. data/modules/passive/detect_one_time_tokens.rb +86 -0
  233. data/modules/passive/dirindexing.rb +81 -0
  234. data/modules/passive/disclosure_emails.rb +82 -0
  235. data/modules/passive/disclosure_ipaddr.rb +87 -0
  236. data/modules/passive/filename_as_parameter.rb +85 -0
  237. data/modules/passive/form_spotter.rb +75 -0
  238. data/modules/passive/hotspots.rb +86 -0
  239. data/modules/passive/in_script_parameter.rb +92 -0
  240. data/modules/passive/multiple_server_headers.rb +98 -0
  241. data/modules/passive/possible_login.rb +134 -0
  242. data/modules/passive/redirect_url.rb +88 -0
  243. data/modules/passive/redirectionz.rb +96 -0
  244. data/modules/passive/xss_dom.rb +91 -0
  245. data/plugins/catalog/catalog.ico +0 -0
  246. data/plugins/catalog/catalog.rb +726 -0
  247. data/plugins/catalog/db_tests +6483 -0
  248. data/plugins/catalog/db_variables +29 -0
  249. data/plugins/filefinder/dbs/hbci.db +12 -0
  250. data/plugins/filefinder/filefinder.rb +602 -0
  251. data/plugins/sslchecker/cli/sslchecker_cli.rb +21 -0
  252. data/plugins/sslchecker/gui/cipher_table.rb +260 -0
  253. data/plugins/sslchecker/gui/gui.rb +245 -0
  254. data/plugins/sslchecker/gui/sslchecker.rb +26 -0
  255. data/plugins/sslchecker/icons/green_16x16.ico +0 -0
  256. data/plugins/sslchecker/icons/grey_16x16.ico +0 -0
  257. data/plugins/sslchecker/icons/red_16x16.ico +0 -0
  258. data/plugins/sslchecker/icons/sslchecker.ico +0 -0
  259. data/plugins/sslchecker/lib/check.rb +117 -0
  260. metadata +317 -0
@@ -0,0 +1,347 @@
1
+ # .
2
+ # sites_tree.rb
3
+ #
4
+ # Copyright 2012 by siberas, http://www.siberas.de
5
+ #
6
+ # This file is part of WATOBO (Web Application Tool Box)
7
+ # http://watobo.sourceforge.com
8
+ #
9
+ # WATOBO is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation version 2 of the License.
12
+ #
13
+ # WATOBO is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with WATOBO; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # .
22
+ #require 'qcustomize.rb'
23
+
24
+ module Watobo
25
+ module Gui
26
+ class SitesTree < FXTreeList
27
+ attr_accessor :project
28
+
29
+ include Watobo::Constants
30
+ include Watobo::Gui::Icons
31
+ def subscribe(event, &callback)
32
+ (@event_dispatcher_listeners[event] ||= []) << callback
33
+ end
34
+
35
+ def reload()
36
+ self.clearItems
37
+
38
+ @project.chats.each do |chat|
39
+ addChat(chat)
40
+ end
41
+
42
+ # @interface.updateRequestTable(@project)
43
+ end
44
+
45
+ def refresh_tree()
46
+ self.clearItems
47
+
48
+ @project.chats.each do |chat|
49
+ addChat(chat)
50
+ end
51
+
52
+ # @interface.updateRequestTable(@project)
53
+ end
54
+ def expandFullTree(item)
55
+ self.expandTree(item)
56
+ item.each do |c|
57
+ expandFullTree(c) if !self.itemLeaf?(c)
58
+ end
59
+ end
60
+
61
+ def useSmallIcons()
62
+ small_font = FXFont.new(getApp(), "helvetica", GUI_SMALL_FONT_SIZE)
63
+ small_font.create
64
+ @folderIcon = ICON_FOLDER_SMALL
65
+ @reqIcon = ICON_REQUEST_SMALL
66
+ @siteIcon= ICON_SITE_SMALL
67
+ self.font = small_font
68
+ reload()
69
+ end
70
+
71
+ def useRegularIcons()
72
+ regular_font = FXFont.new(getApp(), "helvetica", GUI_REGULAR_FONT_SIZE)
73
+ regular_font.create
74
+ # Findings Tree Icons
75
+ @folderIcon = ICON_FOLDER
76
+ @reqIcon = ICON_REQUEST
77
+ @siteIcon= ICON_SITE
78
+ self.font = regular_font
79
+ reload()
80
+ end
81
+
82
+ def collapseFullTree(item)
83
+ self.collapseTree(item)
84
+ item.each do |c|
85
+ collapseFullTree(c) if !self.itemLeaf?(c)
86
+ end
87
+ end
88
+
89
+ def hidden?(chat)
90
+
91
+ #TODO: Filter
92
+ false
93
+ end
94
+
95
+ def hideDomain(domain_filter)
96
+ # @interface.default_settings[:domain_filters].push domain_filter
97
+ # @interface.updateTreeLists()
98
+ end
99
+
100
+ def addChat(chat)
101
+ add_chat = true
102
+
103
+ add_chat = @project.siteInScope?(chat.request.site) if @show_scope_only == true
104
+ @tree_filters[:response_status].each do |rf|
105
+ #puts "#{chat.response.status} / #{rf}"
106
+ add_chat = false if chat.response.status =~ /#{rf}/
107
+ end
108
+
109
+ addChatItem(chat) if add_chat
110
+ end
111
+
112
+ # end
113
+ def addChatItem(chat)
114
+
115
+ site = self.findItem(chat.request.site, nil, SEARCH_FORWARD|SEARCH_IGNORECASE)
116
+
117
+ if not site then
118
+ # found new site
119
+ site = self.appendItem(nil, chat.request.site, @siteIcon, @siteIcon)
120
+ #site = @findings_tree.moveItem(project.first,project,site)
121
+ self.setItemData(site, :item_type_site)
122
+
123
+ end
124
+
125
+ @quick_filter[site.object_id] ||= []
126
+ @quick_filter[site.object_id].push chat
127
+
128
+ folder_parent = site
129
+ #puts "ADD_REQUEST: #{chat.request.first}"
130
+ dir = chat.request.dir
131
+
132
+ if dir != "" then
133
+ #puts "Check Folder: #{chat.request.path} - #{chat.request.site}" if path =~ /jump/
134
+ folders = dir.split('/')
135
+ folders.each do |folder_name|
136
+ # puts "search for folder #{folder_name}"
137
+ folder_item = nil
138
+ folder_parent.each do |c|
139
+ folder_item = c if c.to_s == folder_name
140
+ end
141
+ #folder_item = self.findItem(folder_name, folder_parent, SEARCH_FORWARD|SEARCH_WRAP)
142
+ if folder_item.nil? then
143
+ #folder_item = self.appendItem(folder_parent, folder_name, @folderIcon, @folderIcon)
144
+ folder_item = self.insertItem(folder_parent.first, folder_parent, folder_name, @folderIcon, @folderIcon)
145
+ self.setItemData(folder_item, :item_type_folder)
146
+
147
+ # puts "added folder #{folder_name} to #{folder_parent} for site #{chat.request.site}"
148
+ end
149
+ @quick_filter[folder_item.object_id] ||= []
150
+ @quick_filter[folder_item.object_id].push chat
151
+ folder_parent = folder_item
152
+ end
153
+ end
154
+ ml = 25
155
+ fext = chat.request.file_ext
156
+ element = "/" + fext.slice(0, ml)
157
+ element += "..." if fext.length > ml
158
+
159
+ item = nil
160
+ folder_parent.each do |c|
161
+ item = c if c.to_s == element
162
+ end
163
+
164
+ if item.nil?
165
+ # puts item.text.methods.sort
166
+
167
+ # puts "added file #{element} to #{folder_parent} for site #{chat.request.site}" if chat.request.url =~ /series60/i
168
+ new_item = self.appendItem(folder_parent, element, @reqIcon, @reqIcon)
169
+ # self.textColor = FXColor::Red
170
+ self.setItemData(new_item, chat)
171
+ @quick_filter[new_item.object_id] ||= []
172
+ #puts new_item.class
173
+ @quick_filter[new_item.object_id].push chat
174
+ end
175
+
176
+ end
177
+
178
+ def initialize(parent, interface, project)
179
+ @project = project
180
+ @interface = interface
181
+ @parent = parent
182
+ @quick_filter = Hash.new
183
+ @show_scope_only = false
184
+
185
+ super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_RIGHT|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT)
186
+
187
+ @event_dispatcher_listeners = Hash.new
188
+
189
+ @projectIcon = ICON_PROJECT
190
+
191
+ @folderIcon = ICON_FOLDER
192
+ @reqIcon = ICON_REQUEST
193
+ @siteIcon= ICON_SITE
194
+
195
+ @filtered_domains = Hash.new # domains which already have been filtered
196
+
197
+ @tree_filters = {
198
+ :response_status => []
199
+ }
200
+ # session_leaf = self.appendItem(nil, @session_name, @projectIcon, @projectIcon)
201
+
202
+ self.connect(SEL_COMMAND) do |sender, sel, item|
203
+ url_parts = []
204
+ # p = item
205
+ if self.itemLeaf?(item)
206
+ getApp().beginWaitCursor do
207
+ begin
208
+ if item.data
209
+ #if item.data.class.to_s =~ /Qchat/
210
+ #@interface.show_chat(item.data)
211
+ notify(:show_chat, item.data)
212
+ #end
213
+ chat = item.data
214
+ # url_parts.unshift chat.request.file_ext
215
+ # p = item.parent
216
+ end
217
+ rescue => bang
218
+ # puts bang
219
+ # puts bang.backtrace if $DEBUG
220
+ #puts "!!! Error: could not show selected tree item"
221
+ end
222
+ end
223
+ #elsif item.data == :item_type_folder||:item_type_site then
224
+ end
225
+ # if !p.nil?
226
+ # while p.parent
227
+ # url_parts.unshift p.text.sub(/^\//,'')
228
+ # p = p.parent
229
+ # end
230
+ #end
231
+ # url_parts.unshift p
232
+ # filter = url_parts.join("/")
233
+ # puts @quick_filter.keys.join("\n")
234
+ # puts "===="
235
+ # puts item
236
+ # puts "===="
237
+ notify(:show_conversation, @quick_filter[item.object_id]) if @quick_filter[item.object_id]
238
+ # notify(:apply_site_filter, filter)
239
+
240
+ end
241
+
242
+ self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
243
+ exclude_site = nil
244
+ unless event.moved?
245
+ FXMenuPane.new(self) do |menu_pane|
246
+
247
+ target = FXMenuCheck.new(menu_pane, "show scope only" )
248
+ target.check = @show_scope_only
249
+
250
+ target.connect(SEL_COMMAND) { |tsender, tsel, titem|
251
+ @show_scope_only = tsender.checked?
252
+ reload() if @project
253
+ }
254
+
255
+ exclude_submenu = FXMenuPane.new(self) do |sub|
256
+ ["404", "302"].each do |rc|
257
+ target = FXMenuCheck.new(sub, "#{rc} Status" )
258
+
259
+ target.check = @tree_filters[:response_status].include?(rc)
260
+
261
+ target.connect(SEL_COMMAND) {
262
+ status = target.to_s.slice(/\d+/)
263
+ if sender.checked?()
264
+ @tree_filters[:response_status].push status
265
+ else
266
+ @tree_filters[:response_status].delete(status)
267
+ end
268
+ reload() if @project
269
+ }
270
+ end
271
+ end
272
+ FXMenuCascade.new(menu_pane, "Hide", nil, exclude_submenu)
273
+
274
+ item = sender.getItemAt(event.win_x, event.win_y)
275
+
276
+ unless item.nil?
277
+
278
+ unless self.itemLeaf?(item)
279
+ FXMenuSeparator.new(menu_pane)
280
+ FXMenuCommand.new(menu_pane, "expand tree" ).connect(SEL_COMMAND) {
281
+ expandFullTree(item)
282
+ }
283
+
284
+ FXMenuCommand.new(menu_pane, "collapse tree" ).connect(SEL_COMMAND) {
285
+ self.collapseFullTree(item)
286
+ }
287
+
288
+ end
289
+
290
+ data = self.getItemData(item)
291
+
292
+ if data == :item_type_site then
293
+ FXMenuSeparator.new(menu_pane)
294
+
295
+ FXMenuCommand.new(menu_pane, "add site to scope" ).connect(SEL_COMMAND) {
296
+
297
+ notify(:add_site_to_scope, item.to_s)
298
+ }
299
+
300
+ elsif data.is_a? Watobo::Chat
301
+
302
+ FXMenuSeparator.new(menu_pane)
303
+ doManual = FXMenuCommand.new(menu_pane, "Manual Request.." )
304
+
305
+ doManual.connect(SEL_COMMAND) {
306
+ if item.data
307
+ @interface.open_manual_request_editor(item.data)
308
+ end
309
+
310
+ }
311
+ end
312
+ # submenu = FXMenuPane.new(self) do |domain_menu|
313
+
314
+ # @filtered_domains.each do |domain, filter|
315
+ # hide_domain = FXMenuCommand.new(domain_menu, "#{domain}" )
316
+ # hide_domain.connect(SEL_COMMAND) {
317
+ # @interface.default_settings[:domain_filters].delete(filter)
318
+ # @filtered_domains.clear
319
+ # @interface.updateTreeLists
320
+ # }
321
+ # end
322
+ # end
323
+ # FXMenuCascade.new(menu_pane, "Unhide Domains", nil, submenu)
324
+
325
+ end
326
+ menu_pane.create
327
+ menu_pane.popup(nil, event.root_x, event.root_y)
328
+ app.runModalWhileShown(menu_pane)
329
+
330
+ end
331
+ end
332
+ end
333
+ end
334
+
335
+ private
336
+
337
+ def notify(event, *args)
338
+ if @event_dispatcher_listeners[event]
339
+ @event_dispatcher_listeners[event].each do |m|
340
+ m.call(*args) if m.respond_to? :call
341
+ end
342
+ end
343
+ end
344
+ end
345
+ # namespace end
346
+ end
347
+ end
@@ -0,0 +1,88 @@
1
+ # .
2
+ # status_bar.rb
3
+ #
4
+ # Copyright 2012 by siberas, http://www.siberas.de
5
+ #
6
+ # This file is part of WATOBO (Web Application Tool Box)
7
+ # http://watobo.sourceforge.com
8
+ #
9
+ # WATOBO is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation version 2 of the License.
12
+ #
13
+ # WATOBO is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with WATOBO; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # .
22
+ module Watobo
23
+ module Gui
24
+ class StatusBar < FXHorizontalFrame
25
+
26
+ def setStatusInfo( prefs={} )
27
+ cprefs = {
28
+ :color => self.parent.backColor,
29
+ :text => ''
30
+ }
31
+
32
+ cprefs.update prefs unless prefs.nil?
33
+
34
+ @statusInfo.text = cprefs[:text]
35
+ unless cprefs[:color].nil?
36
+ @statusInfo.backColor = cprefs[:color]
37
+ end
38
+ end
39
+
40
+ def statusInfoText=( new_text )
41
+ @statusInfo.text = new_text
42
+ @statusInfo.backColor = self.parent.backColor
43
+ end
44
+
45
+ def projectName=(project_name)
46
+ @projectName.text = project_name
47
+ end
48
+
49
+ def sessionName=(session_name)
50
+ @sessionName.text = session_name
51
+ end
52
+
53
+ def portNumber=(port_number)
54
+ @portNumber.text = port_number
55
+ end
56
+
57
+ def forwardingProxy=(forward_proxy)
58
+ @forwardingProxy.text = forward_proxy
59
+ end
60
+
61
+
62
+ def initialize(owner, opts)
63
+ super(owner, opts)
64
+
65
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_SUNKEN, :padding => 0)
66
+ FXLabel.new(frame, "Status: ")
67
+ @statusInfo = FXLabel.new(frame, "- no project started -")
68
+
69
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_SUNKEN, :padding => 0)
70
+ FXLabel.new(frame, "Project: ")
71
+ @projectName = FXLabel.new(frame, " - ")
72
+
73
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_SUNKEN, :padding => 0)
74
+ FXLabel.new(frame, "Session: ")
75
+ @sessionName = FXLabel.new(frame, " - ")
76
+
77
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_SUNKEN, :padding => 0)
78
+ FXLabel.new(frame, "Port: ")
79
+ @portNumber = FXLabel.new(frame, " - ")
80
+
81
+ frame = FXHorizontalFrame.new(self, :opts => FRAME_SUNKEN, :padding => 0)
82
+ FXLabel.new(frame, "Forwarding Proxy: ")
83
+ @forwardingProxy = FXLabel.new(frame, " - ")
84
+ end
85
+ end
86
+ # class end
87
+ end
88
+ end