From 650e23790019880da91c7c7248a214a13763fd3e Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 1 Nov 2015 22:00:37 -0500 Subject: [PATCH] Clean up user/domain describing in the plugins. --- lib/common/agendav_plugin.rb | 9 ------- lib/common/davical_plugin.rb | 13 +--------- lib/common/dovecot_plugin.rb | 20 ++------------- lib/common/plugin.rb | 42 +++++++++++++++++++++++++------ lib/common/postfixadmin_plugin.rb | 20 --------------- lib/common/roundcube_plugin.rb | 12 +-------- lib/mv/mv_dummy_runner.rb | 27 +++++++++++++++++++- 7 files changed, 64 insertions(+), 79 deletions(-) diff --git a/lib/common/agendav_plugin.rb b/lib/common/agendav_plugin.rb index fc19d3d..032d057 100644 --- a/lib/common/agendav_plugin.rb +++ b/lib/common/agendav_plugin.rb @@ -18,15 +18,6 @@ module AgendavPlugin end - def describe_domain(domain) - return domain.to_s() - end - - def describe_user(user) - return user.to_s() - end - - def list_users() # # Produce a list of AgenDAV users. This is public because it's diff --git a/lib/common/davical_plugin.rb b/lib/common/davical_plugin.rb index 557c1dd..cd34a98 100644 --- a/lib/common/davical_plugin.rb +++ b/lib/common/davical_plugin.rb @@ -17,20 +17,9 @@ module DavicalPlugin end - def describe_domain(domain) - # DAViCal doesn't have a concept of domains. - return domain.to_s() - end - - def describe_user(user) principal_id = self.get_principal_id(user) - - if principal_id.nil? - return 'User not found' - else - return "Principal ID: #{principal_id}" - end + return "Principal ID: #{principal_id}" end diff --git a/lib/common/dovecot_plugin.rb b/lib/common/dovecot_plugin.rb index 4718483..bc6166d 100644 --- a/lib/common/dovecot_plugin.rb +++ b/lib/common/dovecot_plugin.rb @@ -14,27 +14,11 @@ module DovecotPlugin end def describe_domain(domain) - begin - domain_path = get_domain_path(domain) - return domain_path - rescue NonexistentDomainError => e - return "Doesn't exist: #{e.to_s}" - end + return get_domain_path(domain) end def describe_user(user) - begin - user_path = get_user_path(user) - return user_path - rescue NonexistentUserError => e - return "Doesn't exist: #{e.to_s}" - end - end - - - def domain_exists(domain) - domains = list_domains() - return domains.include?(domain) + return get_user_path(user) end diff --git a/lib/common/plugin.rb b/lib/common/plugin.rb index c6f750b..702b621 100644 --- a/lib/common/plugin.rb +++ b/lib/common/plugin.rb @@ -55,26 +55,36 @@ module Plugin # A generic version of describe_user/describe_domain that # dispatches base on the class of the target. if target.is_a?(User) - return describe_user(target) + if user_exists(target) then + return describe_user(target) + else + return 'User not found' + end elsif target.is_a?(Domain) - return describe_domain(target) + if domain_exists(target) then + return describe_domain(target) + else + return 'Domain not found' + end else raise NotImplementedError end end def describe_domain(domain) - # Provide a "description" of the domain. This is output along - # with the domain name and can be anything of use to the system - # administrator. - raise NotImplementedError + # Provide a "description" of the domain. This is output along with + # the domain name and can be anything of use to the system + # administrator. The default doesn't do anything useful and should + # be overridden. + return domain.to_s() end def describe_user(user) # Provide a "description" of the user. This is output along # with the domain name and can be anything of use to the system - # administrator. - raise NotImplementedError + # administrator. The default doesn't do anything useful and should + # be overridden. + return user.to_s() end def list_users() @@ -82,6 +92,14 @@ module Plugin raise NotImplementedError end + def list_domains() + # Compute the domains from a list of users. Obviously much worse + # than getting the domains the "smart" way, if such a way exists. + users = list_users() + domains = users.map{ |u| u.domain() } + return domains.uniq() + end + def user_exists(user) # Does the given username exist for this plugin? We use a naive # implementation here based on list_users() which is required to @@ -90,6 +108,14 @@ module Plugin return users.include?(user) end + def domain_exists(domain) + # Does the given domain exist for this plugin? We use a naive + # implementation here based on list_domains() which is required to + # exist above. Plugins can override this with something fast. + domains = list_domains() + return domains.include?(domain) + end + def list_domains_users(domains) # Get all users belonging to the given domains. If a user has # domainpart "example.com" then it belongs to the domain diff --git a/lib/common/postfixadmin_plugin.rb b/lib/common/postfixadmin_plugin.rb index 60880d9..b984f6c 100644 --- a/lib/common/postfixadmin_plugin.rb +++ b/lib/common/postfixadmin_plugin.rb @@ -19,18 +19,6 @@ module PostfixadminPlugin end - def describe_user(user) - # There's no other unique identifier in PostfixAdmin - return user.to_s() - end - - - def describe_domain(domain) - # There's no other unique identifier in PostfixAdmin - return domain.to_s() - end - - def list_domains() domains = [] @@ -59,14 +47,6 @@ module PostfixadminPlugin end - def domain_exists(domain) - # Does the given domain exist in Postfixadmin? We use a naive - # implementation here based on list_domains(). This isn't in our - # superclass because not all plugins have a concept of domains. - domains = list_domains() - return domains.include?(domain) - end - def list_users() users = [] diff --git a/lib/common/roundcube_plugin.rb b/lib/common/roundcube_plugin.rb index b1c74a6..eb450f0 100644 --- a/lib/common/roundcube_plugin.rb +++ b/lib/common/roundcube_plugin.rb @@ -17,19 +17,9 @@ module RoundcubePlugin end - def describe_domain(domain) - # Roundcube doesn't have a concept of domains. - return domain.to_s() - end - def describe_user(user) user_id = self.get_user_id(user) - - if user_id.nil? - return 'User not found' - else - return "User ID: #{user_id}" - end + return "User ID: #{user_id}" end diff --git a/lib/mv/mv_dummy_runner.rb b/lib/mv/mv_dummy_runner.rb index 662abff..52db27b 100644 --- a/lib/mv/mv_dummy_runner.rb +++ b/lib/mv/mv_dummy_runner.rb @@ -10,7 +10,32 @@ class MvDummyRunner raise NotImplementedError.new(msg) end - puts "Would move user #{src.to_s()} to #{dst.to_s()}." + # Since we're not actually moving anything, the destination + # description is really only useful for seeing whether or not we'd + # be trying to move in on top of an existing account. + src_description = plugin.describe(src) + dst_description = plugin.describe(dst) + + msg = "Would move user #{src} " + + # Only append the extra description if it's useful. + if not src_description.nil? and + not src_description.empty? and + not src_description == src.to_s() then + msg += "(#{src_description}) " + end + + msg += "to #{dst}" + + # Only append the extra description if it's useful. + if not dst_description.nil? and + not dst_description.empty? and + not dst_description == dst.to_s() then + msg += " (#{dst_description})" + end + + msg += "." + report(plugin, msg) end end -- 2.43.2