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,446 @@
1
+ # .
2
+ # csrf_token_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 TokenSettings < FXHorizontalFrame
25
+ include Watobo::Gui::Utils
26
+
27
+ class SidPreview < FXText
28
+ def highlight(pattern)
29
+ self.setText(self.to_s)
30
+ begin
31
+ # puts pattern
32
+ if self.to_s =~ /#{pattern}/ then
33
+ if $1 and $2 then
34
+ # puts "MATCH (#{$1}/#{$2})"
35
+ string1 = $1
36
+ string2 = $2
37
+ index1 = nil
38
+ index1 = self.to_s.index(string1)
39
+ if index1 then
40
+ self.changeStyle(index1,string1.length,1)
41
+ end
42
+ index2 = nil
43
+ index2 = self.to_s.index(string2)
44
+
45
+ if index2 then
46
+ self.changeStyle(index2,string2.length,1)
47
+ end
48
+
49
+ self.makePositionVisible(index2+string2.length)
50
+ self.makePositionVisible(index1)
51
+
52
+ else
53
+ # string1 = pattern
54
+ # string2 = pattern
55
+ end
56
+ end
57
+ rescue => bang
58
+ puts "!!!ERROR: could not highlight pattern"
59
+ puts bang
60
+ end
61
+ end
62
+
63
+ def initialize(parent, opts)
64
+ super(parent, opts)
65
+ @style = 1 # default style
66
+
67
+ # Construct some hilite styles
68
+ hs_green = FXHiliteStyle.new
69
+ hs_green.normalForeColor = FXRGBA(255,255,255,255) #FXColor::Red
70
+ hs_green.normalBackColor = FXRGBA(0,255,0,1) # FXColor::White
71
+ hs_green.style = FXText::STYLE_BOLD
72
+
73
+ hs_red = FXHiliteStyle.new
74
+ hs_red.normalForeColor = FXRGBA(255,255,255,255) #FXColor::Red
75
+ hs_red.normalBackColor = FXRGBA(255,0,0,1) # FXColor::White
76
+ hs_red.style = FXText::STYLE_BOLD
77
+
78
+ self.styled = true
79
+ # Set the styles
80
+ self.hiliteStyles = [ hs_green, hs_red]
81
+
82
+ self.editable = false
83
+ end
84
+ end
85
+
86
+ def getTokenPatterns()
87
+ sids = []
88
+ @pattern_list.numItems.times do |index|
89
+ sids.push @pattern_list.getItemData(index)
90
+ end
91
+ return sids
92
+ end
93
+
94
+ def updateRequests(req_id_list)
95
+
96
+ if @project then
97
+ @requestCombo.clearItems()
98
+
99
+ req_id_list.each do |id|
100
+ chat = @project.getChat(id)
101
+ text = "[#{id}] #{chat.request.first}"
102
+ @requestCombo.appendItem(text.slice(0..60), chat)
103
+ end
104
+
105
+ unless @target_chat.nil?
106
+ text = "[TARGET #{@target_chat.id}] - #{@target_chat.request.first}"
107
+ @requestCombo.appendItem(text.slice(0..60), @target_chat)
108
+ end
109
+
110
+ if @requestCombo.numItems > 0 then
111
+ if @requestCombo.numItems < 10 then
112
+ @requestCombo.numVisible = @requestCombo.numItems
113
+ else
114
+ @requestCombo.numVisible = 10
115
+ end
116
+
117
+ @requestCombo.setCurrentItem(0, true)
118
+ chat = @requestCombo.getItemData(0)
119
+ @request_viewer.setText(cleanupHTTP(chat.request))
120
+ @response_viewer.setText(cleanupHTTP(chat.response))
121
+ end
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ def onPatternClick(sender,sel,item)
128
+ pattern = @pattern_list.getItemText(item)
129
+ @request_viewer.highlight(pattern)
130
+ @response_viewer.highlight(pattern)
131
+ @pattern.value = pattern
132
+ @pattern_field.handle(self, FXSEL(SEL_UPDATE, 0), nil)
133
+ end
134
+
135
+ def onRequestChanged(sender, sel, item)
136
+ begin
137
+ chat = @requestCombo.getItemData(@requestCombo.currentItem)
138
+ @request_viewer.setText(cleanupHTTP(chat.request))
139
+ @response_viewer.setText(cleanupHTTP(chat.response))
140
+ rescue => bang
141
+ puts "could not update request"
142
+ puts bang
143
+ end
144
+ end
145
+
146
+ def showBadPatternMessage()
147
+ FXMessageBox.information(self, MBOX_OK, "Wrong Pattern Format", "SID Pattern Format is wrong, e.g.(<PATTERN>) <(session)=([a-z]*)>\nRegex must contain two selectors \"()\" to satisfy $1 and $2.")
148
+ end
149
+
150
+ def addPattern(sender,sel,id)
151
+ pattern = @pattern.value
152
+ if pattern != "" then
153
+ begin
154
+ dummy = pattern.split('(')
155
+ if dummy.length < 2 then
156
+ # no good pattern
157
+ puts "!!!ERROR: Bad pattern"
158
+ showBadPatternMessage()
159
+ return -1
160
+ end
161
+
162
+ dummy = pattern.split(')')
163
+ if dummy.length < 2 then
164
+ # no good pattern
165
+ puts "!!!ERROR: Bad pattern"
166
+ showBadPatternMessage()
167
+ return -1
168
+ end
169
+
170
+ # test if pattern looks like a valid regex
171
+ if "test" =~ /#{pattern}/i then
172
+ #looks good
173
+ end
174
+
175
+ rescue => bang
176
+ puts "!!!ERROR: Bad pattern"
177
+ showBadPatternMessage()
178
+ return -1
179
+ end
180
+ item = @pattern_list.appendItem("#{@pattern.value}")
181
+ @pattern_list.setItemData(item, @pattern.value)
182
+ return 0
183
+ # item.
184
+ end
185
+ end
186
+
187
+ def remPattern(sender,sel,id)
188
+ index = @pattern_list.currentItem
189
+ if index >= 0
190
+ @pattern_list.removeItem(index)
191
+ end
192
+ end
193
+
194
+ def initialize(parent, project, target_chat=nil)
195
+ @project = project
196
+ @pattern = FXDataTarget.new('')
197
+ @target_chat = target_chat
198
+
199
+ super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
200
+
201
+ main_frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_X|FRAME_GROOVE)
202
+ frame = FXVerticalFrame.new(main_frame, :opts => LAYOUT_FILL_Y)
203
+ label = FXLabel.new(frame, "CSRF Token Patterns:")
204
+
205
+ @pattern_field = FXTextField.new(frame, 40, :target => @pattern, :selector => FXDataTarget::ID_VALUE, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_LEFT)
206
+
207
+ b_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X)
208
+ @addSidButton = FXButton.new(b_frame, "Add" , :opts => BUTTON_NORMAL|LAYOUT_LEFT)
209
+ @addSidButton.connect(SEL_COMMAND, method(:addPattern))
210
+ @remSidButton=FXButton.new(b_frame, "Remove" , :opts => BUTTON_NORMAL|LAYOUT_LEFT)
211
+ @remSidButton.connect(SEL_COMMAND, method(:remPattern))
212
+
213
+ list_frame = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|FRAME_SUNKEN, :padding => 0)
214
+ @pattern_list = FXList.new(list_frame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
215
+ @pattern_list.numVisible = 25
216
+
217
+ @pattern_list.connect(SEL_COMMAND,method(:onPatternClick))
218
+
219
+ frame = FXVerticalFrame.new(main_frame, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_X)
220
+ label = FXLabel.new(frame, "Token Script Requests:")
221
+ @requestCombo = FXComboBox.new(frame, 5, nil, 0,
222
+ COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
223
+ #@filterCombo.width =200
224
+
225
+ @requestCombo.numVisible = 0
226
+ @requestCombo.numColumns = 50
227
+ @requestCombo.editable = false
228
+ @requestCombo.connect(SEL_COMMAND, method(:onRequestChanged))
229
+
230
+ chat_viewer_frame = FXVerticalFrame.new(frame, LAYOUT_FILL_X|LAYOUT_FILL_Y, :height => 300, :padding => 0)
231
+ tabBook = FXTabBook.new(chat_viewer_frame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT, :padding => 0)
232
+
233
+ req_tab = FXTabItem.new(tabBook, "Request", nil)
234
+ frame = FXVerticalFrame.new(tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
235
+ sunken = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN, :padding => 0)
236
+ @request_viewer = SidPreview.new(sunken, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN)
237
+
238
+ resp_tab = FXTabItem.new(tabBook, "Response", nil)
239
+ frame = FXVerticalFrame.new(tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
240
+ sunken = FXVerticalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN, :padding => 0)
241
+ @response_viewer = SidPreview.new(sunken, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
242
+
243
+ if @project then
244
+ @project.getCSRFPatterns.each do |p|
245
+ item = @pattern_list.appendItem("#{p}")
246
+ @pattern_list.setItemData(item, p)
247
+ end
248
+ end
249
+ end
250
+ end
251
+
252
+ class TokenScriptSettings < FXVerticalFrame
253
+
254
+ include Watobo::Constants
255
+
256
+ def showChat(chat)
257
+ @request_viewer.setText(chat.request)
258
+
259
+ @response_viewer.setText(chat.response)
260
+
261
+ end
262
+
263
+ def getTokenScriptIds()
264
+ ids = []
265
+ @scriptTable.numRows.times do |row|
266
+ # puts row
267
+ ids.push @scriptTable.getRowText(row)
268
+ end
269
+ return ids
270
+
271
+ end
272
+
273
+ def onTableClick(sender, sel, item)
274
+ begin
275
+
276
+ # purge viewers
277
+ @request_viewer.setText('')
278
+ @response_viewer.setText('')
279
+ row = item.row
280
+
281
+ if row >= 0 then
282
+ @scriptTable.selectRow(row, false)
283
+ chatid = @scriptTable.getRowText(item.row).to_i
284
+ # @logText.appendText("selected ID: (#{chatid})\n")
285
+ if chatid >= 0
286
+ chat = @project.getChat(chatid)
287
+ showChat(chat) if chat
288
+ @sel_row = row
289
+ @rem_button.enable
290
+ end
291
+ end
292
+ rescue => bang
293
+ puts "!!!ERROR: onTableClick"
294
+ puts bang
295
+ puts "!!!"
296
+
297
+ end
298
+ end
299
+
300
+ def removeRequest(sender, sel, item)
301
+ if @sel_row >= 0 then
302
+ @scriptTable.removeRows(@sel_row)
303
+ @scriptTable.killSelection(false)
304
+ @rem_button.disable
305
+ @sel_row = -1
306
+ end
307
+ end
308
+
309
+ def startSelectChatDialog(sender, sel, item)
310
+ begin
311
+ dlg = Watobo::Gui::SelectChatDialog.new(self, "Select Login Chat", @project.chats, @project)
312
+ if dlg.execute != 0 then
313
+
314
+ chats_selected = dlg.selection.value.split(",")
315
+
316
+ chats_selected.each do |chatid|
317
+ chat = @project.getChat(chatid.strip)
318
+ addRequest(chat) if chat
319
+ end
320
+ end
321
+ rescue => bang
322
+ puts "!!!ERROR: could not open SelectChatDialog."
323
+ puts bang
324
+ end
325
+ end
326
+
327
+ def addRequest(chat)
328
+ @scriptTable.addChat(chat)
329
+ end
330
+
331
+ def initialize(parent, project, target_chat)
332
+ @project = project
333
+ @request = target_chat.request
334
+ @table_filter = FXDataTarget.new('')
335
+ @sel_row = -1
336
+ super(parent, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
337
+
338
+ # main_splitter = FXSplitter.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|SPLITTER_HORIZONTAL|LAYOUT_FILL_Y|SPLITTER_TRACKING)
339
+ # left_frame = FXVerticalFrame.new(main_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE, :width => 400, :padding => 0)
340
+ # right_frame = FXVerticalFrame.new(main_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :width => 200, :padding => 0)
341
+
342
+ #chat_filter_frame = FXHorizontalFrame.new(left_frame, :opts => LAYOUT_FILL_X)
343
+ #FXLabel.new(chat_filter_frame, "Filter")
344
+ #@filter_text_field = FXTextField.new(chat_filter_frame, 20, @table_filter, FXDataTarget::ID_VALUE, FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X)
345
+
346
+ #chat_table_frame = FXVerticalFrame.new(left_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
347
+ splitter = FXSplitter.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|SPLITTER_VERTICAL|LAYOUT_FILL_Y|SPLITTER_TRACKING)
348
+ script_frame = FXVerticalFrame.new(splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE, :height => 300,:padding => 0)
349
+
350
+ frame = FXHorizontalFrame.new(script_frame, :opts => LAYOUT_FILL_X)
351
+ label = FXLabel.new(frame, "Token Script Requests:")
352
+ @add_button = FXButton.new(frame, "Add Request...", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT)
353
+ @add_button.connect(SEL_COMMAND, method(:startSelectChatDialog))
354
+
355
+ @rem_button = FXButton.new(frame, "Remove Request", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT)
356
+ @rem_button.connect(SEL_COMMAND, method(:removeRequest))
357
+ @rem_button.disable
358
+
359
+ label.setFont(FXFont.new(getApp(), "helvetica", 12, FONTWEIGHT_BOLD, FONTSLANT_ITALIC, FONTENCODING_DEFAULT))
360
+ script_table_frame = FXVerticalFrame.new(script_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
361
+ @scriptTable = ConversationTable.new(script_table_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
362
+ @scriptTable.connect(SEL_CLICKED, method(:onTableClick))
363
+
364
+ chat_viewer_frame = FXVerticalFrame.new(splitter, LAYOUT_FILL_X|LAYOUT_FILL_Y, :height => 300, :padding => 0)
365
+ tabBook = FXTabBook.new(chat_viewer_frame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT, :padding => 0)
366
+
367
+ req_tab = FXTabItem.new(tabBook, "Request", nil)
368
+ frame = FXVerticalFrame.new(tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
369
+ @request_viewer = Watobo::Gui::SimpleTextView.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN, :padding => 0)
370
+
371
+ resp_tab = FXTabItem.new(tabBook, "Response", nil)
372
+ frame = FXVerticalFrame.new(tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
373
+ @response_viewer = Watobo::Gui::SimpleTextView.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN, :padding => 0)
374
+
375
+ if @project and @request then
376
+ @project.getCSRFRequestIDs(@request).each do |id|
377
+ chat = @project.getChat(id)
378
+ addRequest(chat)
379
+ end
380
+ end
381
+ end
382
+ end
383
+
384
+ #
385
+ # S E S S I O N M A N A G E M E N T D I A L O G
386
+ #
387
+ class CSRFTokenDialog < FXDialogBox
388
+
389
+ include Watobo::Constants
390
+ include Watobo::Gui::Icons
391
+
392
+ def getTokenPatterns()
393
+ token_patterns = @tokenSettings.getTokenPatterns()
394
+ end
395
+
396
+ def getTokenScriptIds()
397
+ get_token_chat_ids = @tokenScriptSettings.getTokenScriptIds()
398
+ end
399
+
400
+ def initialize(owner, project, target_chat=nil)
401
+ @project = project
402
+ @target_chat = target_chat
403
+ # Invoke base class initialize function first
404
+ # super(owner, "LoginScript Wizzard", DECOR_TITLE|DECOR_BORDER,:width=>800, :height=>600)
405
+ super(owner, "One-Time-Token Management", DECOR_ALL, :width=>800, :height=>600)
406
+ self.icon = ICON_TOKEN
407
+ main_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
408
+
409
+ tabBook = FXTabBook.new(main_frame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
410
+
411
+ login_tab = FXTabItem.new(tabBook, "Token Script", nil)
412
+ @tokenScriptSettings = TokenScriptSettings.new(tabBook, @project, @target_chat)
413
+
414
+ sid_tab = FXTabItem.new(tabBook, "Token Patterns", nil)
415
+ # @sidFrame = FXVerticalFrame.new(tabBook, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
416
+ @tokenSettings = TokenSettings.new(tabBook, @project, @target_chat)
417
+
418
+ # logout_tab = FXTabItem.new(tabBook, "Logout Signatures", nil)
419
+ # @logoutSettings = LogoutSettings.new(tabBook, @project)
420
+
421
+ tabBook.connect(SEL_COMMAND) do |sender, sel, tabItem|
422
+ case tabItem.to_i
423
+ when 0
424
+ # puts "Login Script Selected"
425
+ when 1
426
+ # puts "Session IDs Selected"
427
+ ids = getTokenScriptIds()
428
+ @tokenSettings.updateRequests(ids)
429
+ when 2
430
+ # puts "Logout Selected"
431
+ end
432
+ end
433
+
434
+ button_frame = FXHorizontalFrame.new(main_frame, :opts => LAYOUT_FILL_X)
435
+ FXButton.new(button_frame, "OK" ,
436
+ :target => self, :selector => FXDialogBox::ID_ACCEPT,
437
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
438
+ FXButton.new(button_frame, "Cancel" ,
439
+ :target => self, :selector => FXDialogBox::ID_CANCEL,
440
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
441
+ end
442
+
443
+ end
444
+ #--
445
+ end
446
+ end