+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