fix :id -> {uuid} subst in discovery doc when generating from rails routes
[arvados.git] / services / api / app / controllers / arvados / v1 / keep_disks_controller.rb
index 30ad035577dad6d9c5da85eae3c113ab302c2b38..543863dde6b0312bec963beb99d3c6f6956a8b8f 100644 (file)
@@ -1,10 +1,35 @@
 class Arvados::V1::KeepDisksController < ApplicationController
-  skip_before_filter :login_required, :only => :ping
+  skip_before_filter :require_auth_scope_all, :only => :ping
 
+  def self._ping_requires_parameters
+    {
+      uuid: false,
+      ping_secret: true,
+      ec2_instance_id: false,
+      local_ipv4: false,
+      filesystem_uuid: false,
+      service_port: true,
+      service_ssl_flag: true
+    }
+  end
   def ping
-    @object.ping({ ip: params[:local_ipv4] || request.env['REMOTE_ADDR'],
-                   ping_secret: params[:ping_secret],
-                   ec2_instance_id: params[:instance_id] })
+    if !@object and params[:filesystem_uuid] and current_user and current_user.is_admin
+      if KeepDisk.where('filesystem_uuid=?', params[:filesystem_uuid]).empty?
+        @object = KeepDisk.new filesystem_uuid: params[:filesystem_uuid]
+        @object.save!
+        params[:ping_secret] = @object.ping_secret
+      else
+        raise "ping from keep_disk with existing filesystem_uuid #{params[:filesystem_uuid]} but wrong uuid #{params[:uuid]}"
+      end
+    end
+
+    if !@object
+      return render_not_found "object not found"
+    end
+
+    params.merge!(service_host:
+                  params[:local_ipv4] || request.env['REMOTE_ADDR'])
+    @object.ping params
     show
   end
 end