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,380 @@
1
+ # .
2
+ # define_scope_frame.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 'fox16'
23
+
24
+ include Fox
25
+
26
+ module Watobo
27
+ module Gui
28
+
29
+
30
+ class ScopeDetailsFrame < FXVerticalFrame
31
+
32
+ # def fxMessageBox()
33
+ # FXMessageBox.information(self, MBOX_OK, "Wrong Signature Format", "Signature Format is wrong. Must be a valid regular expression, e.g.(<Regex>) <^Location.*action=logout>")
34
+ # end
35
+
36
+ def getDetails
37
+ d = Hash.new
38
+ d[:root_path] = @rootpath_dt.value
39
+ path_array = []
40
+ @expath_list.each do |p|
41
+ path_array.push p.data
42
+ end
43
+ d[:excluded_paths] = path_array
44
+ d
45
+ end
46
+
47
+ def removePattern(list_box, pattern)
48
+ index = list_box.currentItem
49
+ if index >= 0
50
+ list_box.removeItem(index)
51
+ end
52
+ end
53
+
54
+ def addPattern(list_box, pattern)
55
+ if pattern != "" then
56
+ pattern_ok, *error = Watobo::Utils.checkRegex(pattern)
57
+ if pattern_ok == true
58
+ item = list_box.appendItem("#{pattern}")
59
+ list_box.setItemData(item, pattern)
60
+ list_box.sortItems()
61
+
62
+ else
63
+ FXMessageBox.information(self, MBOX_OK, "Wrong Path Format", "Path must be a Regex!!!\nError: #{error.join('\n')}")
64
+ end
65
+ end
66
+ end
67
+
68
+ def updateFrame(details)
69
+ @rootpath_dt.value = details[:root_path]
70
+ @rootpath_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
71
+ details[:excluded_paths].each do |p|
72
+ addPattern(@expath_list, p)
73
+ end
74
+ end
75
+
76
+ def initialize(parent, details=nil)
77
+
78
+ @rootpath_dt = FXDataTarget.new('')
79
+ @expath_dt = FXDataTarget.new('')
80
+
81
+
82
+ super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
83
+
84
+ # main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_X|FRAME_NONE, :padding => 0)
85
+ title_frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|FRAME_GROOVE)
86
+ title = FXLabel.new(title_frame, "Site:", :opts => LAYOUT_TOP)
87
+ title = FXLabel.new(title_frame, "#{details[:site]}")
88
+ title.setFont(FXFont.new(getApp(), "helvetica", 12, FONTWEIGHT_BOLD, FONTSLANT_ITALIC, FONTENCODING_DEFAULT))
89
+ #
90
+ # ROOT PATH BOX
91
+ gbframe = FXGroupBox.new(self, "Root Path", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
92
+ frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
93
+ #text_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, :padding =>0)
94
+ fxtext = FXText.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
95
+ fxtext.backColor = fxtext.parent.backColor
96
+ fxtext.disable
97
+ text = "The Root Path defines the application root of the site. " +
98
+ "Only URLs which include the Root Path will be tested during a scan." +
99
+ "\nSetting the Root Path to 'myapp', only URLs that begin with http://#{details[:site]}/myapp/ will be tested."
100
+ fxtext.setText(text)
101
+
102
+ input_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X|FRAME_NONE)
103
+ FXLabel.new(input_frame,"Root Path (RegEx):")
104
+ @rootpath_field = FXTextField.new(input_frame, 0, :target => @rootpath_dt, :selector => FXDataTarget::ID_VALUE, :opts => LAYOUT_FILL_X|TEXTFIELD_NORMAL|LAYOUT_SIDE_LEFT)
105
+
106
+ #
107
+ # EXCLUDED
108
+
109
+ gbframe = FXGroupBox.new(self, "Excluded Path's", LAYOUT_SIDE_RIGHT|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
110
+ frame = FXVerticalFrame.new(gbframe, :opts => LAYOUT_FILL_X, :padding => 0)
111
+ fxtext = FXText.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
112
+ fxtext.backColor = fxtext.parent.backColor
113
+ fxtext.disable
114
+ text = "URLs which match a pattern will not be tested during a scan."
115
+ fxtext.setText(text)
116
+ input_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X)
117
+ @expath_field = FXTextField.new(input_frame, 20, :target => @expath_dt, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_LEFT|LAYOUT_FILL_X)
118
+ @remExPath = FXButton.new(input_frame, "Remove" , :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
119
+ @addExPath = FXButton.new(input_frame, "Add" , :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
120
+
121
+ list_frame = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|FRAME_SUNKEN, :padding => 0)
122
+ @expath_list = FXList.new(list_frame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
123
+ @expath_list.numVisible = 5
124
+
125
+ @expath_list.connect(SEL_COMMAND){ |sender, sel, item|
126
+ @expath_dt.value = sender.getItemText(item)
127
+ @expath_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
128
+ }
129
+
130
+ @remExPath.connect(SEL_COMMAND){ |sender, sel, item|
131
+ removePattern(@expath_list, @expath_dt.value) if @expath_dt.value != ''
132
+ @expath_dt.value = ''
133
+ @expath_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
134
+ }
135
+ @addExPath.connect(SEL_COMMAND){ |sender, sel, item|
136
+
137
+ addPattern(@expath_list, @expath_dt.value) if @expath_dt.value != ''
138
+ @expath_dt.value = ''
139
+ @expath_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
140
+ }
141
+
142
+ @expath_dt.connect(SEL_COMMAND){ |sender, sel, item|
143
+
144
+ addPattern(@expath_list, @expath_dt.value) if @expath_dt.value != ''
145
+ @expath_dt.value = ''
146
+ @expath_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
147
+ }
148
+
149
+ updateFrame(details)
150
+ self.update
151
+ end
152
+ end
153
+
154
+
155
+
156
+ class EditScopeDetailsDialog < FXDialogBox
157
+
158
+ attr :details
159
+
160
+ include Responder
161
+
162
+ def onAccept(sender, sel, event)
163
+ @details = @scopeDetailsFrame.getDetails()
164
+ root_path_ok, *error = Watobo::Utils.checkRegex(@details[:root_path])
165
+ if root_path_ok == true
166
+ getApp().stopModal(self, 1)
167
+ self.hide()
168
+ return 1
169
+ else
170
+ FXMessageBox.information(self, MBOX_OK, "Wrong Root Path Format", "Root Path must be a Regex!!!\nError: #{error.join('\n')}")
171
+ end
172
+
173
+ end
174
+
175
+ def initialize(owner, details)
176
+
177
+ super(owner, "Scope Details",
178
+ :opts => DECOR_TITLE|DECOR_BORDER|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 350, :height => 500)
179
+
180
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
181
+
182
+ @details = (details.is_a? Hash) ? details : Hash.new
183
+
184
+ @root_path = FXDataTarget.new('')
185
+ main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_X|FRAME_NONE, :padding => 0)
186
+ @scopeDetailsFrame = ScopeDetailsFrame.new(main_frame, details)
187
+
188
+ button_frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
189
+ accept = FXButton.new(button_frame, "&Accept", nil, self, ID_ACCEPT,
190
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
191
+ accept.enable
192
+ # Cancel
193
+ FXButton.new(button_frame, "&Cancel", nil, self, ID_CANCEL,
194
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
195
+ end
196
+ end
197
+
198
+ class DefineScopeFrame < FXVerticalFrame
199
+
200
+ def onDeselectAll(sender, sel, item)
201
+ @dummy_scope.each do |site, val|
202
+ @cb_sites[site].setCheck(false)
203
+ @edit_btns[site].disable
204
+ end
205
+ @sel_all_btn.setFocus()
206
+ @sel_all_btn.setDefault()
207
+
208
+ end
209
+
210
+ def onSelectAll(sender, sel, item)
211
+ sites = []
212
+ @dummy_scope.each do |site, scope|
213
+ @cb_sites[site].setCheck(true)
214
+ @edit_btns[site].enable
215
+ end
216
+ @desel_all_btn.setFocus()
217
+ @desel_all_btn.setDefault()
218
+ end
219
+
220
+ def editSiteDetails(site)
221
+ dlg = EditScopeDetailsDialog.new(self, @dummy_scope[site])
222
+
223
+ if dlg.execute != 0
224
+ @dummy_scope[site].update dlg.details
225
+ puts dlg.details.to_yaml
226
+ end
227
+ end
228
+
229
+ def getScope()
230
+ scope = Hash.new
231
+ @cb_sites.keys.each do |site|
232
+ @dummy_scope.delete(site) if !@cb_sites[site].checked?
233
+ # scope[site] = @dummy_scope[site] if @cb_sites[site].checked?
234
+ end
235
+ return @dummy_scope
236
+ end
237
+
238
+ def updateFrame()
239
+ @dummy_scope.each do |site, scope|
240
+ next if @cb_sites[site].nil?
241
+ @cb_sites[site].setCheck(scope[:enabled])
242
+ @cb_sites[site].checked? ? @edit_btns[site].enable : @edit_btns[site].disable
243
+ end
244
+
245
+ end
246
+
247
+ def setScope(scope)
248
+ @scope = scope
249
+ @dummy_scope.keys.each do |site|
250
+ @dummy_scope[site].update @scope[site] if !@scope[site].nil?
251
+ end
252
+ updateFrame()
253
+ end
254
+
255
+ def initialize(owner, sites, scope, opts)
256
+ super(owner, :opts => opts, :padding => 0)
257
+
258
+ @dummy_scope = Hash.new
259
+ @dummy_scope = YAML.load(YAML.dump(scope)) if scope.is_a? Hash
260
+
261
+ @cb_sites = Hash.new
262
+ @edit_btns = Hash.new
263
+
264
+ title = FXLabel.new(self, "Target Scope")
265
+ info_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|FRAME_GROOVE)
266
+ title.setFont(FXFont.new(getApp(), "helvetica", 12, FONTWEIGHT_BOLD, FONTSLANT_ITALIC, FONTENCODING_DEFAULT))
267
+
268
+ scope_text =<<'EOF'
269
+ The target scopes affects primarly the
270
+ behaviour all WATOBO scanner tools.
271
+ Click the appropriate edit-button for more
272
+ detailed settings.
273
+ EOF
274
+ btn = FXButton.new(info_frame, scope_text,
275
+ :opts => LAYOUT_FILL_X|LAYOUT_FIX_HEIGHT, :height => 90)
276
+ #btn.font = @font
277
+ #btn.backColor = FXColor::White
278
+ btn.justify = JUSTIFY_LEFT
279
+ quickSelectFrame = FXHorizontalFrame.new(self, LAYOUT_FILL_X)
280
+ @sel_all_btn = FXButton.new(quickSelectFrame, "Select All", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
281
+ @sel_all_btn.connect(SEL_COMMAND, method(:onSelectAll))
282
+
283
+ @sel_all_btn.setFocus()
284
+ @sel_all_btn.setDefault()
285
+
286
+ @desel_all_btn = FXButton.new(quickSelectFrame, "Deselect All", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
287
+ @desel_all_btn.connect(SEL_COMMAND, method(:onDeselectAll))
288
+ frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE, :padding => 0)
289
+ sitesArea = FXScrollWindow.new(frame, SCROLLERS_NORMAL|LAYOUT_FILL_X|LAYOUT_FILL_Y)
290
+ sitesFrame = FXVerticalFrame.new(sitesArea, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
291
+
292
+ sites.sort.each do |site|
293
+ site_frame = FXHorizontalFrame.new(sitesFrame, :opts => LAYOUT_FILL_X)
294
+ b = FXCheckButton.new(site_frame, site, nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
295
+ eb = FXButton.new(site_frame, "edit..", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT)
296
+ @edit_btns[site] = eb
297
+
298
+ b.connect(SEL_COMMAND){
299
+ b.checked? ? @edit_btns[site].enable : @edit_btns[site].disable
300
+ @dummy_scope[site][:enabled] = true
301
+ }
302
+
303
+
304
+ @cb_sites[site] = b
305
+ b.setCheck(false)
306
+ scope_details = {
307
+ :site => site,
308
+ :enabled => false,
309
+ :root_path => '',
310
+ :excluded_paths => [],
311
+ #:exclude_pattern => []
312
+ }
313
+
314
+ if !@dummy_scope[site]
315
+ @dummy_scope[site] = scope_details
316
+ else
317
+ @dummy_scope[site][:enabled] = true
318
+ end
319
+
320
+
321
+ eb.connect(SEL_COMMAND){
322
+ editSiteDetails(site)
323
+ }
324
+
325
+ end
326
+ updateFrame()
327
+ end
328
+
329
+
330
+
331
+ end #EOC
332
+ #--
333
+ end
334
+ end
335
+
336
+
337
+ if __FILE__ == $0
338
+ require '../utils/check_regex'
339
+
340
+ class TestGui < FXMainWindow
341
+
342
+ def initialize(app)
343
+ # Call base class initializer first
344
+ super(app, "Test Application", :width => 800, :height => 600)
345
+ frame = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
346
+
347
+ pbButton = FXButton.new(frame, "create FXProgressBar",:opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
348
+
349
+ @scope_details = {
350
+ :site => "127.0.0.1",
351
+ :enabled => false,
352
+ :root_path => '',
353
+ :excluded_paths => [],
354
+ #:exclude_pattern => []
355
+ }
356
+ pbButton.connect(SEL_COMMAND) {
357
+
358
+ dlg = Watobo::Gui::EditScopeDetailsDialog.new(self,scope_details)
359
+
360
+ if dlg.execute != 0
361
+ puts dlg.details.to_yaml
362
+ end
363
+ }
364
+ end
365
+ # Create and show the main window
366
+ def create
367
+ super # Create the windows
368
+ show(PLACEMENT_SCREEN) # Make the main window appear
369
+ dlg = Watobo::Gui::EditScopeDetailsDialog.new(self, @scope_details)
370
+
371
+ if dlg.execute != 0
372
+ puts dlg.details.to_yaml
373
+ end
374
+ end
375
+ end
376
+ application = FXApp.new('LayoutTester', 'FoxTest')
377
+ TestGui.new(application)
378
+ application.create
379
+ application.run
380
+ end
@@ -0,0 +1,70 @@
1
+ # .
2
+ # edit_comment.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 EditCommentDialog < FXDialogBox
25
+ def comment()
26
+ @textbox.to_s
27
+ end
28
+
29
+ def initialize(owner, chat)
30
+ #super(owner, "Edit Target Scope", DECOR_TITLE|DECOR_BORDER, :width => 300, :height => 425)
31
+ super(owner, "Edit Comment", DECOR_ALL, :width => 300, :height => 150)
32
+
33
+ base_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
34
+
35
+ # puts "create scopeframe with scope:"
36
+ # @project.scope
37
+ text_frame = FXVerticalFrame.new(base_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
38
+ @textbox = FXText.new(text_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
39
+ @textbox.setText(chat.comment)
40
+ @textbox.setFocus()
41
+ @textbox.setDefault()
42
+
43
+ @textbox.connect(SEL_KEYPRESS) { |sender, sel, event|
44
+ if event.code == KEY_Tab
45
+ @finishButton.setFocus()
46
+ @finishButton.setDefault()
47
+ true
48
+ else
49
+ false
50
+ end
51
+
52
+ }
53
+ buttons_frame = FXHorizontalFrame.new(base_frame,
54
+ :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
55
+
56
+ @finishButton = FXButton.new(buttons_frame, "Accept" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
57
+ @finishButton.enable
58
+ @finishButton.connect(SEL_COMMAND) do |sender, sel, item|
59
+ #self.handle(self, FXSEL(SEL_COMMAND, ID_CANCEL), nil)
60
+ self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
61
+ end
62
+
63
+ @cancelButton = FXButton.new(buttons_frame, "Cancel" ,
64
+ :target => self, :selector => FXDialogBox::ID_CANCEL,
65
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
66
+
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,69 @@
1
+ # .
2
+ # edit_scope_dialog.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 EditScopeDialog < FXDialogBox
25
+
26
+ include Responder
27
+
28
+ attr :scope
29
+ def onAccept(sender, sel, event)
30
+
31
+ @scope = @defineScopeFrame.getScope()
32
+
33
+ getApp().stopModal(self, 1)
34
+ self.hide()
35
+ return 1
36
+ end
37
+
38
+ def initialize(owner, project, prefs)
39
+ #super(owner, "Edit Target Scope", DECOR_TITLE|DECOR_BORDER, :width => 300, :height => 425)
40
+ super(owner, "Edit Target Scope", DECOR_ALL, :width => 300, :height => 425)
41
+ @project = project
42
+ @scope = Hash.new
43
+
44
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
45
+
46
+ base_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
47
+
48
+ # puts "create scopeframe with scope:"
49
+ # @project.scope
50
+ @defineScopeFrame = DefineScopeFrame.new(base_frame, @project.listSites(), YAML.load(YAML.dump(@project.scope)), prefs)
51
+
52
+ buttons_frame = FXHorizontalFrame.new(base_frame,
53
+ :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
54
+
55
+ @finishButton = FXButton.new(buttons_frame, "Accept" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
56
+ @finishButton.enable
57
+ @finishButton.connect(SEL_COMMAND) do |sender, sel, item|
58
+ #self.handle(self, FXSEL(SEL_COMMAND, ID_CANCEL), nil)
59
+ self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
60
+ end
61
+
62
+ @cancelButton = FXButton.new(buttons_frame, "Cancel" ,
63
+ :target => self, :selector => FXDialogBox::ID_CANCEL,
64
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
65
+
66
+ end
67
+ end
68
+ end
69
+ end