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
- # master_pw_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
2
  module Watobo#:nodoc: all
12
3
  module Gui
@@ -1,40 +1,31 @@
1
- #.
2
- # gui_settings.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
- module Settings
14
- def self.save_gui_settings(settings)
15
- wd = Watobo.working_directory
16
-
17
- dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
18
- path = File.join(wd, "conf", "gui")
19
- Dir.mkdir path unless File.exist? path
20
- conf_dir = File.join(path, dir_name)
21
- Dir.mkdir conf_dir unless File.exist? conf_dir
22
- file = File.join(conf_dir, dir_name + "_settings.yml")
23
-
24
- Watobo::Utils.save_settings(file, config)
25
- end
26
-
27
- def load_gui_settings()
28
- wd = Watobo.working_directory
29
- dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
30
- path = File.join(wd, "conf", "gui")
31
- Dir.mkdir path unless File.exist? path
32
- conf_dir = File.join(path, dir_name)
33
- Dir.mkdir conf_dir unless File.exist? conf_dir
34
- file = File.join(conf_dir, dir_name + "_settings.yml")
35
- config = Watobo::Utils.load_settings(file)
36
- config
37
- end
38
- end
39
- end
2
+ module Watobo#:nodoc: all
3
+ module Gui
4
+ module Settings
5
+ def self.save_gui_settings(settings)
6
+ wd = Watobo.working_directory
7
+
8
+ dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
9
+ path = File.join(wd, "conf", "gui")
10
+ Dir.mkdir path unless File.exist? path
11
+ conf_dir = File.join(path, dir_name)
12
+ Dir.mkdir conf_dir unless File.exist? conf_dir
13
+ file = File.join(conf_dir, dir_name + "_settings.yml")
14
+
15
+ Watobo::Utils.save_settings(file, config)
16
+ end
17
+
18
+ def load_gui_settings()
19
+ wd = Watobo.working_directory
20
+ dir_name = Watobo::Utils.snakecase self.class.to_s.gsub(/.*::/,'')
21
+ path = File.join(wd, "conf", "gui")
22
+ Dir.mkdir path unless File.exist? path
23
+ conf_dir = File.join(path, dir_name)
24
+ Dir.mkdir conf_dir unless File.exist? conf_dir
25
+ file = File.join(conf_dir, dir_name + "_settings.yml")
26
+ config = Watobo::Utils.load_settings(file)
27
+ config
28
+ end
29
+ end
30
+ end
40
31
  end
@@ -1,227 +1,218 @@
1
- #.
2
- # page_tree.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
-
1
+ #require 'qcustomize.rb'
2
+
12
3
  # @private
13
- module Watobo#:nodoc: all
14
- module Gui
15
- class PageTree < FXTreeList
16
-
17
- attr :page
18
-
19
- include Watobo::Constants
20
- include Watobo::Gui::Icons
21
- def subscribe(event, &callback)
22
- (@event_dispatcher_listeners[event] ||= []) << callback
23
- end
24
-
25
- def reload()
26
- self.clearItems
27
-
28
- # @interface.updateRequestTable(@project)
29
- end
30
-
31
- def page=(p)
32
- @page = p
33
- refresh_tree
34
- end
35
-
36
- def refresh_tree()
37
- self.clearItems
38
- unless @page.nil?
39
- if page.forms.length > 0
40
- page.forms.each do |f|
41
- add_form_item f
42
- end
43
- else
44
- self.appendItem(nil, "Forms ()", nil, nil)
45
- end
46
- end
47
- # @interface.updateRequestTable(@project)
48
- end
49
-
50
- def expandFullTree(item)
51
- self.expandTree(item)
52
- item.each do |c|
53
- expandFullTree(c) if !self.itemLeaf?(c)
54
- end
55
- end
56
-
57
- def collapseFullTree(item)
58
- self.collapseTree(item)
59
- item.each do |c|
60
- collapseFullTree(c) if !self.itemLeaf?(c)
61
- end
62
- end
63
-
64
- def hidden?(chat)
65
-
66
- #TODO: Filter
67
- false
68
- end
69
-
70
- def initialize(parent, page=nil, prefs={})
71
- @page = page
72
- @quick_filter = Hash.new
73
- opts = LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT
74
- opts = prefs[:opts] if prefs.has_key? :opts
75
- super(parent, :opts => opts)
76
- @event_dispatcher_listeners = Hash.new
77
- @filters = {
78
- :element => []
79
- }
80
-
81
- forms = self.appendItem(nil, "load a new page first!", nil, nil)
82
-
83
- self.connect(SEL_COMMAND) do |sender, sel, item|
84
-
85
- if item.data.is_a? Mechanize::Form
86
- puts "Form Selected"
87
- notify(:form_selected, item.data)
88
- elsif item.data.is_a? Mechanize::Form::Field
89
- puts "Field Selected"
90
- notify(:form_selected, item.parent.data)
91
- notify(:field_selected, item)
92
- end
93
-
94
- end
95
-
96
- self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
97
- exclude_site = nil
98
- unless event.moved?
99
- FXMenuPane.new(self) do |menu_pane|
100
-
101
- #
102
- item = sender.getItemAt(event.win_x, event.win_y)
103
-
104
- unless item.nil?
105
-
106
- unless self.itemLeaf?(item)
107
- FXMenuSeparator.new(menu_pane)
108
- FXMenuCommand.new(menu_pane, "expand tree" ).connect(SEL_COMMAND) {
109
- expandFullTree(item)
110
- }
111
-
112
- FXMenuCommand.new(menu_pane, "collapse tree" ).connect(SEL_COMMAND) {
113
- self.collapseFullTree(item)
114
- }
115
-
116
- end
117
-
118
- data = self.getItemData(item)
119
-
120
- if item == "Forms" then
121
- puts "Right Click Forms"
122
- FXMenuSeparator.new(menu_pane)
123
-
124
- FXMenuCommand.new(menu_pane, "found Form Item" ).connect(SEL_COMMAND) {
125
-
126
- notify(:add_site_to_scope, item.to_s)
127
- }
128
- else
129
- puts "Didn't click Forms"
130
-
131
- end
132
- # submenu = FXMenuPane.new(self) do |domain_menu|
133
-
134
- # @filtered_domains.each do |domain, filter|
135
- # hide_domain = FXMenuCommand.new(domain_menu, "#{domain}" )
136
- # hide_domain.connect(SEL_COMMAND) {
137
- # @interface.default_settings[:domain_filters].delete(filter)
138
- # @filtered_domains.clear
139
- # @interface.updateTreeLists
140
- # }
141
- # end
142
- # end
143
- # FXMenuCascade.new(menu_pane, "Unhide Domains", nil, submenu)
144
-
145
- end
146
- menu_pane.create
147
- menu_pane.popup(nil, event.root_x, event.root_y)
148
- app.runModalWhileShown(menu_pane)
149
-
150
- end
151
- end
152
- end
153
- end
154
-
155
- private
156
-
157
- def get_node_class(name)
158
- return nil if name.nil?
159
- return nil if name.empty?
160
- puts "get_node_class #{name}"
161
-
162
- ccname = Watobo::Utils.camelcase(name)
163
- nc = nil
164
- unless Watobo::Gui::PageTree.const_defined? ccname
165
- puts "Creating new class #{ccname}"
166
- Watobo::Gui::PageTree.class_eval("class #{ccname};end")
167
- nc = Watobo::Gui::PageTree.const_get(ccname)
168
- else
169
- puts "Get existing class #{ccname}"
170
- nc = Watobo::Gui::PageTree.const_get(ccname)
171
- end
172
- puts nc.name
173
- nc
174
- end
175
-
176
- def add_form_item(form)
177
-
178
- node_name = "Forms"
179
- #nc = get_node_class node_name
180
- # form_item = self.findItem(node_name, nil, SEARCH_FORWARD|SEARCH_IGNORECASE)
181
- form_item = self.findItemByData(node_name.to_sym, nil, SEARCH_FORWARD)
182
-
183
-
184
- if form_item.nil?
185
- # found new site
186
- form_item = self.appendItem(nil, node_name, nil, nil)
187
- #site = @findings_tree.moveItem(project.first,project,site)
188
- self.setItemData(form_item, node_name.to_sym)
189
- end
190
-
191
- form_name_item = nil
192
- name = "undefined"
193
- unless form.name.nil?
194
- name = form.name unless form.name.empty?
195
- end
196
- form_name_item = self.appendItem(form_item, name, nil, nil)
197
-
198
- unless form_name_item.nil?
199
- self.setItemData(form_name_item, form)
200
- form.fields.each do |ff|
201
- form_field_item = self.appendItem(form_name_item, ff.name, nil, nil)
202
- self.setItemData(form_field_item, ff)
203
-
204
- end
205
- form.buttons.each do |fb|
206
- form_field_item = self.appendItem(form_name_item, fb.name, nil, nil)
207
- self.setItemData(form_field_item, fb)
208
- end
209
- end
210
-
211
- unless form_item.nil?
212
- form_item.text = "#{node_name} (#{form_item.numChildren})"
213
- end
214
-
215
- end
216
-
217
- def notify(event, *args)
218
- if @event_dispatcher_listeners[event]
219
- @event_dispatcher_listeners[event].each do |m|
220
- m.call(*args) if m.respond_to? :call
221
- end
222
- end
223
- end
224
- end
225
- # namespace end
226
- end
227
- end
4
+ module Watobo#:nodoc: all
5
+ module Gui
6
+ class PageTree < FXTreeList
7
+
8
+ attr :page
9
+
10
+ include Watobo::Constants
11
+ include Watobo::Gui::Icons
12
+ def subscribe(event, &callback)
13
+ (@event_dispatcher_listeners[event] ||= []) << callback
14
+ end
15
+
16
+ def reload()
17
+ self.clearItems
18
+
19
+ # @interface.updateRequestTable(@project)
20
+ end
21
+
22
+ def page=(p)
23
+ @page = p
24
+ refresh_tree
25
+ end
26
+
27
+ def refresh_tree()
28
+ self.clearItems
29
+ unless @page.nil?
30
+ if page.forms.length > 0
31
+ page.forms.each do |f|
32
+ add_form_item f
33
+ end
34
+ else
35
+ self.appendItem(nil, "Forms ()", nil, nil)
36
+ end
37
+ end
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
+ def hidden?(chat)
56
+
57
+ #TODO: Filter
58
+ false
59
+ end
60
+
61
+ def initialize(parent, page=nil, prefs={})
62
+ @page = page
63
+ @quick_filter = Hash.new
64
+ opts = LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|TREELIST_ROOT_BOXES|TREELIST_EXTENDEDSELECT
65
+ opts = prefs[:opts] if prefs.has_key? :opts
66
+ super(parent, :opts => opts)
67
+ @event_dispatcher_listeners = Hash.new
68
+ @filters = {
69
+ :element => []
70
+ }
71
+
72
+ forms = self.appendItem(nil, "load a new page first!", nil, nil)
73
+
74
+ self.connect(SEL_COMMAND) do |sender, sel, item|
75
+
76
+ if item.data.is_a? Mechanize::Form
77
+ puts "Form Selected"
78
+ notify(:form_selected, item.data)
79
+ elsif item.data.is_a? Mechanize::Form::Field
80
+ puts "Field Selected"
81
+ notify(:form_selected, item.parent.data)
82
+ notify(:field_selected, item)
83
+ end
84
+
85
+ end
86
+
87
+ self.connect(SEL_RIGHTBUTTONRELEASE) do |sender, sel, event|
88
+ exclude_site = nil
89
+ unless event.moved?
90
+ FXMenuPane.new(self) do |menu_pane|
91
+
92
+ #
93
+ item = sender.getItemAt(event.win_x, event.win_y)
94
+
95
+ unless item.nil?
96
+
97
+ unless self.itemLeaf?(item)
98
+ FXMenuSeparator.new(menu_pane)
99
+ FXMenuCommand.new(menu_pane, "expand tree" ).connect(SEL_COMMAND) {
100
+ expandFullTree(item)
101
+ }
102
+
103
+ FXMenuCommand.new(menu_pane, "collapse tree" ).connect(SEL_COMMAND) {
104
+ self.collapseFullTree(item)
105
+ }
106
+
107
+ end
108
+
109
+ data = self.getItemData(item)
110
+
111
+ if item == "Forms" then
112
+ puts "Right Click Forms"
113
+ FXMenuSeparator.new(menu_pane)
114
+
115
+ FXMenuCommand.new(menu_pane, "found Form Item" ).connect(SEL_COMMAND) {
116
+
117
+ notify(:add_site_to_scope, item.to_s)
118
+ }
119
+ else
120
+ puts "Didn't click Forms"
121
+
122
+ end
123
+ # submenu = FXMenuPane.new(self) do |domain_menu|
124
+
125
+ # @filtered_domains.each do |domain, filter|
126
+ # hide_domain = FXMenuCommand.new(domain_menu, "#{domain}" )
127
+ # hide_domain.connect(SEL_COMMAND) {
128
+ # @interface.default_settings[:domain_filters].delete(filter)
129
+ # @filtered_domains.clear
130
+ # @interface.updateTreeLists
131
+ # }
132
+ # end
133
+ # end
134
+ # FXMenuCascade.new(menu_pane, "Unhide Domains", nil, submenu)
135
+
136
+ end
137
+ menu_pane.create
138
+ menu_pane.popup(nil, event.root_x, event.root_y)
139
+ app.runModalWhileShown(menu_pane)
140
+
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ private
147
+
148
+ def get_node_class(name)
149
+ return nil if name.nil?
150
+ return nil if name.empty?
151
+ puts "get_node_class #{name}"
152
+
153
+ ccname = Watobo::Utils.camelcase(name)
154
+ nc = nil
155
+ unless Watobo::Gui::PageTree.const_defined? ccname
156
+ puts "Creating new class #{ccname}"
157
+ Watobo::Gui::PageTree.class_eval("class #{ccname};end")
158
+ nc = Watobo::Gui::PageTree.const_get(ccname)
159
+ else
160
+ puts "Get existing class #{ccname}"
161
+ nc = Watobo::Gui::PageTree.const_get(ccname)
162
+ end
163
+ puts nc.name
164
+ nc
165
+ end
166
+
167
+ def add_form_item(form)
168
+
169
+ node_name = "Forms"
170
+ #nc = get_node_class node_name
171
+ # form_item = self.findItem(node_name, nil, SEARCH_FORWARD|SEARCH_IGNORECASE)
172
+ form_item = self.findItemByData(node_name.to_sym, nil, SEARCH_FORWARD)
173
+
174
+
175
+ if form_item.nil?
176
+ # found new site
177
+ form_item = self.appendItem(nil, node_name, nil, nil)
178
+ #site = @findings_tree.moveItem(project.first,project,site)
179
+ self.setItemData(form_item, node_name.to_sym)
180
+ end
181
+
182
+ form_name_item = nil
183
+ name = "undefined"
184
+ unless form.name.nil?
185
+ name = form.name unless form.name.empty?
186
+ end
187
+ form_name_item = self.appendItem(form_item, name, nil, nil)
188
+
189
+ unless form_name_item.nil?
190
+ self.setItemData(form_name_item, form)
191
+ form.fields.each do |ff|
192
+ form_field_item = self.appendItem(form_name_item, ff.name, nil, nil)
193
+ self.setItemData(form_field_item, ff)
194
+
195
+ end
196
+ form.buttons.each do |fb|
197
+ form_field_item = self.appendItem(form_name_item, fb.name, nil, nil)
198
+ self.setItemData(form_field_item, fb)
199
+ end
200
+ end
201
+
202
+ unless form_item.nil?
203
+ form_item.text = "#{node_name} (#{form_item.numChildren})"
204
+ end
205
+
206
+ end
207
+
208
+ def notify(event, *args)
209
+ if @event_dispatcher_listeners[event]
210
+ @event_dispatcher_listeners[event].each do |m|
211
+ m.call(*args) if m.respond_to? :call
212
+ end
213
+ end
214
+ end
215
+ end
216
+ # namespace end
217
+ end
218
+ end