implement 'should allow retrieval of a password protected file'
authorLunar <lunar@anargeek.net>
Sun, 1 Aug 2010 22:25:08 +0000 (00:25 +0200)
committerLunar <lunar@anargeek.net>
Sun, 1 Aug 2010 22:35:47 +0000 (00:35 +0200)
coquelicot.rb
test_coquelicot.rb

index 753eaad..dd84509 100644 (file)
@@ -269,7 +269,8 @@ get '/ready/:link' do |link|
     not_found
   end
   base = request.url.gsub(/\/ready\/[^\/]*$/, '')
-  @url = "#{base}/#{link}-#{pass}"
+  @url = "#{base}/#{link}-#{pass}" unless pass.nil?
+  @url ||= "#{base}/#{link}"
   haml :ready
 end
 
@@ -285,10 +286,10 @@ post '/upload' do
     @error = "No file selected"
     return haml(:index)
   end
-  if params[:file_key] then
-    pass = params[:file_key]
-  else
+  if params[:file_key].nil? or params[:file_key].empty?then
     pass = gen_random_pass
+  else
+    pass = params[:file_key]
   end
   src = params[:file][:tempfile]
   link = depot.add_file(
@@ -297,7 +298,7 @@ post '/upload' do
        "Length" => src.stat.size,
        "Content-Type" => params[:file][:type]
      })
-  redirect "ready/#{link}-#{pass}" if params[:file_key].nil?
+  redirect "ready/#{link}-#{pass}" if params[:file_key].nil? or params[:file_key].empty?
   redirect "ready/#{link}"
 end
 
@@ -318,7 +319,8 @@ get '/:link' do |link|
     not_found unless send_stored_file(link, pass)
   end
   not_found unless depot.file_exists? link
-  haml :file_key
+  @link = link
+  haml :enter_file_key
 end
 
 post '/:link' do |link|
@@ -372,11 +374,11 @@ __END__
 .url
   %a{ :href => @url }= @url
 
-@@ file_key
+@@ enter_file_key
 %h1 Enter file key…
 %form{ :action => @link, :method => 'post' }
   .field
-    %input{ :type => 'file_key', :name => 'file_key' }
+    %input{ :type => 'text', :id => 'file_key', :name => 'file_key' }
   .field
     %input{ :type => 'submit', :value => 'Get file' }
 
index 559e551..815917d 100644 (file)
@@ -111,10 +111,31 @@ describe 'Coquelicot' do
 
   it "should give a random password when asked"
 
-  it "should allow retrieval of a password protected file"
+  it "should allow retrieval of a password protected file" do
+    post '/upload', 'file' => Rack::Test::UploadedFile.new(__FILE__, 'text/x-script.ruby'),
+                    'file_key' => 'somethingSecret',
+                    'upload_password' => UPLOAD_PASSWORD
+    last_response.redirect?.should be_true
+    follow_redirect!
+    last_response.should be_ok
+    doc = Hpricot(last_response.body)
+    url = (doc/'a').collect { |a| a.attributes['href'] }.
+      select { |h| h.start_with? "http://#{last_request.host}/" }[0]
+    get url
+    last_response.should be_ok
+    doc = Hpricot(last_response.body)
+    (doc/'input#file_key').should have(1).items
+    url = (doc/'form')[0].attributes['action']
+    post url, 'file_key' => 'somethingSecret'
+    last_response.should be_ok
+    last_response['Content-Type'].should eql('text/x-script.ruby')
+    last_response.body.should eql(File.new(__FILE__).read)
+  end
 
   it "should not allow retrieval of a password protected file without the password"
 
+  it "should not allow retrieval of a password protected file with a wrong password"
+
   it "should not allow retrieval after the time limit has expired"
 
   it "should cleanup expired files"