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,246 +1,237 @@
1
- #.
2
- # intercept_filter.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 Interceptor
13
- class Filter
14
-
15
- attr :match_type, :flags, :pattern
16
- def name
17
- self.class.to_s.gsub(/.*::/,'')
18
- end
19
-
20
- def negated?
21
- @negate
22
- end
23
-
24
- def negate=(state)
25
- @negate = state
26
- end
27
-
28
- def match?(item, flags)
29
-
30
- return !check?(item, flags) if @negate == true
31
- return check?(item, flags)
32
- end
33
-
34
- def initialize(pattern, prefs={})
35
- @flags = prefs.has_key?(:flags) ? prefs[:flags] : []
36
- @match_type = prefs.has_key?(:match_type) ? prefs[:match_type] : :match
37
- @negate = ( @match_type.to_s =~ /^not/ )
38
- @pattern = pattern
39
- end
40
-
41
- end
42
-
43
- class FlagFilter < Filter
44
- def check?(item, flags=nil)
45
- @flags.each do |f|
46
- return false unless flags.include? f
47
- end
48
- return true
49
- end
50
- end
51
-
52
- class UrlFilter < Filter
53
- def check?(item, flags=nil)
54
- return false unless item.respond_to? :url
55
- return true if @pattern.empty?
56
- match = false
57
- match = true if item.url =~ /#{@pattern}/i
58
- match
59
- end
60
-
61
- end
62
-
63
- class HttpParmsFilter < Filter
64
- def check?(item, flags=nil)
65
- return false unless item.respond_to? :parms
66
- return true if @pattern.empty?
67
- match = request.parms.find {|x| x =~ /#{@pattern}/ }
68
- match = !match_parms.nil?
69
- match
70
- end
71
- end
72
-
73
- class MethodFilter < Filter
74
- def check?(item, flags=nil)
75
- return false unless item.respond_to? :method
76
- return true if @pattern.empty?
77
- match = false
78
- match = true if item.method =~ /#{@pattern}/i
79
- match
80
- end
81
-
82
- end
83
-
84
- class StatusFilter < Filter
85
- def check?(item, flags=nil)
86
- return false unless item.respond_to? :method
87
- return true if @pattern.empty?
88
- match = false
89
- match = true if item.status =~ /#{@pattern}/i
90
- match
91
- end
92
-
93
- end
94
-
95
- class FilterChain
96
- def match?(item, flags=nil)
97
- @filters.each do |f|
98
- return false unless f.match?( item, flags )
99
- end
100
- true
101
- end
102
-
103
- def add_filter(filter)
104
- @filters << filter if filter.respond_to? :match?
105
-
106
- end
107
-
108
- def remove_filter(pos)
109
-
110
- end
111
-
112
- def set_filters(filter)
113
- @filters = filter
114
- end
115
-
116
- def list
117
- @filters
118
- end
119
-
120
- def clear
121
- @filters.clear
122
- end
123
-
124
- def initialize
125
- @filters = []
126
- end
127
- end
128
-
129
- class RequestFilter
130
- def match?(request)
131
- match_url = true
132
- # puts @request_filter_settings.to_yaml
133
-
134
- if url_filter != ''
135
- match_url = false
136
- if request.url.to_s =~ /#{url_filter}/i
137
- match_url = true
138
- end
139
- if negate_url_filter == true
140
- match_url = ( match_url == true ) ? false : true
141
- end
142
- end
143
-
144
- return false if match_url == false
145
-
146
- match_method = true
147
-
148
- if method_filter != ''
149
- match_method = false
150
- if request.method =~ /#{method_filter}/i
151
- match_method = true
152
- end
153
-
154
- if negate_method_filter == true
155
- match_method = ( match_method == true ) ? false : true
156
- end
157
- end
158
-
159
- return false if match_method == false
160
-
161
- match_ftype = true
162
- ftype_filter = file_type_filter
163
- if ftype_filter != ''
164
- match_ftype = false
165
- if request.doctype != '' and request.doctype =~ /#{ftype_filter}/i
166
- match_ftype = true
167
- end
168
- if negate_file_type_filter == true
169
- match_ftype = ( match_ftype == true ) ? false : true
170
- end
171
- end
172
- return false if match_ftype == false
173
-
174
- match_parms = true
175
- # parms_filter = @request_filter_settings[:parms_filter]
176
- if parms_filter != ''
177
- # puts "!PARMS FILTER: #{parms_filter}"
178
- match_parms = false
179
- puts request.parms
180
- match_parms = request.parms.find {|x| x =~ /#{parms_filter}/ }
181
- match_parms = ( match_parms.nil? ) ? false : true
182
- if negate_parms_filter == true
183
- match_parms = ( match_parms == true ) ? false : true
184
- end
185
- end
186
- return false if match_parms == false
187
-
188
- true
189
- end
190
-
191
- def initialize(parms)
192
- @settings = {
193
- :site_in_scope => false,
194
- :method_filter => '(get|post|put)',
195
- :negate_method_filter => false,
196
- :negate_url_filter => false,
197
- :url_filter => '',
198
- :file_type_filter => '(jpg|gif|png|jpeg|bmp)',
199
- :negate_file_type_filter => true,
200
-
201
- :parms_filter => '',
202
- :negate_parms_filter => false
203
- #:regex_location => 0, # TODO: HEADER_LOCATION, BODY_LOCATION, ALL
204
-
205
- }
206
- [ :site_in_scope, :method_filter,:negate_method_filter, :negate_url_filter,:url_filter, :file_type_filter,:negate_file_type_filter,:parms_filter,:negate_parms_filter].each do |k|
207
- @settings[k] = parms[k]
208
- end
209
- #:regex_location => 0, # TODO: HEADER_LOCATION, BODY_LOCATION, ALL
210
-
211
- end
212
-
213
- private
214
-
215
- def method_missing(name, *args, &block)
216
- # puts "* instance method missing (#{name})"
217
- @settings.has_key? name.to_sym || super
218
- @settings[name.to_sym]
219
- end
220
- end
221
-
222
- end
223
- end
224
-
225
- if $0 == __FILE__
226
- inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..","lib"))
227
- $: << inc_path
228
-
229
- require 'watobo'
230
-
231
- r = Watobo.create_request("www.siberas.com")
232
- puts r
233
- fc = Watobo::Interceptor::FilterChain.new
234
- fc.add_filter Watobo::Interceptor::UrlFilter.new("(www|\.de)")
235
- fc.add_filter Watobo::Interceptor::MethodFilter.new("GeT")
236
- m = fc.match? r
237
- puts m
238
-
239
- r = Watobo.create_request("sec.siberas.com")
240
- r.method = "Post"
241
- puts r
242
-
243
- m = fc.match? r
244
- puts m
245
-
2
+ module Watobo#:nodoc: all
3
+ module Interceptor
4
+ class Filter
5
+
6
+ attr :match_type, :flags, :pattern
7
+ def name
8
+ self.class.to_s.gsub(/.*::/,'')
9
+ end
10
+
11
+ def negated?
12
+ @negate
13
+ end
14
+
15
+ def negate=(state)
16
+ @negate = state
17
+ end
18
+
19
+ def match?(item, flags)
20
+
21
+ return !check?(item, flags) if @negate == true
22
+ return check?(item, flags)
23
+ end
24
+
25
+ def initialize(pattern, prefs={})
26
+ @flags = prefs.has_key?(:flags) ? prefs[:flags] : []
27
+ @match_type = prefs.has_key?(:match_type) ? prefs[:match_type] : :match
28
+ @negate = ( @match_type.to_s =~ /^not/ )
29
+ @pattern = pattern
30
+ end
31
+
32
+ end
33
+
34
+ class FlagFilter < Filter
35
+ def check?(item, flags=nil)
36
+ @flags.each do |f|
37
+ return false unless flags.include? f
38
+ end
39
+ return true
40
+ end
41
+ end
42
+
43
+ class UrlFilter < Filter
44
+ def check?(item, flags=nil)
45
+ return false unless item.respond_to? :url
46
+ return true if @pattern.empty?
47
+ match = false
48
+ match = true if item.url =~ /#{@pattern}/i
49
+ match
50
+ end
51
+
52
+ end
53
+
54
+ class HttpParmsFilter < Filter
55
+ def check?(item, flags=nil)
56
+ return false unless item.respond_to? :parms
57
+ return true if @pattern.empty?
58
+ match = request.parms.find {|x| x =~ /#{@pattern}/ }
59
+ match = !match_parms.nil?
60
+ match
61
+ end
62
+ end
63
+
64
+ class MethodFilter < Filter
65
+ def check?(item, flags=nil)
66
+ return false unless item.respond_to? :method
67
+ return true if @pattern.empty?
68
+ match = false
69
+ match = true if item.method =~ /#{@pattern}/i
70
+ match
71
+ end
72
+
73
+ end
74
+
75
+ class StatusFilter < Filter
76
+ def check?(item, flags=nil)
77
+ return false unless item.respond_to? :method
78
+ return true if @pattern.empty?
79
+ match = false
80
+ match = true if item.status =~ /#{@pattern}/i
81
+ match
82
+ end
83
+
84
+ end
85
+
86
+ class FilterChain
87
+ def match?(item, flags=nil)
88
+ @filters.each do |f|
89
+ return false unless f.match?( item, flags )
90
+ end
91
+ true
92
+ end
93
+
94
+ def add_filter(filter)
95
+ @filters << filter if filter.respond_to? :match?
96
+
97
+ end
98
+
99
+ def remove_filter(pos)
100
+
101
+ end
102
+
103
+ def set_filters(filter)
104
+ @filters = filter
105
+ end
106
+
107
+ def list
108
+ @filters
109
+ end
110
+
111
+ def clear
112
+ @filters.clear
113
+ end
114
+
115
+ def initialize
116
+ @filters = []
117
+ end
118
+ end
119
+
120
+ class RequestFilter
121
+ def match?(request)
122
+ match_url = true
123
+ # puts @request_filter_settings.to_yaml
124
+
125
+ if url_filter != ''
126
+ match_url = false
127
+ if request.url.to_s =~ /#{url_filter}/i
128
+ match_url = true
129
+ end
130
+ if negate_url_filter == true
131
+ match_url = ( match_url == true ) ? false : true
132
+ end
133
+ end
134
+
135
+ return false if match_url == false
136
+
137
+ match_method = true
138
+
139
+ if method_filter != ''
140
+ match_method = false
141
+ if request.method =~ /#{method_filter}/i
142
+ match_method = true
143
+ end
144
+
145
+ if negate_method_filter == true
146
+ match_method = ( match_method == true ) ? false : true
147
+ end
148
+ end
149
+
150
+ return false if match_method == false
151
+
152
+ match_ftype = true
153
+ ftype_filter = file_type_filter
154
+ if ftype_filter != ''
155
+ match_ftype = false
156
+ if request.doctype != '' and request.doctype =~ /#{ftype_filter}/i
157
+ match_ftype = true
158
+ end
159
+ if negate_file_type_filter == true
160
+ match_ftype = ( match_ftype == true ) ? false : true
161
+ end
162
+ end
163
+ return false if match_ftype == false
164
+
165
+ match_parms = true
166
+ # parms_filter = @request_filter_settings[:parms_filter]
167
+ if parms_filter != ''
168
+ # puts "!PARMS FILTER: #{parms_filter}"
169
+ match_parms = false
170
+ puts request.parms
171
+ match_parms = request.parms.find {|x| x =~ /#{parms_filter}/ }
172
+ match_parms = ( match_parms.nil? ) ? false : true
173
+ if negate_parms_filter == true
174
+ match_parms = ( match_parms == true ) ? false : true
175
+ end
176
+ end
177
+ return false if match_parms == false
178
+
179
+ true
180
+ end
181
+
182
+ def initialize(parms)
183
+ @settings = {
184
+ :site_in_scope => false,
185
+ :method_filter => '(get|post|put)',
186
+ :negate_method_filter => false,
187
+ :negate_url_filter => false,
188
+ :url_filter => '',
189
+ :file_type_filter => '(jpg|gif|png|jpeg|bmp)',
190
+ :negate_file_type_filter => true,
191
+
192
+ :parms_filter => '',
193
+ :negate_parms_filter => false
194
+ #:regex_location => 0, # TODO: HEADER_LOCATION, BODY_LOCATION, ALL
195
+
196
+ }
197
+ [ :site_in_scope, :method_filter,:negate_method_filter, :negate_url_filter,:url_filter, :file_type_filter,:negate_file_type_filter,:parms_filter,:negate_parms_filter].each do |k|
198
+ @settings[k] = parms[k]
199
+ end
200
+ #:regex_location => 0, # TODO: HEADER_LOCATION, BODY_LOCATION, ALL
201
+
202
+ end
203
+
204
+ private
205
+
206
+ def method_missing(name, *args, &block)
207
+ # puts "* instance method missing (#{name})"
208
+ @settings.has_key? name.to_sym || super
209
+ @settings[name.to_sym]
210
+ end
211
+ end
212
+
213
+ end
214
+ end
215
+
216
+ if $0 == __FILE__
217
+ inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..","lib"))
218
+ $: << inc_path
219
+
220
+ require 'watobo'
221
+
222
+ r = Watobo.create_request("www.siberas.com")
223
+ puts r
224
+ fc = Watobo::Interceptor::FilterChain.new
225
+ fc.add_filter Watobo::Interceptor::UrlFilter.new("(www|\.de)")
226
+ fc.add_filter Watobo::Interceptor::MethodFilter.new("GeT")
227
+ m = fc.match? r
228
+ puts m
229
+
230
+ r = Watobo.create_request("sec.siberas.com")
231
+ r.method = "Post"
232
+ puts r
233
+
234
+ m = fc.match? r
235
+ puts m
236
+
246
237
  end