lib/superhosting/controller/admin/container.rb in superhosting-0.0.1 vs lib/superhosting/controller/admin/container.rb in superhosting-0.0.2

- old
+ new

@@ -1,23 +1,83 @@ module Superhosting module Controller class Admin class Container < Base - def initialize(name:, **kvargs) + def initialize(name:, **kwargs) + super(kwargs) @admin_name = name - super(kvargs) + @user_controller = self.get_controller(User) + @admin_controller = self.get_controller(Admin) + @container_controller = self.get_controller(Controller::Container) + @admin_passwd = @config.admins.f(@admin_name).passwd + + @admin_controller.existing_validation(name: @admin_name).net_status_ok! end def list + containers = @container_controller._list + container_users = containers.map do |container_name, data| + unless @user_controller._get(name: "#{container_name}_admin_#{@admin_name}").nil? + { container: container_name, user: "#{container_name}_admin_#{@admin_name}" } + end + end.compact + { data: container_users } end def add(name:) + admin_name = "admin_#{@admin_name}" + if (resp = @container_controller.available_validation(name: name)).net_status_ok? and + (resp = @user_controller.not_existing_validation(name: admin_name, container_name: name)).net_status_ok? + user, encrypted_password = @admin_passwd.split(':') + if (resp = @user_controller._add(name: admin_name, container_name: name, shell: '/bin/bash')).net_status_ok? + resp = encrypted_password.nil? ? {} : @user_controller._update_password(name: "#{name}_#{admin_name}", encrypted_password: encrypted_password) + end + end + resp end def delete(name:) + admin_name = "admin_#{@admin_name}" + if (resp = @container_controller.available_validation(name: name)).net_status_ok? and + (resp = @user_controller.existing_validation(name: admin_name, container_name: name)).net_status_ok? + resp = @user_controller.delete(name: admin_name, container_name: name) + end + resp + end + + def _containers_list + if (resp = self.list).net_status_ok? + containers = resp[:data].map {|elm| elm[:container] } + { data: containers } + else + resp + end + end + + def _users_list + if (resp = self.list).net_status_ok? + users = resp[:data].map {|elm| elm[:user] } + { data: users } + else + resp + end + end + + def _delete_all_users + if (resp = self._containers_list).net_status_ok? + containers = resp[:data] + containers.each do |container_name| + unless (resp = self.delete(name: container_name)).net_status_ok? + return resp + end + end + {} + else + resp + end end end end end end \ No newline at end of file