Provide UUID prefix used for each schema in discovery document.
[arvados.git] / services / api / app / controllers / arvados / v1 / keep_disks_controller.rb
1 class Arvados::V1::KeepDisksController < ApplicationController
2   skip_before_filter :require_auth_scope_all, :only => :ping
3   skip_before_filter :find_object_by_uuid, :only => :ping
4
5   def self._ping_requires_parameters
6     {
7       uuid: false,
8       ping_secret: true,
9       node_uuid: false,
10       filesystem_uuid: false,
11       service_host: false,
12       service_port: true,
13       service_ssl_flag: true
14     }
15   end
16   def ping
17     @object = Node.where(uuid: (params[:id] || params[:uuid])).first
18     if !@object
19       if current_user.andand.is_admin
20         @object = KeepDisk.new(filesystem_uuid: params[:filesystem_uuid])
21         @object.save!
22
23         # In the first ping from this new filesystem_uuid, we can't
24         # expect the keep node to know the ping_secret so we made sure
25         # we got an admin token. Here we add ping_secret to params so
26         # KeepNode.ping() understands this update is properly
27         # authenticated.
28         params[:ping_secret] = @object.ping_secret
29       else
30         return render_not_found "object not found"
31       end
32     end
33
34     params[:service_host] ||= request.env['REMOTE_ADDR']
35     if not @object.ping params
36       return render_not_found "object not found"
37     end
38     render json: @object.as_api_response(:superuser)
39   end
40
41   def find_objects_for_index
42     # all users can list all keep disks
43     @objects = model_class.where('1=1')
44     super
45   end
46 end