Files
gitlabhq/app/controllers/uploads_controller.rb
T
Dmitriy Zaporozhets be4d340381 Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq into ce-to-ee
Conflicts:
	Gemfile.lock
	app/controllers/uploads_controller.rb
	app/models/application_setting.rb
	app/models/project_services/issue_tracker_service.rb
	app/views/projects/services/_form.html.haml
	db/schema.rb
	doc/integration/README.md
	features/steps/groups.rb
2015-03-11 18:41:41 -07:00

73 lines
1.5 KiB
Ruby

class UploadsController < ApplicationController
skip_before_filter :authenticate_user!
before_filter :find_model, :authorize_access!
def show
uploader = @model.send(upload_mount)
unless uploader.file_storage?
return redirect_to uploader.url
end
unless uploader.file && uploader.file.exists?
return not_found!
end
disposition = uploader.image? ? 'inline' : 'attachment'
send_file uploader.file.path, disposition: disposition
end
private
def find_model
unless upload_model && upload_mount
return not_found!
end
@model = upload_model.find(params[:id])
end
def authorize_access!
authorized =
case @model
when Project
can?(current_user, :read_project, @model)
when Group
can?(current_user, :read_group, @model)
when Note
can?(current_user, :read_project, @model.project)
else
# No authentication required for user avatars.
true
end
return if authorized
if current_user
not_found!
else
authenticate_user!
end
end
def upload_model
upload_models = {
user: User,
project: Project,
note: Note,
group: Group,
appearance: Appearance
}
upload_models[params[:model].to_sym]
end
def upload_mount
upload_mounts = %w(avatar attachment file logo light_logo)
if upload_mounts.include?(params[:mounted_as])
params[:mounted_as]
end
end
end