summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/uploads_controller.rb35
1 files changed, 28 insertions, 7 deletions
diff --git a/app/controllers/projects/uploads_controller.rb b/app/controllers/projects/uploads_controller.rb
index 9020e86c44e..276dced8656 100644
--- a/app/controllers/projects/uploads_controller.rb
+++ b/app/controllers/projects/uploads_controller.rb
@@ -1,7 +1,11 @@
class Projects::UploadsController < Projects::ApplicationController
layout 'project'
- before_filter :project
+ # We want to skip these filters for only the `show` action if `image?` is true,
+ # but `skip_before_filter` doesn't work with both `only` and `if`, so we accomplish the same like this.
+ skipped_filters = [:authenticate_user!, :reject_blocked!, :project, :repository]
+ skip_before_filter *skipped_filters, only: [:show]
+ before_filter *skipped_filters, only: [:show], unless: :image?
def create
link_to_file = ::Projects::UploadService.new(project, params[:file]).
@@ -21,15 +25,32 @@ class Projects::UploadsController < Projects::ApplicationController
end
def show
- uploader = FileUploader.new(project, params[:secret])
+ return not_found! if uploader.nil? || !uploader.file.exists?
- return redirect_to uploader.url unless uploader.file_storage?
+ disposition = uploader.image? ? 'inline' : 'attachment'
+ send_file uploader.file.path, disposition: disposition
+ end
- uploader.retrieve_from_store!(params[:filename])
+ def uploader
+ return @uploader if defined?(@uploader)
- return not_found! unless uploader.file.exists?
+ namespace = params[:namespace_id]
+ id = params[:project_id]
- disposition = uploader.image? ? 'inline' : 'attachment'
- send_file uploader.file.path, disposition: disposition
+ file_project = Project.find_with_namespace("#{namespace}/#{id}")
+
+ if file_project.nil?
+ @uploader = nil
+ return
+ end
+
+ @uploader = FileUploader.new(file_project, params[:secret])
+ @uploader.retrieve_from_store!(params[:filename])
+
+ @uploader
+ end
+
+ def image?
+ uploader && uploader.file.exists? && uploader.image?
end
end