require 'pg' require 'common/postfixadmin_db_plugin' require 'rm/rm_plugin' class PostfixadminDbRm include PostfixadminDbPlugin include RmPlugin def delete_account(account) sql_queries = ['DELETE FROM alias WHERE address = $1;'] # Wipe out any aliases pointed at our account. sql_queries << "UPDATE alias SET goto=REPLACE(goto, $1, '');" sql_queries << 'DELETE FROM mailbox WHERE username = $1;' sql_queries << 'DELETE FROM quota WHERE username = $1;' sql_queries << 'DELETE FROM quota2 WHERE username = $1;' sql_queries << 'DELETE FROM vacation WHERE email = $1;' # Should be handled by a trigger, according to PostfixAdmin code. sql_queries << 'DELETE FROM vacation_notification WHERE on_vacation = $1;' begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_queries.each do |sql_query| connection.query(sql_query, [account]) end # The earlier alias update query will leave things like # "foo@example.com,,bar@example.com" in the "goto" column. Now # we fix it. We don't do it in the loop because query() craps # out on the superfluous parameter. sql_query = "UPDATE alias SET goto=REPLACE(goto, ',,', ',');" connection.query(sql_query) connection.close() rescue PGError => e # Pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end end def delete_domain(domain) sql_queries = ['DELETE FROM domain_admins WHERE domain = $1;'] sql_queries << 'DELETE FROM alias WHERE domain = $1;' sql_queries << 'DELETE FROM mailbox WHERE domain = $1;' sql_queries << 'DELETE FROM alias_domain WHERE alias_domain = $1;' sql_queries << 'DELETE FROM log WHERE domain = $1;' sql_queries << 'DELETE FROM vacation WHERE domain = $1;' begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_queries.each do |sql_query| connection.query(sql_query, [domain]) end connection.close() rescue PGError => e # Pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end end def get_domain_usernames(domain) usernames = [] # Just assume PostgreSQL for now. begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_query = 'SELECT username FROM mailbox WHERE domain = $1;' connection.query(sql_query, [domain]) do |result| usernames = result.field_values('username') end connection.close() rescue PGError => e # Pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end return usernames end end