Show More
Commit Description:
returns correct content type for task description download
Commit Description:
returns correct content type for task description download
File last commit:
Show/Diff file:
Action:
app/controllers/tasks_controller.rb | 60 lines | 1.7 KiB | text/x-ruby | RubyLexer |
class TasksController < ApplicationController
before_filter :authenticate, :check_viewability
def index
redirect_to :action => 'list'
end
def list
@problems = Problem.find_available_problems
@user = User.find(session[:user_id])
end
def view
base_name = params[:file]
if !check_user_viewability(base_name)
redirect_to :action => 'index' and return
end
base_filename = File.basename("#{base_name}.#{params[:ext]}")
filename = "#{Problem.download_file_basedir}/#{base_filename}"
if !check_user_viewability(base_name) or !FileTest.exists?(filename)
redirect_to :action => 'index' and return
end
if defined?(USE_APACHE_XSENDFILE) and USE_APACHE_XSENDFILE
response.headers['Content-Type'] = "application/force-download"
response.headers['Content-Disposition'] = "attachment; filename=\"#{File.basename(filename)}\""
response.headers["X-Sendfile"] = filename
response.headers['Content-length'] = File.size(filename)
render :nothing => true
else
if params[:ext]=='pdf'
content_type = 'application/pdf'
else
content_type = 'application/octet-stream'
end
send_file filename, :stream => false, :filename => base_filename, :type => content_type
end
end
protected
def check_viewability
@user = User.find(session[:user_id])
if @user==nil or !Configuration.show_tasks_to?(@user)
redirect_to :controller => 'main', :action => 'list'
return false
end
end
def check_user_viewability(filename)
# individual file access control shall be added here
return false if not @user
return Configuration.show_tasks_to?(@user)
end
end