49 lines
		
	
	
		
			1015 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1015 B
		
	
	
	
		
			Ruby
		
	
	
	
# Controller for viewing a file's raw
 | 
						|
class Projects::RawController < Projects::ApplicationController
 | 
						|
  include ExtractsPath
 | 
						|
  include BlobHelper
 | 
						|
 | 
						|
  before_action :require_non_empty_project
 | 
						|
  before_action :assign_ref_vars
 | 
						|
  before_action :authorize_download_code!
 | 
						|
 | 
						|
  def show
 | 
						|
    @blob = @repository.blob_at(@commit.id, @path)
 | 
						|
 | 
						|
    if @blob
 | 
						|
      headers['X-Content-Type-Options'] = 'nosniff'
 | 
						|
 | 
						|
      return if cached_blob?
 | 
						|
 | 
						|
      if @blob.lfs_pointer?
 | 
						|
        send_lfs_object
 | 
						|
      else
 | 
						|
        send_git_blob @repository, @blob
 | 
						|
      end
 | 
						|
    else
 | 
						|
      render_404
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def send_lfs_object
 | 
						|
    lfs_object = find_lfs_object
 | 
						|
 | 
						|
    if lfs_object && lfs_object.project_allowed_access?(@project)
 | 
						|
      send_file lfs_object.file.path, filename: @blob.name, disposition: 'attachment'
 | 
						|
    else
 | 
						|
      render_404
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def find_lfs_object
 | 
						|
    lfs_object = LfsObject.find_by_oid(@blob.lfs_oid)
 | 
						|
    if lfs_object && lfs_object.file.exists?
 | 
						|
      lfs_object
 | 
						|
    else
 | 
						|
      nil
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |