Description:
git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@227 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r108:79cec9e5ddcb - - 2 files changed: 39 inserted, 2 deleted
@@ -0,0 +1,39 | |||
|
1 | + class SizeFilterHandler < Mongrel::HttpHandler | |
|
2 | + | |
|
3 | + def initialize(options = {}) | |
|
4 | + @max_size = options[:max_size] || -1 | |
|
5 | + @redirect_url = options[:redirect_url] | |
|
6 | + @request_notify = true | |
|
7 | + end | |
|
8 | + | |
|
9 | + def request_begins(params) | |
|
10 | + @request_too_large = false | |
|
11 | + | |
|
12 | + # Only operate on POST requests | |
|
13 | + return unless params[Mongrel::Const::REQUEST_METHOD] == 'POST' | |
|
14 | + | |
|
15 | + if params[Mongrel::Const::CONTENT_LENGTH]!=nil | |
|
16 | + req_size = params[Mongrel::Const::CONTENT_LENGTH].to_i | |
|
17 | + if @max_size!=-1 and req_size > @max_size | |
|
18 | + @request_too_large = true | |
|
19 | + end | |
|
20 | + else | |
|
21 | + @request_too_large = true | |
|
22 | + end | |
|
23 | + end | |
|
24 | + | |
|
25 | + def process(request, response) | |
|
26 | + if @request_too_large | |
|
27 | + if @redirect_url != nil | |
|
28 | + response.socket.write(Mongrel::Const::REDIRECT % @redirect_url) | |
|
29 | + else | |
|
30 | + response.socket.write(Mongrel::Const::STATUS_FORMAT % [403, "Forbidden"]) | |
|
31 | + end | |
|
32 | + response.finished() | |
|
33 | + end | |
|
34 | + end | |
|
35 | + end | |
|
36 | + | |
|
37 | + uri "/", :handler => SizeFilterHandler.new(:max_size => 200_000, | |
|
38 | + :redirect_url => "/main/list"), | |
|
39 | + :in_front => true |
You need to be logged in to leave comments.
Login now