files_controller.rb revision 9a85fb6390203b5e202dcc2a9d7e10ad3896096d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass FilesController < ApplicationController
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync helper_method :repository, :ref, :oid, :path, :branch_name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync before_filter :check_write_permissions, only: [:new, :create, :update]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync before_filter :check_read_permissions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OWL_API_HEADER_PARTS = ['text/xml;',
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 'text/html, image/gif, image/jpeg, *;']
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def files
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @info = repository.path_info(params[:path], oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync raise Repository::FileNotFoundError, path if @info.nil?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if owl_api_header_in_accept_header?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync send_download(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync elsif request.format == 'text/html' || @info[:type] != :file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case @info[:type]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync when :file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @file = repository.read_file(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync when :file_base
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ontology = repository.ontologies.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync where(basepath: File.basepath(@info[:entry][:path])).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync order('id asc').first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if request.query_string.present?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ontology = ontology.children.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync where(name: request.query_string).first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync redirect_to [repository, ontology]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync send_download(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def download
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync send_download(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def entries_info
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync render json: repository.entries_info(oid, path)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def diff
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @message = repository.commit_message(oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @changed_files = repository.changed_files(oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def history
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @per_page = 25
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync page = @page = params[:page].nil? ? 1 : params[:page].to_i
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync offset = page > 0 ? (page - 1) * @per_page : 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @ontology = repository.primary_ontology(path)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if repository.empty?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @commits = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @current_file = repository.read_file(path, oid) if path && !repository.dir?(path)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @commits = repository.commits(start_oid: oid, path: path, offset: offset, limit: @per_page)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def new
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync build_file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def create
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if build_file.valid?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync repository.save_file @file.file.path, @file.filepath, @file.message, current_user
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync flash[:success] = "Successfully saved the uploaded file."
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ontology = repository.ontologies.find_by_file(@file.filepath)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync redirect_to edit_repository_ontology_path(repository, ontology)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync redirect_to fancy_repository_path(repository, path: @file.filepath)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync render :new
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def update
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if update_file.valid?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync repository.save_file @file_changed.file.path, @file_changed.filepath, @file_changed.message, current_user
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileUtils.rm_rf(@file_changed.file.path)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync flash[:success] = "Successfully changed the file."
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync redirect_to fancy_repository_path(repository, path: @file_changed.filepath)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @info = repository.path_info(params[:path], oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @file = repository.read_file(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @info[:file][:content] = params[:content]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @file[:content] = params[:content]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync flash[:error] = @file_changed.errors
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync render :files
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync protected
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def repository
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @repository ||= Repository.find_by_path!(params[:repository_id])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def ref
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync params[:ref] || 'master'
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def build_file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync args = params[:upload_file].merge({repository: repository}) unless params[:upload_file].nil?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @file ||= UploadFile.new(args)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def update_file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync filepath = Rails.root.join('tmp', 'files', oid, "#{Time.now.nsec}_#{params[:path].split('/')[-1]}")
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileUtils.mkdir_p(filepath.split[0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync tmp_file = File.open(filepath, 'w+') do |f|
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync f.write(params[:content])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @file_changed = UploadFile.new(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync target_directory: params[:path].split('/')[0..-2].join('/'),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync target_filename: params[:path].split('/')[-1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync message: params[:message],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync repository: repository,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync file: File.new(filepath))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def check_read_permissions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync authorize! :show, repository
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def check_write_permissions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync authorize! :write, repository
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def send_download(path, oid)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync render text: repository.read_file(path, oid)[:content],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync content_type: Mime::Type.lookup('application/force-download')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def commit_id
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @commit_id ||= repository.commit_id(params[:ref])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def oid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @oid ||= commit_id[:oid] unless commit_id.nil?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def branch_name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync commit_id[:branch_name]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def path
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync params[:path]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def owl_api_header_in_accept_header?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OWL_API_HEADER_PARTS.any? do |owl_api_header_part|
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync request.headers['Accept'].try(:include?, owl_api_header_part)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync end
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncend
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync