+require 'common/domain'
require 'common/errors'
require 'common/runner'
include Runner
def run(plugin, src, dst)
- # Why think too hard? An user has an @, a domain doesn't.
- if not src.include?('@') then
- # We only support moving users right now, and the destination
- # domain must already exist.
- raise NotImplementedError.new('Only users can be moved.')
- end
- # Handle this once so we don't have to do it in every plugin.
- if not dst.include?('@') then
- msg = "the destination user #{dst} is not valid"
- raise InvalidUserError.new(msg)
+ if src.is_a?(Domain) or dst.is_a?(Domain) then
+ msg = 'only users can be moved'
+ raise NotImplementedError.new(msg)
end
begin
- src_description = plugin.describe_user(src)
+ src_description = plugin.describe(src)
plugin.mv_user(src, dst)
- msg = "Moved user #{src} (#{src_description}) "
- msg += "to #{dst}."
+ dst_description = plugin.describe(dst)
+
+ msg = "Moved 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)
- rescue InvalidUserError => e
- report(plugin, e.message)
+
rescue NonexistentUserError => e
- report(plugin, e.message)
+ # This means that the SOURCE user didn't exist, since a
+ # nonexistent destination user is perfectly expected.
+ report(plugin, "Source user #{src.to_s()} not found.")
rescue NonexistentDomainError => e
- report(plugin, e.message)
- rescue StandardError => e
- msg = "There was an error (#{e.to_s}) moving the user: #{e.message}"
- report(plugin, msg)
- Kernel.exit(ExitCodes::DATABASE_ERROR)
+ # This could mean that the source domain doesn't exist, but in
+ # that case, we just report that the source user doesn't
+ # exist. So a nonexistent domain refers to a nonexistent
+ # DESTINATION domain.
+ report(plugin, "Destination domain #{dst.domainpart()} not found.")
+ rescue UserAlreadyExistsError => e
+ report(plugin, "Destination user #{dst.to_s()} already exists.")
end
end