require "arvados/keep"
require "uri"
-require "cgi"
class CollectionsController < ApplicationController
include ActionController::Live
return
end
+ # If we are configured to use a keep-web server, just redirect to
+ # the appropriate URL.
if Rails.configuration.keep_web_url or
Rails.configuration.keep_web_download_url
opts = {}
return redirect_to keep_web_url(params[:uuid], params[:file], opts)
end
+ # No keep-web server available. Get the file data with arv-get,
+ # and serve it through Rails.
+
file_name = params[:file].andand.sub(/^(\.\/|\/|)/, './')
if file_name.nil? or not coll.manifest.has_file?(file_name)
return render_not_found
if params["tab_pane"] == "Provenance_graph"
@prov_svg = ProvenanceHelper::create_provenance_graph(@object.provenance, "provenance_svg",
{:request => request,
- :direction => :bottom_up,
+ :direction => :top_down,
:combine_jobs => :script_only}) rescue nil
end
render 'hash_matches'
return
else
- jobs_with = lambda do |conds|
- Job.limit(RELATION_LIMIT).where(conds)
- .results.sort_by { |j| j.finished_at || j.created_at }
+ if Job.api_exists?(:index)
+ jobs_with = lambda do |conds|
+ Job.limit(RELATION_LIMIT).where(conds)
+ .results.sort_by { |j| j.finished_at || j.created_at }
+ end
+ @output_of = jobs_with.call(output: @object.portable_data_hash)
+ @log_of = jobs_with.call(log: @object.portable_data_hash)
end
- @output_of = jobs_with.call(output: @object.portable_data_hash)
- @log_of = jobs_with.call(log: @object.portable_data_hash)
+
@project_links = Link.limit(RELATION_LIMIT).order("modified_at DESC")
.where(head_uuid: @object.uuid, link_class: 'name').results
project_hash = Group.where(uuid: @project_links.map(&:tail_uuid)).to_hash
@permissions = Link.limit(RELATION_LIMIT).order("modified_at DESC")
.where(head_uuid: @object.uuid, link_class: 'permission',
name: 'can_read').results
- @logs = Log.limit(RELATION_LIMIT).order("created_at DESC")
- .select(%w(uuid event_type object_uuid event_at summary))
- .where(object_uuid: @object.uuid).results
- @is_persistent = Link.limit(1)
- .where(head_uuid: @object.uuid, tail_uuid: current_user.uuid,
- link_class: 'resources', name: 'wants')
- .results.any?
@search_sharing = search_scopes
if params["tab_pane"] == "Used_by"
@used_by_svg = ProvenanceHelper::create_provenance_graph(@object.used_by, "used_by_svg",
{:request => request,
- :direction => :top_down,
- :combine_jobs => :script_only,
- :pdata_only => true}) rescue nil
+ :direction => :top_down,
+ :combine_jobs => :script_only,
+ :pdata_only => true}) rescue nil
end
end
end
# Prefer the attachment-only-host when we want an attachment
# (and when there is no preview link configured)
tmpl = Rails.configuration.keep_web_download_url
- else
- test_uri = URI.parse(tmpl % fmt)
+ elsif not Rails.configuration.trust_all_content
+ check_uri = URI.parse(tmpl % fmt)
if opts[:query_token] and
- not test_uri.host.start_with?(munged_id + "--") and
- not test_uri.host.start_with?(munged_id + ".")
+ not check_uri.host.start_with?(munged_id + "--") and
+ not check_uri.host.start_with?(munged_id + ".")
# We're about to pass a token in the query string, but
# keep-web can't accept that safely at a single-origin URL
# template (unless it's -attachment-only-host).
raise ArgumentError, "Download precluded by site configuration"
end
logger.warn("Using download link, even though inline content " \
- "was requested: #{test_uri.to_s}")
+ "was requested: #{check_uri.to_s}")
end
end
uri.path += 't=' + opts[:path_token] + '/'
end
uri.path += '_/'
- uri.path += CGI::escape(file)
+ uri.path += URI.escape(file)
- query = CGI::parse(uri.query || '')
+ query = Hash[URI.decode_www_form(uri.query || '')]
{ query_token: 'api_token',
disposition: 'disposition' }.each do |opt, param|
if opts.include? opt
end
end
unless query.empty?
- uri.query = query.to_query
+ uri.query = URI.encode_www_form(query)
end
uri.to_s