Merge branch '8784-dir-listings'
[arvados.git] / services / api / app / controllers / arvados / v1 / keep_disks_controller.rb
index 3d9191641ee5a1d0f92a65b6e76cb7cd7b99c86a..9b4c342a72a062e2e6a64a64466e5af0dd5ece28 100644 (file)
@@ -1,28 +1,44 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 class Arvados::V1::KeepDisksController < ApplicationController
-  skip_before_filter :require_auth_scope_all, :only => :ping
+  skip_before_filter :require_auth_scope, only: :ping
+  skip_before_filter :render_404_if_no_object, only: :ping
 
   def self._ping_requires_parameters
     {
-      uuid: false,
-      ping_secret: true,
-      node_uuid: false,
-      filesystem_uuid: false,
-      service_host: false,
-      service_port: true,
-      service_ssl_flag: true
+      uuid: {required: false},
+      ping_secret: {required: true},
+      node_uuid: {required: false},
+      filesystem_uuid: {required: false},
+      service_host: {required: false},
+      service_port: {required: true},
+      service_ssl_flag: {required: true}
     }
   end
 
   def ping
     params[:service_host] ||= request.env['REMOTE_ADDR']
+    if !params[:uuid] && current_user.andand.is_admin
+      # Create a new KeepDisk and ping it.
+      @object = KeepDisk.new(filesystem_uuid: params[:filesystem_uuid])
+      @object.save!
+
+      # In the first ping from this new filesystem_uuid, we can't
+      # expect the keep node to know the ping_secret so we made sure
+      # we got an admin token. Here we add ping_secret to params so
+      # the ping call below is properly authenticated.
+      params[:ping_secret] = @object.ping_secret
+    end
     act_as_system_user do
-      if not @object.ping params
+      if !@object.andand.ping(params)
         return render_not_found "object not found"
       end
       # Render the :superuser view (i.e., include the ping_secret) even
       # if !current_user.is_admin. This is safe because @object.ping's
       # success implies the ping_secret was already known by the client.
-      render json: @object.as_api_response(:superuser)
+      send_json @object.as_api_response(:superuser)
     end
   end
 
@@ -31,20 +47,4 @@ class Arvados::V1::KeepDisksController < ApplicationController
     @objects = model_class.where('1=1')
     super
   end
-
-  def find_object_by_uuid
-    @object = KeepDisk.where(uuid: (params[:id] || params[:uuid])).first
-    if !@object && current_user.andand.is_admin
-      # Create a new KeepDisk and ping it.
-      @object = KeepDisk.new(filesystem_uuid: params[:filesystem_uuid])
-      @object.save!
-
-      # In the first ping from this new filesystem_uuid, we can't
-      # expect the keep node to know the ping_secret so we made sure
-      # we got an admin token. Here we add ping_secret to params so
-      # KeepNode.ping() understands this update is properly
-      # authenticated.
-      params[:ping_secret] = @object.ping_secret
-    end
-  end
 end