Merge branch '8784-dir-listings'
[arvados.git] / services / api / app / controllers / arvados / v1 / virtual_machines_controller.rb
index 84251db470fff95bbbc23f27397263124464c9d3..7a1c68071786363f367aab3a4121f9bbee29dcbe 100644 (file)
@@ -1,25 +1,33 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 class Arvados::V1::VirtualMachinesController < ApplicationController
   skip_before_filter :find_object_by_uuid, :only => :get_all_logins
   skip_before_filter :render_404_if_no_object, :only => :get_all_logins
   before_filter(:admin_required,
                 :only => [:logins, :get_all_logins])
 
+  # Get all login permissons (user uuid, login account, SSH key) for a
+  # single VM
   def logins
-    get_all_logins
+    render_logins_for VirtualMachine.where(uuid: @object.uuid)
   end
 
+  # Get all login permissons for all VMs
   def get_all_logins
+    render_logins_for VirtualMachine
+  end
+
+  protected
+
+  def render_logins_for vm_query
     @response = []
-    @vms = VirtualMachine.eager_load :login_permissions
-    if @object
-      @vms = @vms.where uuid: @object.uuid
-    else
-      @vms = @vms.all
-    end
+    @vms = vm_query.eager_load :login_permissions
     @users = {}
     User.eager_load(:authorized_keys).
       where('users.uuid in (?)',
-            @vms.map { |vm| vm.login_permissions.map &:tail_uuid }.flatten.uniq).
+            @vms.map { |vm| vm.login_permissions.map(&:tail_uuid) }.flatten.uniq).
       each do |u|
       @users[u.uuid] = u
     end