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