lib/postfix_admin/cli.rb in postfix_admin-0.1.4 vs lib/postfix_admin/cli.rb in postfix_admin-0.2.0

- old
+ new

@@ -18,21 +18,25 @@ def self.config_file=(value) @config_file = value end + def db_setup + @base.db_setup + end + def show(name) name = name.downcase if name if name =~ /@/ - if Admin.exist?(name) + if Admin.exists?(name) show_admin_details(name) end - if Mailbox.exist?(name) + if Mailbox.exists?(name) show_account_details(name) - elsif Alias.exist?(name) + elsif Alias.exists?(name) show_alias_details(name) end return end @@ -47,30 +51,30 @@ show_domain show_admin end end - def show_summary(domain_name=nil) + def show_summary(domain_name = nil) title = "Summary" if domain_name domain_name = domain_name.downcase domain_check(domain_name) title = "Summary of #{domain_name}" end report(title) do if domain_name domain = Domain.find(domain_name) - puts "Mailboxes : %4d / %4s" % [domain.mailboxes.count, max_str(domain.maxmailboxes)] - puts "Aliases : %4d / %4s" % [domain.num_total_aliases, max_str(domain.maxaliases)] + puts "Mailboxes : %4d / %4s" % [domain.rel_mailboxes.count, max_str(domain.mailboxes)] + puts "Aliases : %4d / %4s" % [domain.pure_aliases.count, max_str(domain.aliases)] puts "Max Quota : %4d MB" % domain.maxquota puts "Active : %3s" % domain.active_str else - puts "Domains : %4d" % Domain.all_without_special_domain.count + puts "Domains : %4d" % Domain.without_all.count puts "Admins : %4d" % Admin.count puts "Mailboxes : %4d" % Mailbox.count - puts "Aliases : %4d" % Domain.num_total_aliases + puts "Aliases : %4d" % Alias.pure.count end end end def setup_domain(domain_name, password) @@ -100,11 +104,11 @@ admin = Admin.find(name) report("Admin") do puts "Name : %s" % admin.username puts "Password : %s" % admin.password - puts "Domains : %s" % (admin.super_admin? ? "ALL" : admin.domains.count) + puts "Domains : %s" % (admin.super_admin? ? "ALL" : admin.rel_domains.count) puts "Role : %s" % (admin.super_admin? ? "Super admin" : "Admin") puts "Active : %s" % admin.active_str end end @@ -119,22 +123,21 @@ end def show_domain index = " No. Domain Aliases Mailboxes Quota (MB) Active" report('Domains', index) do - if Domain.all_without_special_domain.empty? + if Domain.without_all.empty? puts " No domains" next end - Domain.all_without_special_domain.each_with_index do |d, i| + Domain.without_all.each_with_index do |d, i| puts "%4d %-30s %3d /%3s %3d /%3s %10d %-3s" % - [i+1, d.domain_name, d.num_total_aliases, max_str(d.maxaliases), - d.mailboxes.count, max_str(d.maxmailboxes), d.maxquota, d.active_str] + [i+1, d.domain, d.pure_aliases.count, max_str(d.aliases), + d.rel_mailboxes.count, max_str(d.mailboxes), d.maxquota, d.active_str] end end - end def add_domain(domain_name) @base.add_domain(domain_name) puts_registered(domain_name, "a domain") @@ -149,57 +152,60 @@ end def edit_admin(admin_name, options) admin_check(admin_name) admin = Admin.find(admin_name) - admin.super_admin = options[:super] unless options[:super].nil? + + unless options[:super].nil? + admin.super_admin = options[:super] + end + admin.active = options[:active] unless options[:active].nil? - admin.save or raise "Could not save Admin" + admin.save! puts "Successfully updated #{admin_name}" show_admin_details(admin_name) end def edit_domain(domain_name, options) domain_check(domain_name) domain = Domain.find(domain_name) - domain.maxaliases = options[:aliases] if options[:aliases] - domain.maxmailboxes = options[:mailboxes] if options[:mailboxes] + domain.aliases = options[:aliases] if options[:aliases] + domain.mailboxes = options[:mailboxes] if options[:mailboxes] domain.maxquota = options[:maxquota] if options[:maxquota] domain.active = options[:active] unless options[:active].nil? - domain.save or raise "Could not save Domain" + domain.save! puts "Successfully updated #{domain_name}" show_summary(domain_name) end def delete_domain(domain_name) @base.delete_domain(domain_name) puts_deleted(domain_name) end - def show_admin(domain_name=nil) - admins = domain_name ? Admin.select{|a| a.has_domain?(domain_name)} : Admin.all + def show_admin(domain_name = nil) + admins = domain_name ? Admin.select { |a| a.rel_domains.exists?(domain_name) } : Admin.all index = " No. Admin Domains Active" report("Admins", index) do if admins.empty? puts " No admins" next end admins.each_with_index do |a, i| - domains = a.super_admin? ? 'Super admin' : a.domains.count + domains = a.super_admin? ? 'Super admin' : a.rel_domains.count puts "%4d %-40s %11s %-3s" % [i+1, a.username, domains, a.active_str] end end - end def show_address(domain_name) domain_check(domain_name) - mailboxes = Domain.find(domain_name).mailboxes + mailboxes = Domain.find(domain_name).rel_mailboxes index = " No. Email Name Quota (MB) Active Maildir" report("Addresses", index) do if mailboxes.empty? puts " No addresses" next @@ -208,17 +214,16 @@ mailboxes.each_with_index do |m, i| quota = m.quota.to_f/ KB_TO_MB.to_f puts "%4d %-30s %-20s %10s %-3s %s" % [i+1, m.username, m.name, max_str(quota.to_i), m.active_str, m.maildir] end end - end def show_alias(domain_name) domain_check(domain_name) - forwards, aliases = Domain.find(domain_name).aliases.partition{|a| a.mailbox?} + forwards, aliases = Domain.find(domain_name).rel_aliases.partition { |a| a.mailbox? } forwards.delete_if do |f| f.address == f.goto end @@ -226,23 +231,23 @@ show_alias_base("Aliases", aliases) end def show_admin_domain(user_name) admin = Admin.find(user_name) - if admin.domains.empty? + if admin.rel_domains.empty? puts "\nNo domain in database" return end report("Domains (#{user_name})", " No. Domain") do - admin.domains.each_with_index do |d, i| - puts "%4d %-30s" % [i+1, d.domain_name] + admin.rel_domains.each_with_index do |d, i| + puts "%4d %-30s" % [i + 1, d.domain] end end end - def add_admin(user_name, password, super_admin=false, scheme=nil) + def add_admin(user_name, password, super_admin = false, scheme = nil) validate_password(password) @base.add_admin(user_name, hashed_password(password, scheme)) if super_admin Admin.find(user_name).super_admin = true @@ -260,11 +265,11 @@ def delete_admin_domain(user_name, domain_name) @base.delete_admin_domain(user_name, domain_name) puts "#{domain_name} was successfully deleted from #{user_name}" end - def add_account(address, password, scheme=nil, name=nil) + def add_account(address, password, scheme = nil, name = nil) validate_password(password) @base.add_account(address, hashed_password(password, scheme), name) puts_registered(address, "an account") show_account_details(address) @@ -279,16 +284,16 @@ mailbox_check(address) mailbox = Mailbox.find(address) mailbox.name = options[:name] if options[:name] mailbox.quota = options[:quota] * KB_TO_MB if options[:quota] mailbox.active = options[:active] unless options[:active].nil? - mailbox.save or raise "Could not save Mailbox" + mailbox.save! if options[:goto] mail_alias = Alias.find(address) mail_alias.goto = options[:goto] - mail_alias.save or raise "Could not save Alias" + mail_alias.save! end puts "Successfully updated #{address}" show_account_details(address) end @@ -320,11 +325,11 @@ end def log Log.all.each do |l| time = l.timestamp.strftime("%Y-%m-%d %X %Z") - puts "#{time} #{l.username} #{l.domain_name} #{l.action} #{l.data}" + puts "#{time} #{l.username} #{l.domain} #{l.action} #{l.data}" end end def dump puts "Admins" @@ -333,29 +338,29 @@ puts [a.username, %Q!"#{a.password}"!, a.super_admin?, a.active].join(',') end puts puts "Domains" puts "Domain Name,Max Quota,Active" - Domain.all_without_special_domain.each do |d| - puts [d.domain_name, d.maxquota, d.active].join(',') + Domain.without_all.each do |d| + puts [d.domain, d.maxquota, d.active].join(',') end puts puts "Mailboxes" puts "User Name,Name,Password,Quota,Maildir,Active" Mailbox.all.each do |m| puts [m.username, %Q!"#{m.name}"!, %Q!"#{m.password}"!, m.quota, %Q!"#{m.maildir}"!, m.active].join(',') end puts puts "Aliases" puts "Address,Go to,Active" - Alias.all.select{|a| !a.mailbox? }.each do |a| + Alias.all.select { |a| !a.mailbox? }.each do |a| puts [a.address, %Q!"#{a.goto}"!, a.active].join(',') end puts puts "Forwards" puts "Address,Go to,Active" - Alias.all.select{|a| a.mailbox? && a.goto != a.address }.each do |a| + Alias.all.select { |a| a.mailbox? && a.goto != a.address }.each do |a| puts [a.address, %Q!"#{a.goto}"!, a.active].join(',') end end private @@ -405,21 +410,21 @@ def print_line puts "-"*120 end - def report(title, index=nil) + def report(title, index = nil) puts "\n[#{title}]" print_line if index puts index if index print_line yield print_line end def account_check(user_name) - unless Mailbox.exist?(user_name) && Alias.exist?(user_name) + unless Mailbox.exists?(user_name) && Alias.exists?(user_name) raise Error, %Q!Could not find account "#{user_name}"! end end def domain_check(domain_name) @@ -438,27 +443,27 @@ klass_check(Admin, user_name) end def klass_check(klass, name) object_name = klass.name.gsub(/PostfixAdmin::/, '').downcase - raise Error, %Q!Could not find #{object_name} "#{name}"! unless klass.exist?(name) + raise Error, %Q!Could not find #{object_name} "#{name}"! unless klass.exists?(name) end def validate_password(password) if password.size < MIN_NUM_PASSWORD_CHARACTER raise ArgumentError, "Password is too short. It should be larger than #{MIN_NUM_PASSWORD_CHARACTER}" end end def change_password(klass, user_name, password) - raise Error, "Could not find #{user_name}" unless klass.exist?(user_name) + raise Error, "Could not find #{user_name}" unless klass.exists?(user_name) validate_password(password) obj = klass.find(user_name) - obj.password = hashed_password(password) - if obj.save + + if obj.update(password: hashed_password(password)) puts "the password of #{user_name} was successfully changed." else raise "Could not change password of #{klass.name}" end end @@ -474,13 +479,12 @@ end end private - def hashed_password(password, in_scheme=nil) + def hashed_password(password, in_scheme = nil) scheme = in_scheme || @base.config[:scheme] puts "scheme: #{scheme}" PostfixAdmin::Doveadm.password(password, scheme) end - end end