+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
require "arvados/collection"
+require "app_version"
class ActionsController < ApplicationController
- skip_filter :require_thread_api_token, only: [:report_issue_popup, :report_issue]
- skip_filter :check_user_agreements, only: [:report_issue_popup, :report_issue]
+ # Skip require_thread_api_token if this is a show action
+ # for an object uuid that supports anonymous access.
+ skip_around_action :require_thread_api_token, if: proc { |ctrl|
+ !Rails.configuration.Users.AnonymousUserToken.empty? and
+ 'show' == ctrl.action_name and
+ params['uuid'] and
+ model_class.in?([Collection, Group, Job, PipelineInstance, PipelineTemplate])
+ }
+ skip_around_action :require_thread_api_token, only: [:report_issue_popup, :report_issue]
+ skip_before_action :check_user_agreements, only: [:report_issue_popup, :report_issue]
@@exposed_actions = {}
def self.expose_action method, &block
@object.link_class == 'name' and
ArvadosBase::resource_class_for_uuid(@object.head_uuid) == Collection
redirect_to collection_path(id: @object.uuid)
+ elsif @object.is_a?(Group) and @object.group_class == 'project'
+ redirect_to project_path(id: @object.uuid)
elsif @object
redirect_to @object
else
end
end
if resource_class == Collection
- dst.manifest_text = Collection.select([:manifest_text]).where(uuid: src.uuid).first.manifest_text
+ dst.manifest_text = Collection.select([:manifest_text]).where(uuid: src.uuid).with_count("none").first.manifest_text
end
when :move
dst = src
end
expose_action :combine_selected_files_into_collection do
- link_uuids, coll_ids = params["selection"].partition do |sel_s|
- ArvadosBase::resource_class_for_uuid(sel_s) == Link
- end
-
- unless link_uuids.empty?
- Link.select([:head_uuid]).where(uuid: link_uuids).each do |link|
- if ArvadosBase::resource_class_for_uuid(link.head_uuid) == Collection
- coll_ids << link.head_uuid
- end
- end
- end
-
- uuids = []
- pdhs = []
- source_paths = Hash.new { |hash, key| hash[key] = [] }
- coll_ids.each do |coll_id|
- if m = CollectionsHelper.match(coll_id)
- key = m[1] + m[2]
- pdhs << key
- source_paths[key] << m[4]
- elsif m = CollectionsHelper.match_uuid_with_optional_filepath(coll_id)
- key = m[1]
- uuids << key
- source_paths[key] << m[4]
- end
- end
-
- unless pdhs.empty?
- Collection.where(portable_data_hash: pdhs.uniq).
- select([:uuid, :portable_data_hash]).each do |coll|
- unless source_paths[coll.portable_data_hash].empty?
- uuids << coll.uuid
- source_paths[coll.uuid] = source_paths.delete(coll.portable_data_hash)
- end
- end
- end
+ uuids, source_paths = selected_collection_files params
new_coll = Arv::Collection.new
- Collection.where(uuid: uuids.uniq).
+ Collection.where(uuid: uuids.uniq).with_count("none").
select([:uuid, :manifest_text]).each do |coll|
src_coll = Arv::Collection.new(coll.manifest_text)
src_pathlist = source_paths[coll.uuid]
respond_to do |format|
IssueReporter.send_report(current_user, params).deliver
- format.js {render nothing: true}
+ format.js {render body: nil}
end
end
- expose_action :webshell do
- shell_in_a_box_url_config = Rails.configuration.shell_in_a_box_url
-
- return render_not_found if not shell_in_a_box_url_config
-
- return unprocessable "Missing parameters" if not params['login'] or not params['hostname']
-
- @webshell_login = params['login']
- @webshell_hostname = params['hostname'].chomp('.shell')
-
- if not shell_in_a_box_url_config.end_with?('/')
- shell_in_a_box_url_config += '/'
+ # star / unstar the current project
+ def star
+ links = Link.where(owner_uuid: current_user.uuid,
+ head_uuid: @object.uuid,
+ link_class: 'star')
+
+ if params['status'] == 'create'
+ # create 'star' link if one does not already exist
+ if !links.andand.any?
+ dst = Link.new(owner_uuid: current_user.uuid,
+ tail_uuid: current_user.uuid,
+ head_uuid: @object.uuid,
+ link_class: 'star',
+ name: @object.uuid)
+ dst.save!
+ end
+ else # delete any existing 'star' links
+ if links.andand.any?
+ links.each do |link|
+ link.destroy
+ end
+ end
end
- @webshell_url = shell_in_a_box_url_config + @webshell_hostname + '/'
respond_to do |format|
- render partial: 'virtual_machines/webshell'
- return
+ format.js
end
end