class RoundcubeMv

Handle moving (renaming) of users in the Roundcube database. Roundcube has no concept of domains.

Public Instance Methods

mv_user(src, dst) click to toggle source

Move the user src to dst within the Roundcube database. This should “rename” him in every table where he is referenced. Roundcube uses foreign keys properly, so we let the ON UPDATE CASCADE trigger handle most of the work.

This can fail is src does not exist, or if dst already exists before the move. It should also be an error if the destination domain doesn't exist. But Roundcube doesn't know about domains, so we let that slide.

@param src [User] the source user to be moved.

@param dst [User] the destination user being moved to.

# File lib/mv/plugins/roundcube.rb, line 29
def mv_user(src, dst)
  raise NonexistentUserError.new(src.to_s()) if not user_exists(src)
  raise UserAlreadyExistsError.new(dst.to_s()) if user_exists(dst)

  sql_query = 'UPDATE users SET username = $1 WHERE username = $2;'

  connection = PG::Connection.new(@db_hash)
  begin
    connection.sync_exec_params(sql_query, [dst.to_s(), src.to_s()])
  ensure
    # Make sure the connection gets closed even if the query explodes.
    connection.close()
  end
end