impliment an upper-bound expiration time
authorLunar <lunar@anargeek.net>
Mon, 16 Aug 2010 14:05:22 +0000 (16:05 +0200)
committerLunar <lunar@anargeek.net>
Mon, 16 Aug 2010 14:05:22 +0000 (16:05 +0200)
README
coquelicot_app.rb
lib/coquelicot.rb
test_coquelicot.rb

diff --git a/README b/README
index 83d17cf..92e246a 100644 (file)
--- a/README
+++ b/README
@@ -139,11 +139,6 @@ Future
    It might be interesting to also offer a calendar for specifying
    an exact date after which the file will be unavailable.
 
- * Upper-bound expiration time
-
-   Malicious users could specify an arbitrary number of minutes before
-   the file is expired. This should be limited by an upper-bound.
-
  * Hide file size (padding)
 
    There is currently a real close mapping from original file size to
index 42f6ded..432d164 100644 (file)
@@ -64,6 +64,8 @@ post '/upload' do
   end
   if params[:expire].nil? or params[:expire].to_i == 0 then
     params[:expire] = Coquelicot.settings.default_expire
+  elsif params[:expire].to_i > Coquelicot.settings.maximum_expire then
+    error 403
   end
   expire_at = Time.now + 60 * params[:expire].to_i
   one_time_only = params[:one_time] and params[:one_time] == 'true'
index 18f99c1..3cc714b 100644 (file)
@@ -267,6 +267,7 @@ module Coquelicot
   end
 
   DEFAULT_SETTINGS = { :default_expire => 60,
+                       :maximum_expire => 60 * 24 * 30, # 1 month
                        :gone_period => 10080,
                        :filename_length => 20,
                        :random_pass_length => 16,
index 3b88b6c..b210ec1 100644 (file)
@@ -165,6 +165,11 @@ describe 'Coquelicot' do
     end
   end
 
+  it "should not allow an expiration time longer than the maximum" do
+    upload :expire => 60 * 24 * 31 * 12 # 1 year
+    last_response.status.should eql(403)
+  end
+
   it "should cleanup expired files" do
     url = upload :expire => 60, :file_key => 'test' # 1 hour
     url_name = url.split('/')[-1]