Class: Superhosting::Controller::Admin

Inherits:
Base
  • Object
show all
Defined in:
lib/superhosting/controller/admin.rb,
lib/superhosting/controller/admin/container.rb

Defined Under Namespace

Classes: Container

Instance Attribute Summary

Attributes inherited from Base

#config, #lib

Instance Method Summary collapse

Methods inherited from Base

#repair

Methods inherited from Base

#get_base_controller_options, #get_controller

Methods included from Helpers

#instance_variables_to_hash

Methods included from Helper::Config

#_config, #_config_options, #_save_registry!, #apply, #configure, #configure_with_apply, #reconfig, #unapply, #unconfigure, #unconfigure_with_unapply

Methods included from Helper::Cmd

#_command, #_command_without_debug, #command, #command!

Methods included from Helper::File

#chmod!, #chown!, #chown_r!, #safe_link!, #safe_unlink!

Methods included from Helper::Logger

#__debug, #__dry_run, #__dry_run=, #__logger, #__logger=, #debug, #debug_block, #debug_operation, #indent, #indent=, #indent_reset, #indent_step, #indent_step_back, #info, #storage, #t, #with_dry_run, #with_indent, #with_logger

Constructor Details

#initialize(**kwargs) ⇒ Admin

Returns a new instance of Admin.



4
5
6
7
# File 'lib/superhosting/controller/admin.rb', line 4

def initialize(**kwargs)
  super(**kwargs)
  @admins_mapper = @config.admins
end

Instance Method Details

#add(name:, generate: false) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/superhosting/controller/admin.rb', line 25

def add(name:, generate: false)
  if (resp = self.not_existing_validation(name: name)).net_status_ok?
    admin_dir = @admins_mapper.f(name)
    admin_dir.create!
    admin_dir.passwd.put!(name)
    self.reindex_admin(name: name)
    self.command!("chmod 640 #{admin_dir.path}")
    self.passwd(name: name, generate: generate)
  else
    resp
  end
end

#container(name:) ⇒ Object



68
69
70
# File 'lib/superhosting/controller/admin.rb', line 68

def container(name:)
  self.get_controller(Container, name: name)
end

#delete(name:) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/superhosting/controller/admin.rb', line 38

def delete(name:)
  if (resp = self.existing_validation(name: name)).net_status_ok?
    admin_container_controller = self.get_controller(Admin::Container, name: name)
    if (resp = admin_container_controller._delete_all_users).net_status_ok?
      admin_dir = @admins_mapper.f(name)
      admin_dir.delete!
      self.reindex_admin(name: name)
    end
  end
  resp
end

#existing_validation(name:) ⇒ Object



72
73
74
# File 'lib/superhosting/controller/admin.rb', line 72

def existing_validation(name:)
  (@admins_mapper.f(name)).nil? ? { error: :logical_error, code: :admin_does_not_exists, data: { name: name } } : {}
end

#indexObject



80
81
82
# File 'lib/superhosting/controller/admin.rb', line 80

def index
  @@index ||= self.reindex
end

#listObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/superhosting/controller/admin.rb', line 9

def list
  admins = {}
  @admins_mapper.grep_dirs.map do |dir_name|
    admin_name = dir_name.name

    container_admin_controller = self.get_controller(Admin::Container, name: admin_name)
    if (resp = container_admin_controller.list).net_status_ok?
      admins[admin_name] = resp[:data]
    else
      return resp
    end
  end

  { data: admins }
end

#not_existing_validation(name:) ⇒ Object



76
77
78
# File 'lib/superhosting/controller/admin.rb', line 76

def not_existing_validation(name:)
  self.existing_validation(name: name).net_status_ok? ? { error: :logical_error, code: :admin_exists, data: { name: name } } : {}
end

#passwd(name:, generate: false) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/superhosting/controller/admin.rb', line 50

def passwd(name:, generate: false)
  if (resp = self.existing_validation(name: name)).net_status_ok?
    user_controller = self.get_controller(User)
    admin_dir = @admins_mapper.f(name)
    passwords = user_controller._create_password(generate: generate)
    admin_dir.passwd.put!("#{name}:#{passwords[:encrypted_password]}")

    users = self.index[name]
    users.each do |user_name|
      user_controller._update_password(name: user_name, encrypted_password: passwords[:encrypted_password])
    end

    generate ? { data: passwords[:password] } : {}
  else
    resp
  end
end

#reindexObject



84
85
86
87
88
# File 'lib/superhosting/controller/admin.rb', line 84

def reindex
  @@index = {}
  @admins_mapper.grep_dirs.each {|dir_name| self.reindex_admin(name: dir_name.name) }
  @@index
end

#reindex_admin(name:) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/superhosting/controller/admin.rb', line 90

def reindex_admin(name:)
  @@index ||= {}
  if @admins_mapper.f(name).nil?
    @@index.delete(name)
  else
    admin_container_controller = self.get_controller(Admin::Container, name: name)
    @@index[name] = admin_container_controller._users_list.net_status_ok![:data] || []
  end
end