More tweaks for the ssh page.
[arvados.git] / services / api / lib / current_api_client.rb
1 module CurrentApiClient
2   def current_user
3     Thread.current[:user]
4   end
5
6   def current_api_client
7     Thread.current[:api_client]
8   end
9
10   def current_api_client_authorization
11     Thread.current[:api_client_authorization]
12   end
13
14   def current_default_owner
15     # owner uuid for newly created objects
16     ((current_api_client_authorization &&
17       current_api_client_authorization.default_owner) ||
18      (current_user && current_user.default_owner) ||
19      (current_user && current_user.uuid) ||
20      nil)
21   end
22
23   # Where is the client connecting from?
24   def current_api_client_ip_address
25     Thread.current[:api_client_ip_address]
26   end
27
28   # Is the current client permitted to perform ALL actions on behalf
29   # of the authenticated user?
30   def current_api_client_trusted
31     Thread.current[:api_client_trusted]
32   end
33
34   def system_user_uuid
35     [Server::Application.config.uuid_prefix,
36      User.uuid_prefix,
37      '000000000000000'].join('-')
38   end
39
40   def system_user
41     if not $system_user
42       real_current_user = Thread.current[:user]
43       Thread.current[:user] = User.new(is_admin: true)
44       $system_user = User.where('uuid=?', system_user_uuid).first
45       if !$system_user
46         $system_user = User.new(uuid: system_user_uuid,
47                                 is_admin: true,
48                                 email: 'root',
49                                 first_name: 'root',
50                                 last_name: '')
51         $system_user.save!
52         $system_user.reload
53       end
54       Thread.current[:user] = real_current_user
55     end
56     $system_user
57   end
58
59   def act_as_system_user
60     Thread.current[:user] = system_user
61   end
62 end