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,108 +1,99 @@
1
- #.
2
- # options_frame.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
- module Watobo#:nodoc: all
12
- module Plugin
13
- class Sqlmap
14
- class OptionsFrame < FXVerticalFrame
15
- def to_h
16
-
17
- end
18
-
19
- def set(settings)
20
-
21
- end
22
-
23
- def request=(req)
24
- @request_txt.text = req.join.gsub("\r",'')
25
- end
26
-
27
- def request
28
- @request_txt.to_s
29
- end
30
-
31
- def level
32
- @level_combo.getItemData(@level_combo.currentItem)
33
- end
34
-
35
- def risk
36
- @risk_combo.getItemData(@risk_combo.currentItem)
37
- end
38
-
39
- def technique
40
- return "BEUST" if @technique_combo.currentItem == 0
41
- @technique_combo.getItemData(@technique_combo.currentItem)
42
- end
43
-
44
- def manual_options
45
- "#{@manual_options_txt.text.strip}"
46
- end
47
-
48
- def initialize(owner, opts)
49
- super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
50
-
51
- self.extend Watobo::Subscriber
52
-
53
- groupbox = FXGroupBox.new(self, "Request", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X, 0, 0, 0, 0)
54
- FXLabel.new(groupbox, "Enter a test request below or use 'SEND TO -> SQLMap' from the conversation-table menu (right-click).")
55
- frame = FXVerticalFrame.new(groupbox, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
56
-
57
- @request_txt = FXText.new(frame, nil, 0, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
58
- @request_txt.editable = true
59
- @request_txt.connect(SEL_CHANGED){ notify(:request_changed) }
60
-
61
-
62
- matrix = FXMatrix.new(self, 6, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
63
-
64
- techniques = %w( All Time-based Error Boolean Union Stacked )
65
- FXLabel.new(matrix, "Technique:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
66
- @technique_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
67
- techniques.each do |t|
68
- @technique_combo.appendItem(t, t[0])
69
- @technique_combo.numVisible = @technique_combo.numItems
70
- end
71
-
72
- #dbs = %w( MySQL Oracle PostgreSQL )
73
- #FXLabel.new(matrix, "DB:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
74
- #@db_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
75
- #dbs.each do |t|
76
- # @db_combo.appendItem(t, t[0])
77
- # @db_combo.numVisible = @db_combo.numItems
78
- #end
79
-
80
- risks = %w( 1 2 3 )
81
- FXLabel.new(matrix, "Risk:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
82
- @risk_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
83
- risks.each do |r|
84
- @risk_combo.appendItem(r, r)
85
- @risk_combo.numVisible = @risk_combo.numItems
86
- end
87
-
88
- levels = (1..5)
89
- FXLabel.new(matrix, "Level:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
90
- @level_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
91
- levels.each do |l|
92
- @level_combo.appendItem(l.to_s, l.to_s)
93
- @level_combo.numVisible = @level_combo.numItems
94
- end
95
-
96
- frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_TOP)
97
- FXLabel.new(frame, "Manual Options:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
98
- @manual_options_txt = FXTextField.new(frame, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
99
-
100
-
101
- end
102
-
103
- private
104
-
105
- end
106
- end
107
- end
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ class Sqlmap
5
+ class OptionsFrame < FXVerticalFrame
6
+ def to_h
7
+
8
+ end
9
+
10
+ def set(settings)
11
+
12
+ end
13
+
14
+ def request=(req)
15
+ @request_txt.text = req.join.gsub("\r",'')
16
+ end
17
+
18
+ def request
19
+ @request_txt.to_s
20
+ end
21
+
22
+ def level
23
+ @level_combo.getItemData(@level_combo.currentItem)
24
+ end
25
+
26
+ def risk
27
+ @risk_combo.getItemData(@risk_combo.currentItem)
28
+ end
29
+
30
+ def technique
31
+ return "BEUST" if @technique_combo.currentItem == 0
32
+ @technique_combo.getItemData(@technique_combo.currentItem)
33
+ end
34
+
35
+ def manual_options
36
+ "#{@manual_options_txt.text.strip}"
37
+ end
38
+
39
+ def initialize(owner, opts)
40
+ super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
41
+
42
+ self.extend Watobo::Subscriber
43
+
44
+ groupbox = FXGroupBox.new(self, "Request", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X, 0, 0, 0, 0)
45
+ FXLabel.new(groupbox, "Enter a test request below or use 'SEND TO -> SQLMap' from the conversation-table menu (right-click).")
46
+ frame = FXVerticalFrame.new(groupbox, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
47
+
48
+ @request_txt = FXText.new(frame, nil, 0, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
49
+ @request_txt.editable = true
50
+ @request_txt.connect(SEL_CHANGED){ notify(:request_changed) }
51
+
52
+
53
+ matrix = FXMatrix.new(self, 6, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
54
+
55
+ techniques = %w( All Time-based Error Boolean Union Stacked )
56
+ FXLabel.new(matrix, "Technique:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
57
+ @technique_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
58
+ techniques.each do |t|
59
+ @technique_combo.appendItem(t, t[0])
60
+ @technique_combo.numVisible = @technique_combo.numItems
61
+ end
62
+
63
+ #dbs = %w( MySQL Oracle PostgreSQL )
64
+ #FXLabel.new(matrix, "DB:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
65
+ #@db_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
66
+ #dbs.each do |t|
67
+ # @db_combo.appendItem(t, t[0])
68
+ # @db_combo.numVisible = @db_combo.numItems
69
+ #end
70
+
71
+ risks = %w( 1 2 3 )
72
+ FXLabel.new(matrix, "Risk:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
73
+ @risk_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
74
+ risks.each do |r|
75
+ @risk_combo.appendItem(r, r)
76
+ @risk_combo.numVisible = @risk_combo.numItems
77
+ end
78
+
79
+ levels = (1..5)
80
+ FXLabel.new(matrix, "Level:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
81
+ @level_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
82
+ levels.each do |l|
83
+ @level_combo.appendItem(l.to_s, l.to_s)
84
+ @level_combo.numVisible = @level_combo.numItems
85
+ end
86
+
87
+ frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_TOP)
88
+ FXLabel.new(frame, "Manual Options:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
89
+ @manual_options_txt = FXTextField.new(frame, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
90
+
91
+
92
+ end
93
+
94
+ private
95
+
96
+ end
97
+ end
98
+ end
108
99
  end
@@ -1,107 +1,97 @@
1
- #.
2
- # sqlmap_ctrl.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 Plugin
13
- class Sqlmap
14
- @well_known_paths = [
15
- "/pentest/database/sqlmap/", # BackTrack
16
- "/usr/share/sqlmap/" # Kali Linux, Samurai WTF
17
- ]
18
- @binary_path = ''
19
- @command = ""
20
- @tmp_dir = nil
21
- # set sqlmap binary path, leave it empty to check well-know-locaitons
22
- # it returns the path if any or an empty string
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ class Sqlmap
5
+ @well_known_paths = [
6
+ "/pentest/database/sqlmap/", # BackTrack
7
+ "/usr/share/sqlmap/" # Kali Linux, Samurai WTF
8
+ ]
9
+ @binary_path = ''
10
+ @command = ""
11
+ @tmp_dir = nil
12
+ # set sqlmap binary path, leave it empty to check well-know-locaitons
13
+ # it returns the path if any or an empty string
23
14
  def self.set_binary_path(path=nil)
24
15
  search_paths = @well_known_paths
25
- search_paths = [ path ] unless path.nil?
16
+ search_paths = [ path ] unless path.nil?
26
17
  @binary_path = ""
27
-
18
+
28
19
  [ "sqlmap.py",
29
20
  "sqlmap" # on some distributions no .py extension, e.g. kali linux
30
21
  ].each do |binary_name|
31
- search_paths.each do |p|
32
- bp = File.join(p, binary_name)
33
- if File.exist? bp
34
- @binary_path = bp
35
- break
36
- end
37
- end
38
- end
39
- save_config
40
-
41
- @binary_path
42
- end
43
-
44
- def self.method_missing(name, *args, &block)
45
- iv_name = "@#{name}"
46
- super unless instance_variable_defined? iv_name
47
-
48
- v = instance_variable_get(iv_name)
49
- end
50
-
51
- def self.set_tmp_dir(dir=nil)
52
- # get project path
53
- if dir.nil?
54
- @tmp_dir = File.join(Watobo.temp_directory,"sqlmap")
55
- Dir.mkdir @tmp_dir unless File.exist? @tmp_dir
56
- else
57
- @tmp_dir = dir if File.exist? dir
58
- end
59
- save_config
60
- @tmp_dir
61
- end
62
-
63
- def self.run(request, opts)
64
-
65
- end
66
-
67
- def self.save_config()
68
- wd = Watobo.working_directory
69
-
70
- dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
71
- path = File.join(wd, "conf", "plugins")
72
- Dir.mkdir path unless File.exist? path
73
- conf_dir = File.join(path, dir_name)
74
- Dir.mkdir conf_dir unless File.exist? conf_dir
75
- file = File.join(conf_dir, dir_name + "_config.yml")
76
- config = {
77
- :tmp_dir => @tmp_dir,
78
- :binary_path => @binary_path
79
- }
80
- Watobo::Utils.save_settings(file, config)
81
- end
82
-
83
- def self.load_config()
84
- wd = Watobo.working_directory
85
- dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
86
- path = File.join(wd, "conf", "plugins")
87
- Dir.mkdir path unless File.exist? path
88
- conf_dir = File.join(path, dir_name)
89
- Dir.mkdir conf_dir unless File.exist? conf_dir
90
- file = File.join(conf_dir, dir_name + "_config.yml")
91
- config = Watobo::Utils.load_settings(file)
92
- end
93
-
94
- # set default values
95
- config = load_config
96
- puts config.class
97
- unless config.nil?
98
- set_binary_path config[:binary_path]
99
- set_tmp_dir config[:tmp_dir]
100
- else
101
- set_binary_path
102
- set_tmp_dir
103
- end
104
-
105
- end
106
- end
107
- end
22
+ search_paths.each do |p|
23
+ bp = File.join(p, binary_name)
24
+ if File.exist? bp
25
+ @binary_path = bp
26
+ break
27
+ end
28
+ end
29
+ end
30
+ save_config
31
+
32
+ @binary_path
33
+ end
34
+
35
+ def self.method_missing(name, *args, &block)
36
+ iv_name = "@#{name}"
37
+ super unless instance_variable_defined? iv_name
38
+
39
+ v = instance_variable_get(iv_name)
40
+ end
41
+
42
+ def self.set_tmp_dir(dir=nil)
43
+ # get project path
44
+ if dir.nil?
45
+ @tmp_dir = File.join(Watobo.temp_directory,"sqlmap")
46
+ Dir.mkdir @tmp_dir unless File.exist? @tmp_dir
47
+ else
48
+ @tmp_dir = dir if File.exist? dir
49
+ end
50
+ save_config
51
+ @tmp_dir
52
+ end
53
+
54
+ def self.run(request, opts)
55
+
56
+ end
57
+
58
+ def self.save_config()
59
+ wd = Watobo.working_directory
60
+
61
+ dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
62
+ path = File.join(wd, "conf", "plugins")
63
+ Dir.mkdir path unless File.exist? path
64
+ conf_dir = File.join(path, dir_name)
65
+ Dir.mkdir conf_dir unless File.exist? conf_dir
66
+ file = File.join(conf_dir, dir_name + "_config.yml")
67
+ config = {
68
+ :tmp_dir => @tmp_dir,
69
+ :binary_path => @binary_path
70
+ }
71
+ Watobo::Utils.save_settings(file, config)
72
+ end
73
+
74
+ def self.load_config()
75
+ wd = Watobo.working_directory
76
+ dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
77
+ path = File.join(wd, "conf", "plugins")
78
+ Dir.mkdir path unless File.exist? path
79
+ conf_dir = File.join(path, dir_name)
80
+ Dir.mkdir conf_dir unless File.exist? conf_dir
81
+ file = File.join(conf_dir, dir_name + "_config.yml")
82
+ config = Watobo::Utils.load_settings(file)
83
+ end
84
+
85
+ # set default values
86
+ config = load_config
87
+ if config.is_a? Hash
88
+ set_binary_path config[:binary_path]
89
+ set_tmp_dir config[:tmp_dir]
90
+ else
91
+ set_binary_path
92
+ set_tmp_dir
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -1,12 +1,3 @@
1
- #.
2
- # sqlmap.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
- %w( sqlmap_ctrl ).each do |l|
11
- require_relative File.join("lib", l )
1
+ %w( sqlmap_ctrl ).each do |l|
2
+ require_relative File.join("lib", l )
12
3
  end
@@ -1,9 +0,0 @@
1
- #.
2
- # sslchecker_cli.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,255 +1,247 @@
1
- #.
2
- # cipher_table.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 Plugin
13
- module Sslchecker
14
- module Gui
15
-
16
- class CipherTableController < FXHorizontalFrame
17
- def subscribe(event, &callback)
18
- (@event_dispatcher_listeners[event] ||= []) << callback
19
- end
20
-
21
- def clearEvents(event)
22
- @event_dispatcher_listener[event].clear
23
- end
24
-
25
- def notify(event, *args)
26
- if @event_dispatcher_listeners[event]
27
- @event_dispatcher_listeners[event].each do |m|
28
- m.call(*args) if m.respond_to? :call
29
- end
30
- end
31
- end
32
-
33
- def initialize(owner, opts)
34
- super(owner,opts)
35
- @event_dispatcher_listeners = Hash.new
36
- @good_cb = FXCheckButton.new(self, "good", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
37
- @good_cb.connect(SEL_COMMAND) { update_table }
38
- @good_cb.checkState = true
39
- @bad_cb = FXCheckButton.new(self, "bad", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
40
- @bad_cb.connect(SEL_COMMAND) { update_table }
41
- @bad_cb.checkState = true
42
- @na_cb = FXCheckButton.new(self, "n/a", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
43
- @na_cb.connect(SEL_COMMAND) { update_table }
44
- @na_cb.checkState = true
45
- FXButton.new(self, "copy").connect(SEL_COMMAND) { notify(:copy_table) }
46
- # FXButton.new(self, "clear").connect(SEL_COMMAND) { notify(:clear_ciphers) }
47
-
48
- end
49
-
50
- def update_table
51
- show_prefs = CipherTable::CTF_NONE
52
- show_prefs = show_prefs | CipherTable::CTF_BAD if @bad_cb.checked?
53
- show_prefs = show_prefs | CipherTable::CTF_GOOD if @good_cb.checked?
54
- show_prefs = show_prefs | CipherTable::CTF_NA if @na_cb.checked?
55
- notify(:apply_filter, show_prefs)
56
- end
57
- end
58
-
59
- class CipherTable < FXTable
60
- CTF_NONE = 0x00
61
- CTF_GOOD = 0x01
62
- CTF_BAD = 0x02
63
- CTF_NA = 0x04
64
- CTF_ALL = 0x07
65
-
66
- attr :ciphers
67
- attr_accessor :min_bit_length
68
- attr_accessor :filter
69
-
70
- # this returns a comma seperated list of the table [string]
71
- def to_csv
72
- csv = ""
73
- self.each_row do |c,b,r|
74
- csv << c.text.strip << ";"
75
- csv << b.text.strip << ";"
76
- csv << r.text.strip
77
- csv << "\n"
78
- end
79
- csv
80
- end
81
-
82
- def setNewFont(font_type=nil, size=nil)
83
- begin
84
- new_size = size.nil? ? GUI_REGULAR_FONT_SIZE : size
85
- new_font_type = font_type.nil? ? "helvetica" : font_type
86
- new_font = FXFont.new(getApp(), new_font_type, new_size)
87
- new_font.create
88
-
89
- self.font = new_font
90
- self.rowHeader.font = new_font
91
- self.defRowHeight = new_size+10
92
-
93
- updateTable()
94
-
95
- rescue => bang
96
- puts bang
97
- puts bang.backtrace if $DEBUG
98
- end
99
- end
100
-
101
- def add_cipher( cipher )
102
-
103
- [ :method, :algo, :bits, :support ].each do |k|
104
- return false unless cipher.has_key? k
105
- end
106
-
107
- @ciphers.push cipher
108
- add_cipher_row(cipher)
109
-
110
- true
111
- end
112
-
113
- def show_all
114
- @filter = CTF_ALL
115
- end
116
-
117
- def update_table
118
- # puts "update table: #{filter}"
119
- self.clearItems
120
- initColumns
121
- @ciphers.each do |c|
122
- add_cipher_row c
123
- end
124
- end
125
-
126
- def clear_ciphers
127
- self.clearItems
128
- initColumns
129
- @ciphers.clear
130
- end
131
-
132
- def initialize(owner, opts)
133
- super(owner, :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
134
- @ciphers = []
135
- @min_bit_length = 128
136
-
137
- @columns = Hash.new
138
- @columns[:method] = { :label => "Method", :pos => 0, :width => 50 }
139
- @columns[:algo] = { :label => "Cipher", :pos => 1, :width => 250 }
140
- @columns[:bits] = { :label => "Bits", :pos => 2, :width => 100 }
141
- @columns[:support] = { :label => "Result", :pos => 3, :width => 50 }
142
-
143
- @filter = CTF_ALL
144
-
145
- init_icons
146
- initColumns()
147
- adjustCellWidth
148
- end
149
-
150
- private
151
-
152
- def init_icons
153
- begin
154
- path = File.expand_path(File.join(File.dirname(__FILE__), "..", "icons" ))
155
- file = "green_16x16.ico"
156
- icon_file = File.join(path, file)
157
- # puts icon_file
158
-
159
- @icon_ok = Watobo::Gui.load_icon(icon_file)
160
-
161
- file = "red_16x16.ico"
162
- icon_file = File.join(path, file)
163
- @icon_bad = Watobo::Gui.load_icon(icon_file)
164
-
165
- file = "grey_16x16.ico"
166
- icon_file = File.join(path, file)
167
- @icon_na = Watobo::Gui.load_icon(icon_file)
168
- rescue => bang
169
- puts bang
170
- puts bang.backtrace
171
- end
172
- end
173
-
174
- def initColumns()
175
- self.setTableSize(0, @columns.length)
176
- self.visibleRows = 20
177
- self.visibleColumns = @columns.length
178
-
179
- @columns.each do |key, opts|
180
- self.setColumnText( opts[:pos], opts[:label] )
181
- #self.setColumnIcon(@col_order.index(TABLE_COL_SSL), TBL_ICON_LOCK)# puts self.getItem(@col_order.index(col), 0 ).class.to_s
182
- end
183
-
184
- adjustCellWidth
185
-
186
- end
187
-
188
- def adjustCellWidth()
189
- begin
190
- self.rowHeader.width = 0
191
- @columns.each_value do |opts|
192
- self.setColumnWidth( opts[:pos], opts[:width] )
193
- end
194
- rescue => bang
195
- puts bang
196
- puts bang.backtrace
197
- puts "!!!ERROR: adjustCellWidth"
198
- end
199
-
200
- end
201
-
202
- def add_cipher_row(cipher)
203
- add_cipher = ( @filter == CTF_ALL ) ? true : false
204
-
205
- if cipher[:support] == false
206
- # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",0)
207
- text = "N/A"
208
- icon = @icon_na
209
- add_cipher = true if ( @filter & CTF_NA > 0 )
210
-
211
- elsif cipher[:bits].to_i < @min_bit_length
212
- # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",2)
213
- text = "BAD"
214
- icon = @icon_bad
215
- add_cipher = true if ( @filter & CTF_BAD > 0 )
216
- else
217
- text = "OK"
218
- icon = @icon_ok
219
- add_cipher = true if ( @filter & CTF_GOOD > 0 )
220
- # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",1)
221
- end
222
-
223
- if add_cipher
224
- lastRowIndex = self.getNumRows
225
- self.appendRows(1)
226
-
227
-
228
- index = @columns[:method][:pos]
229
- self.setItemText(lastRowIndex, index, cipher[:method].to_s)
230
- self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
231
-
232
- index = @columns[:algo][:pos]
233
- self.setItemText(lastRowIndex, index, cipher[:algo])
234
- self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
235
-
236
- index = @columns[:bits][:pos]
237
- self.setItemText(lastRowIndex, index, cipher[:bits].to_s)
238
- self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
239
-
240
- index = @columns[:support][:pos]
241
-
242
-
243
- self.setItemIcon(lastRowIndex, index, icon)
244
- self.setItemIconPosition(lastRowIndex, index, FXTableItem::BEFORE)
245
- self.setItemText(lastRowIndex, index, text)
246
- self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
247
- end
248
- end
249
-
250
- end
251
-
252
- end
253
- end
254
- end
255
- end
2
+ module Watobo#:nodoc: all
3
+ module Plugin
4
+ module Sslchecker
5
+ module Gui
6
+
7
+ class CipherTableController < FXHorizontalFrame
8
+ def subscribe(event, &callback)
9
+ (@event_dispatcher_listeners[event] ||= []) << callback
10
+ end
11
+
12
+ def clearEvents(event)
13
+ @event_dispatcher_listener[event].clear
14
+ end
15
+
16
+ def notify(event, *args)
17
+ if @event_dispatcher_listeners[event]
18
+ @event_dispatcher_listeners[event].each do |m|
19
+ m.call(*args) if m.respond_to? :call
20
+ end
21
+ end
22
+ end
23
+
24
+ def initialize(owner, opts)
25
+ super(owner,opts)
26
+ @event_dispatcher_listeners = Hash.new
27
+ @good_cb = FXCheckButton.new(self, "good", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
28
+ @good_cb.connect(SEL_COMMAND) { update_table }
29
+ @good_cb.checkState = true
30
+ @bad_cb = FXCheckButton.new(self, "bad", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
31
+ @bad_cb.connect(SEL_COMMAND) { update_table }
32
+ @bad_cb.checkState = true
33
+ @na_cb = FXCheckButton.new(self, "n/a", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
34
+ @na_cb.connect(SEL_COMMAND) { update_table }
35
+ @na_cb.checkState = true
36
+ FXButton.new(self, 'save').connect(SEL_COMMAND) { notify(:save_table) }
37
+ # FXButton.new(self, "clear").connect(SEL_COMMAND) { notify(:clear_ciphers) }
38
+
39
+ end
40
+
41
+ def update_table
42
+ show_prefs = CipherTable::CTF_NONE
43
+ show_prefs = show_prefs | CipherTable::CTF_BAD if @bad_cb.checked?
44
+ show_prefs = show_prefs | CipherTable::CTF_GOOD if @good_cb.checked?
45
+ show_prefs = show_prefs | CipherTable::CTF_NA if @na_cb.checked?
46
+ notify(:apply_filter, show_prefs)
47
+ end
48
+ end
49
+
50
+ class CipherTable < FXTable
51
+ CTF_NONE = 0x00
52
+ CTF_GOOD = 0x01
53
+ CTF_BAD = 0x02
54
+ CTF_NA = 0x04
55
+ CTF_ALL = 0x07
56
+
57
+ attr :ciphers
58
+ attr_accessor :min_bit_length
59
+ attr_accessor :filter
60
+
61
+ # this returns a comma seperated list of the table [string]
62
+ def to_csv
63
+ csv = []
64
+ self.each_row do |c,b,r,s|
65
+ l = [ c.text.strip ]
66
+ l << b.text.strip
67
+ l << r.text.strip
68
+ l << s.text.strip
69
+ csv << l.join(';')
70
+ end
71
+ return csv.join( "\n")
72
+ end
73
+
74
+ def setNewFont(font_type=nil, size=nil)
75
+ begin
76
+ new_size = size.nil? ? GUI_REGULAR_FONT_SIZE : size
77
+ new_font_type = font_type.nil? ? "helvetica" : font_type
78
+ new_font = FXFont.new(getApp(), new_font_type, new_size)
79
+ new_font.create
80
+
81
+ self.font = new_font
82
+ self.rowHeader.font = new_font
83
+ self.defRowHeight = new_size+10
84
+
85
+ updateTable()
86
+
87
+ rescue => bang
88
+ puts bang
89
+ puts bang.backtrace if $DEBUG
90
+ end
91
+ end
92
+
93
+ def add_cipher( cipher )
94
+
95
+ [ :method, :algo, :bits, :support ].each do |k|
96
+ return false unless cipher.has_key? k
97
+ end
98
+
99
+ @ciphers.push cipher
100
+ add_cipher_row(cipher)
101
+
102
+ true
103
+ end
104
+
105
+ def show_all
106
+ @filter = CTF_ALL
107
+ end
108
+
109
+ def update_table
110
+ # puts "update table: #{filter}"
111
+ self.clearItems
112
+ initColumns
113
+ @ciphers.each do |c|
114
+ add_cipher_row c
115
+ end
116
+ end
117
+
118
+ def clear_ciphers
119
+ self.clearItems
120
+ initColumns
121
+ @ciphers.clear
122
+ end
123
+
124
+ def initialize(owner, opts)
125
+ super(owner, :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
126
+ @ciphers = []
127
+ @min_bit_length = 128
128
+
129
+ @columns = Hash.new
130
+ @columns[:method] = { :label => "Method", :pos => 0, :width => 50 }
131
+ @columns[:algo] = { :label => "Cipher", :pos => 1, :width => 250 }
132
+ @columns[:bits] = { :label => "Bits", :pos => 2, :width => 100 }
133
+ @columns[:support] = { :label => "Result", :pos => 3, :width => 50 }
134
+
135
+ @filter = CTF_ALL
136
+
137
+ init_icons
138
+ initColumns()
139
+ adjustCellWidth
140
+ end
141
+
142
+ private
143
+
144
+ def init_icons
145
+ begin
146
+ path = File.expand_path(File.join(File.dirname(__FILE__), "..", "icons" ))
147
+ file = "green_16x16.ico"
148
+ icon_file = File.join(path, file)
149
+ # puts icon_file
150
+
151
+ @icon_ok = Watobo::Gui.load_icon(icon_file)
152
+
153
+ file = "red_16x16.ico"
154
+ icon_file = File.join(path, file)
155
+ @icon_bad = Watobo::Gui.load_icon(icon_file)
156
+
157
+ file = "grey_16x16.ico"
158
+ icon_file = File.join(path, file)
159
+ @icon_na = Watobo::Gui.load_icon(icon_file)
160
+ rescue => bang
161
+ puts bang
162
+ puts bang.backtrace
163
+ end
164
+ end
165
+
166
+ def initColumns()
167
+ self.setTableSize(0, @columns.length)
168
+ self.visibleRows = 20
169
+ self.visibleColumns = @columns.length
170
+
171
+ @columns.each do |key, opts|
172
+ self.setColumnText( opts[:pos], opts[:label] )
173
+ #self.setColumnIcon(@col_order.index(TABLE_COL_SSL), TBL_ICON_LOCK)# puts self.getItem(@col_order.index(col), 0 ).class.to_s
174
+ end
175
+
176
+ adjustCellWidth
177
+
178
+ end
179
+
180
+ def adjustCellWidth()
181
+ begin
182
+ self.rowHeader.width = 0
183
+ @columns.each_value do |opts|
184
+ self.setColumnWidth( opts[:pos], opts[:width] )
185
+ end
186
+ rescue => bang
187
+ puts bang
188
+ puts bang.backtrace
189
+ puts "!!!ERROR: adjustCellWidth"
190
+ end
191
+
192
+ end
193
+
194
+ def add_cipher_row(cipher)
195
+ add_cipher = ( @filter == CTF_ALL ) ? true : false
196
+
197
+ if cipher[:support] == false
198
+ # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",0)
199
+ text = "N/A"
200
+ icon = @icon_na
201
+ add_cipher = true if ( @filter & CTF_NA > 0 )
202
+
203
+ elsif cipher[:bits].to_i < @min_bit_length
204
+ # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",2)
205
+ text = "BAD"
206
+ icon = @icon_bad
207
+ add_cipher = true if ( @filter & CTF_BAD > 0 )
208
+ else
209
+ text = "OK"
210
+ icon = @icon_ok
211
+ add_cipher = true if ( @filter & CTF_GOOD > 0 )
212
+ # @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",1)
213
+ end
214
+
215
+ if add_cipher
216
+ lastRowIndex = self.getNumRows
217
+ self.appendRows(1)
218
+
219
+
220
+ index = @columns[:method][:pos]
221
+ self.setItemText(lastRowIndex, index, cipher[:method].to_s)
222
+ self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
223
+
224
+ index = @columns[:algo][:pos]
225
+ self.setItemText(lastRowIndex, index, cipher[:algo])
226
+ self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
227
+
228
+ index = @columns[:bits][:pos]
229
+ self.setItemText(lastRowIndex, index, cipher[:bits].to_s)
230
+ self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
231
+
232
+ index = @columns[:support][:pos]
233
+
234
+
235
+ self.setItemIcon(lastRowIndex, index, icon)
236
+ self.setItemIconPosition(lastRowIndex, index, FXTableItem::BEFORE)
237
+ self.setItemText(lastRowIndex, index, text)
238
+ self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
239
+ end
240
+ end
241
+
242
+ end
243
+
244
+ end
245
+ end
246
+ end
247
+ end