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,550 @@
1
+ # .
2
+ # proxy_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 AddProxyDialog < FXDialogBox
25
+
26
+ include Responder
27
+ include Watobo::Constants
28
+ def getProxySettings
29
+ s = {
30
+ :name => @proxy_name_dt.value,
31
+ :port => @proxy_port_dt.value,
32
+ :host => @proxy_dt.value
33
+
34
+ }
35
+
36
+ c = {
37
+ :username => @username_dt.value,
38
+ :password => @password_dt.value,
39
+ :workstation => @workstation_dt.value,
40
+ :domain => @domain_dt.value,
41
+ :type => @auth_type
42
+ }
43
+
44
+ puts "* auth_type"
45
+ puts c[:type]
46
+ if @auth_types_cb.currentItem > 0 and c[:username] != "" and c[:password] != ""
47
+ s.update c
48
+ end
49
+
50
+ return s
51
+
52
+ end
53
+
54
+ def savePasswords?()
55
+ @save_pws_cbt.checked?
56
+ end
57
+
58
+ def onAccept(sender, sel, event)
59
+ if @proxy_dt.value != "" then
60
+ begin
61
+ proxy_ip = IPSocket.getaddress(@proxy_dt.value)
62
+ rescue
63
+ FXMessageBox.information(self, MBOX_OK, "Wrong Host", "Could not resolve hostname #{@proxy_dt.value}")
64
+ return 0
65
+ end
66
+ else
67
+ FXMessageBox.information(self, MBOX_OK, "No Proxy", "You need to set the proxy host")
68
+ return 0
69
+ end
70
+
71
+ unless @proxy_port_dt.value =~ /^\d{1,5}$/ then
72
+ FXMessageBox.information(self, MBOX_OK, "Wrong Format", "Port format is wrong (e.g. 8080")
73
+ return 0
74
+ end
75
+
76
+ if @auth_type != AUTH_TYPE_NONE
77
+
78
+ unless @password_dt.value == @password_rt_dt.value then
79
+ FXMessageBox.information(self, MBOX_OK, "Password Missmatch", "Passwords don't match!")
80
+ return 0
81
+ end
82
+
83
+ unless @password_dt.value != ''
84
+ FXMessageBox.information(self, MBOX_OK, "No Password!", "You need a password!")
85
+ return 0
86
+ end
87
+ end
88
+
89
+ if @proxy_name_dt.value == ""
90
+ FXMessageBox.information(self, MBOX_OK, "Proxy Name Missing", "You need to set a name for the new proxy (e.g. myproxy)")
91
+ return 0
92
+ end
93
+
94
+ @password_policy[:save_passwords] = @save_pws_cbt.checked?
95
+ puts @password_policy.to_yaml
96
+ getApp().stopModal(self, 1)
97
+ self.hide()
98
+ return 1
99
+
100
+ end
101
+
102
+ def initialize(owner, proxy=nil, password_policy={})
103
+
104
+ super(owner, "Proxy Settings", :opts => DECOR_TITLE|DECOR_BORDER)
105
+
106
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
107
+
108
+ @proxy_name_dt = FXDataTarget.new('')
109
+ @proxy_port_dt = FXDataTarget.new('')
110
+ @proxy_dt = FXDataTarget.new('')
111
+ @username_dt = FXDataTarget.new('')
112
+ @password_dt = FXDataTarget.new('')
113
+ @password_rt_dt = FXDataTarget.new('')
114
+ @workstation_dt = FXDataTarget.new('')
115
+ @domain_dt = FXDataTarget.new('')
116
+ @auth_type_dt = FXDataTarget.new(AUTH_TYPE_NTLM)
117
+
118
+ unless proxy.nil?
119
+ begin
120
+ @proxy_name_dt.value = proxy[:name]
121
+ @proxy_port_dt.value = proxy[:port]
122
+ @proxy_dt.value = proxy[:host]
123
+
124
+ @username_dt.value = proxy[:username] if proxy.has_key? :username
125
+ @password_dt.value = proxy[:password] if proxy.has_key? :password
126
+ @password_rt_dt.value = proxy[:password] if proxy.has_key? :password
127
+ @workstation_dt.value = proxy[:workstation] if proxy.has_key? :workstation
128
+ @domain_dt.value = proxy[:domain] if proxy.has_key? :domain
129
+ @auth_type_dt.value = proxy[:auth_type] if proxy.has_key? :auth_type
130
+ rescue => bang
131
+ puts bang
132
+ end
133
+
134
+ end
135
+
136
+ @password_policy = Hash.new
137
+ @password_policy.update password_policy
138
+ main = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
139
+
140
+ matrix = FXMatrix.new(main, 2, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
141
+
142
+ FXLabel.new(matrix, "Name:", nil, :opts => LAYOUT_TOP|JUSTIFY_RIGHT)
143
+ proxy_name = FXTextField.new(matrix, 25,
144
+ :target => @proxy_name_dt, :selector => FXDataTarget::ID_VALUE,
145
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
146
+
147
+ proxy_name.handle(self, FXSEL(SEL_UPDATE, 0), nil)
148
+
149
+ FXLabel.new(matrix, "Hostname/IP:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
150
+
151
+ hostname = FXTextField.new(matrix, 25,
152
+ :target => @proxy_dt, :selector => FXDataTarget::ID_VALUE,
153
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
154
+ hostname.handle(self, FXSEL(SEL_UPDATE, 0), nil)
155
+
156
+ FXLabel.new(matrix, "Port:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
157
+ port = FXTextField.new(matrix, 25,
158
+ :target => @proxy_port_dt, :selector => FXDataTarget::ID_VALUE,
159
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
160
+
161
+ port.handle(self, FXSEL(SEL_UPDATE, 0), nil)
162
+
163
+ FXLabel.new(matrix, "Auth-Type:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
164
+ @auth_types_cb = FXComboBox.new(matrix, 5, nil, 0,
165
+ COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
166
+ #@filterCombo.width =200
167
+ auth_types = ['None', 'NTLM']
168
+ @auth_types_cb.numVisible = auth_types.length
169
+ @auth_types_cb.numColumns = 25
170
+ @auth_types_cb.editable = false
171
+ auth_types.each do |at|
172
+ @auth_types_cb.appendItem(at, nil)
173
+ end
174
+ @auth_types_cb.setCurrentItem(0)
175
+
176
+ unless proxy.nil?
177
+ if proxy.has_key?(:credentials)
178
+ case proxy[:credentials][:type]
179
+ when AUTH_TYPE_NTLM
180
+ @auth_types_cb.setCurrentItem(1)
181
+ end
182
+ end
183
+ end
184
+
185
+ @auth_types_cb.connect(SEL_COMMAND){
186
+ updateCredFrame()
187
+ }
188
+
189
+ @credentials_frame = FXMatrix.new(main, 2, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
190
+ FXLabel.new(@credentials_frame, "Username:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
191
+ username = FXTextField.new(@credentials_frame, 25,
192
+ :target => @username_dt, :selector => FXDataTarget::ID_VALUE,
193
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
194
+ username.handle(self, FXSEL(SEL_UPDATE, 0), nil)
195
+
196
+ FXLabel.new(@credentials_frame, "Password:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
197
+ password = FXTextField.new(@credentials_frame, 25,
198
+ :target => @password_dt, :selector => FXDataTarget::ID_VALUE,
199
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
200
+ password.handle(self, FXSEL(SEL_UPDATE, 0), nil)
201
+
202
+ FXLabel.new(@credentials_frame, "Password(retype):", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
203
+ password = FXTextField.new(@credentials_frame, 25,
204
+ :target => @password_rt_dt, :selector => FXDataTarget::ID_VALUE,
205
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|TEXTFIELD_PASSWD)
206
+ password.handle(self, FXSEL(SEL_UPDATE, 0), nil)
207
+
208
+ FXLabel.new(@credentials_frame, "Workstation:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
209
+ workstation = FXTextField.new(@credentials_frame, 25,
210
+ :target => @workstation_dt, :selector => FXDataTarget::ID_VALUE,
211
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
212
+ workstation.handle(self, FXSEL(SEL_UPDATE, 0), nil)
213
+
214
+ FXLabel.new(@credentials_frame, "Domain:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
215
+ domain = FXTextField.new(@credentials_frame, 25,
216
+ :target => @domain_dt, :selector => FXDataTarget::ID_VALUE,
217
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT)
218
+ domain.handle(self, FXSEL(SEL_UPDATE, 0), nil)
219
+
220
+ frame = FXVerticalFrame.new(main, :opts => LAYOUT_FILL_X)
221
+ @save_pws_cbt = FXCheckButton.new(frame, "save passwords")
222
+ @save_pws_cbt.checkState = false
223
+ @save_pws_cbt.checkState = true if password_policy[:save_passwords] == true
224
+ note_label = FXLabel.new(frame, "This setting affects all passwords!!!")
225
+
226
+ buttons = FXHorizontalFrame.new(main, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,
227
+ :padLeft => 40, :padRight => 40, :padTop => 20, :padBottom => 20)
228
+
229
+ accept = FXButton.new(buttons, "&Accept", nil, self, ID_ACCEPT,
230
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
231
+ accept.enable
232
+ # Cancel
233
+ FXButton.new(buttons, "&Cancel", nil, self, ID_CANCEL,
234
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
235
+
236
+ updateCredFrame()
237
+ end
238
+ private
239
+
240
+ def updateCredFrame()
241
+ ci = @auth_types_cb.currentItem
242
+
243
+ @auth_type = case ci
244
+ when 0
245
+ AUTH_TYPE_NONE
246
+ when 1
247
+ AUTH_TYPE_NTLM
248
+ else
249
+ AUTH_TYPE_NONE
250
+ end
251
+ @credentials_frame.each_child do |c|
252
+ if c.is_a? FXTextField
253
+ if ci > 0
254
+ c.backColor = FXColor::White
255
+ c.enable
256
+ else
257
+ c.backColor = c.parent.backColor
258
+ c.disable
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end
264
+
265
+ class ProxyDialog < FXDialogBox
266
+ #TODO: Implement Connection Check!!
267
+
268
+ attr_accessor :proxy
269
+
270
+ include Responder
271
+ def switchEnableProxy()
272
+ if not @proxyEnableCheckButton.checked? then
273
+ @proxyTable.hide()
274
+ @newProxyButton.disable
275
+ @delProxyButton.disable
276
+ @editProxyButton.disable
277
+ @acceptBtn.enable
278
+ @proxy = nil
279
+ @proxyTable.killSelection()
280
+ else
281
+ @proxyTable.show()
282
+ @newProxyButton.enable
283
+ selectProxy(@proxy)
284
+ @acceptBtn.disable
285
+ refreshProxyList()
286
+ end
287
+ @proxySelectionFrame.enabled = @proxyEnableCheckButton.checked?
288
+ @proxy_prelabel.enabled = @proxyEnableCheckButton.checked?
289
+ @proxy_label.enabled = @proxyEnableCheckButton.checked?
290
+ end
291
+
292
+ def refreshProxyList
293
+ @proxyTable.clearItems(false)
294
+ @proxyTable.setTableSize(0, 2)
295
+ return if @proxy_list.nil?
296
+ @proxy_list.each_key do |proxy|
297
+ puts "* addProxyItem #{proxy}"
298
+ addProxyItem(@proxy_list[proxy])
299
+ end
300
+ end
301
+
302
+ def getProxyPrefs()
303
+ @proxy_list[:default_proxy] = @proxy.nil? ? '' : @proxy[:name]
304
+ @proxy_list
305
+ end
306
+
307
+ def onAccept(sender, sel, event)
308
+ # @settings[:proxies] = proxies
309
+ @proxy_list = Hash.new
310
+ lastRowIndex = @proxyTable.numRows
311
+ lastRowIndex.times do |i|
312
+ proxy = @proxyTable.getItemData(i,0)
313
+ # puts proxy.to_yaml
314
+ @proxy_list[proxy[:name]] = proxy
315
+ end
316
+ @password_policy[:save_passwords] = @save_passwords
317
+ getApp().stopModal(self, 1)
318
+ self.hide()
319
+ return 1
320
+
321
+ end
322
+
323
+ def onCancel(sender, sel, event)
324
+ getApp().stopModal(self, 0)
325
+ self.hide()
326
+ return 1
327
+ end
328
+
329
+ def addProxy(proxy=nil)
330
+ pdlg = AddProxyDialog.new(self, proxy, @password_policy)
331
+
332
+ if pdlg.execute != 0
333
+ @acceptBtn.enable
334
+ @acceptBtn.setFocus()
335
+ @acceptBtn.setDefault()
336
+
337
+ last = @proxyTable.getNumRows
338
+ @proxy = pdlg.getProxySettings
339
+ @save_passwords = pdlg.savePasswords?
340
+ @proxy_list[@proxy[:name]] = @proxy
341
+
342
+ addProxyItem( @proxy )
343
+
344
+ lastRowIndex = @proxyTable.numRows
345
+ last = -1
346
+ lastRowIndex.times do |i|
347
+ if @proxyTable.getItemText(i, 0) == @proxy[:name] then
348
+ last = i
349
+ break
350
+ end
351
+ end
352
+ return -1 if last == -1
353
+
354
+ @proxyTable.selectRow(last)
355
+ @proxyTable.makePositionVisible(last,0)
356
+ @proxy_label.text = @proxy[:name]
357
+ end
358
+ end
359
+
360
+ def delProxy(sender, sel, event)
361
+
362
+ row = @proxyTable.getCurrentRow
363
+ # puts row
364
+ if row >= 0 and @proxyTable.rowSelected?(row) then
365
+ p = @proxyTable.getItem(row,1).to_s
366
+ #puts @proxy.class.to_s
367
+ # puts "delete: #{proxy}"
368
+ @proxy = ''
369
+ @proxyTable.removeRows(row,1)
370
+ @proxyTable.killSelection(true)
371
+ @delProxyButton.disable
372
+ @acceptBtn.disable
373
+ @proxy_label.text = ''
374
+ end
375
+ end
376
+
377
+ def editProxy()
378
+ row = @proxyTable.getCurrentRow
379
+ puts row
380
+ if row >= 0 and @proxyTable.rowSelected?(row) then
381
+ #p = @proxyTable.getItem(row,1).to_s
382
+ proxy = @proxyTable.getItemData(row,0)
383
+ addProxy(proxy)
384
+ end
385
+ end
386
+
387
+ def onProxySelect(sender, sel, index)
388
+
389
+ row = sender.getCurrentRow
390
+ if row >= 0 then
391
+ @proxyTable.selectRow(row)
392
+ @proxy = @proxyTable.getItemData(row,0)
393
+ @proxy_label.text = @proxy[:name]
394
+ @delProxyButton.enable
395
+ @editProxyButton.enable
396
+ @acceptBtn.enable
397
+ @acceptBtn.setFocus()
398
+ @acceptBtn.setDefault()
399
+ end
400
+ end
401
+
402
+ def selectProxy(proxy={})
403
+ @editProxyButton.disable
404
+ @delProxyButton.disable
405
+ @proxyTable.killSelection(true)
406
+ @proxy_label.text = "- none -"
407
+ @proxy = nil
408
+ return false if proxy.nil?
409
+ return false unless proxy[:name]
410
+ proxy_name = proxy[:name]
411
+ i = 0
412
+ @proxyTable.each do |items|
413
+ if items[0].to_s == proxy_name
414
+ puts "* match #{proxy_name}"
415
+ @proxyTable.selectRow(i)
416
+ @proxyTable.setCurrentItem(i,0)
417
+ @proxyTable.makePositionVisible(i,0)
418
+ @proxy = @proxyTable.getItemData(i,0)
419
+ # puts @proxy
420
+ @proxy_label.text = proxy_name
421
+ @delProxyButton.enable
422
+ end
423
+ i += 1
424
+ end
425
+ unless @proxy.nil?
426
+ @editProxyButton.enable
427
+ @delProxyButton.enable
428
+ end
429
+ end
430
+
431
+ def addProxyItem(proxy)
432
+ puts proxy.to_yaml
433
+ lastRowIndex = @proxyTable.numRows
434
+ siteIndex = -1
435
+ lastRowIndex.times do |i|
436
+ if @proxyTable.getItemText(i, 0) == proxy[:name] then
437
+ siteIndex = i
438
+ lastRowIndex = i
439
+ break
440
+ end
441
+ end
442
+ @proxyTable.appendRows(1) if siteIndex < 0
443
+
444
+ @proxyTable.rowHeader.setItemJustify(lastRowIndex,FXTableItem::LEFT)
445
+ @proxyTable.setItemText(lastRowIndex, 0, proxy[:name])
446
+ @proxyTable.getItem(lastRowIndex,0).justify = FXTableItem::LEFT
447
+ @proxyTable.setItemText(lastRowIndex, 1, proxy[:host] + ":" + proxy[:port])
448
+ @proxyTable.setItemData(lastRowIndex, 0, proxy)
449
+ @proxyTable.getItem(lastRowIndex,1).justify = FXTableItem::LEFT
450
+ end
451
+
452
+ def initialize(owner, proxy_settings={}, password_policy={})
453
+ super(owner, "Use Proxy", :opts => DECOR_ALL, :width => 250, :height => 400)
454
+ @new_proxy = FXDataTarget.new('')
455
+ @save_passwords = false
456
+
457
+ puts proxy_settings.to_yaml
458
+
459
+ @proxy_settings = Hash.new
460
+ @proxy_settings.update(proxy_settings)
461
+
462
+ @password_policy = password_policy
463
+
464
+ @proxy = nil
465
+ pname = @proxy_settings[:default_proxy]
466
+ @proxy_settings ||= {}
467
+ if @proxy_settings.has_key? pname
468
+ @proxy = @proxy_settings[pname]
469
+ end
470
+
471
+ @proxy_list = {}
472
+ @proxy_list.update YAML.load(YAML.dump(@proxy_settings))
473
+ @proxy_list.delete(:default_proxy)
474
+
475
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
476
+ FXMAPFUNC(SEL_COMMAND, ID_CANCEL, :onCancel)
477
+
478
+ current_proxy_frame = FXHorizontalFrame.new(self,FRAME_NONE|LAYOUT_FILL_X|FRAME_GROOVE)
479
+ FXLabel.new(current_proxy_frame, "Current Proxy:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
480
+ @cp_label = FXLabel.new(current_proxy_frame, "- none -", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
481
+
482
+ main_frame = FXVerticalFrame.new(self, :opts => FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y)
483
+ enable_proxy_frame = FXHorizontalFrame.new(main_frame,FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y)
484
+ @proxyEnableCheckButton = FXCheckButton.new(enable_proxy_frame, "enable forwarding proxy", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
485
+
486
+ @proxyEnableCheckButton.connect(SEL_COMMAND) do |sender, sel, item|
487
+ switchEnableProxy()
488
+ end
489
+
490
+ @proxySelectionFrame = FXGroupBox.new(main_frame, "Select Forwarding Proxy", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0)
491
+
492
+ proxySubSelection = FXVerticalFrame.new(@proxySelectionFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
493
+
494
+ @proxyTable = FXTable.new(proxySubSelection,
495
+ :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY,
496
+ :padding => 2)
497
+ @proxyTable.setTableSize(0, 2)
498
+
499
+ @proxyTable.connect(SEL_COMMAND, method(:onProxySelect))
500
+ @proxyTable.connect(SEL_SELECTED, method(:onProxySelect))
501
+
502
+ @proxyTable.rowHeaderWidth = 0
503
+ @proxyTable.rowHeaderMode = LAYOUT_FIX_WIDTH
504
+
505
+ @proxyTable.visibleRows = 5
506
+ @proxyTable.setColumnText(0, "Name" )
507
+ @proxyTable.setColumnText(1, "Proxy" )
508
+
509
+ buttons_frame = FXHorizontalFrame.new( proxySubSelection, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
510
+ @newProxyButton = FXButton.new(buttons_frame, "Add" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
511
+ @newProxyButton.connect(SEL_COMMAND){ addProxy() }
512
+
513
+ @editProxyButton = FXButton.new(buttons_frame, "Edit" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
514
+ @editProxyButton.connect(SEL_COMMAND) { editProxy() }
515
+ @editProxyButton.disable
516
+
517
+ @delProxyButton = FXButton.new(buttons_frame, "Delete" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
518
+ @delProxyButton.connect(SEL_COMMAND, method(:delProxy))
519
+ @delProxyButton.disable
520
+
521
+ selection_frame = FXHorizontalFrame.new(main_frame,FRAME_NONE|LAYOUT_FILL_X)
522
+ @proxy_prelabel = FXLabel.new(selection_frame, "Selected Proxy:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
523
+ @proxy_label = FXLabel.new(selection_frame, "- none -", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
524
+
525
+ buttons = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,
526
+ :padLeft => 40, :padRight => 40, :padTop => 20, :padBottom => 20)
527
+
528
+ # Accept
529
+ @acceptBtn = FXButton.new(buttons, "&Accept", nil, self, ID_ACCEPT,
530
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
531
+ @acceptBtn.disable
532
+ # Cancel
533
+ FXButton.new(buttons, "&Cancel", nil, self, ID_CANCEL,
534
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
535
+
536
+ @proxyEnableCheckButton.setCheck(false, false)
537
+ @proxyEnableCheckButton.setCheck(true, false) unless @proxy.nil?
538
+ refreshProxyList()
539
+ switchEnableProxy()
540
+
541
+ unless @proxy.nil?
542
+ @cp_label.text = @proxy[:name]
543
+ selectProxy(@proxy)
544
+ end
545
+
546
+ end
547
+ end
548
+
549
+ end
550
+ end