require 'common/plugin' require 'pg' module PostfixadminPlugin # Code that all Postfixadmin plugins (Prune, Rm, Mv...) will # share. That is, we implement the Plugin interface. include Plugin def initialize(cfg) @db_host = cfg.postfixadmin_dbhost @db_port = cfg.postfixadmin_dbport @db_opts = cfg.postfixadmin_dbopts @db_tty = cfg.postfixadmin_dbtty @db_name = cfg.postfixadmin_dbname @db_user = cfg.postfixadmin_dbuser @db_pass = cfg.postfixadmin_dbpass end def describe_user(user) # There's no other unique identifier in PostfixAdmin return user end def describe_domain(domain) # There's no other unique identifier in PostfixAdmin return domain end def list_domains() domains = [] # Just assume PostgreSQL for now. begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) # 'ALL' is a magic domain, and we don't want it. sql_query = "SELECT domain FROM domain WHERE domain <> 'ALL';" connection.query(sql_query) do |result| domains = result.field_values('domain') end connection.close() rescue PGError => e # But pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end return domains end def list_users() users = [] # 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;' connection.query(sql_query) do |result| users = result.field_values('username') end connection.close() rescue PGError => e # But pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end return users end def list_domains_users(domains) 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 IN $1;' connection.query(sql_query, [domains]) 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 def list_aliases() # # Get a list of all aliases, useful for testing. # aliases = [] # 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 address,goto FROM alias;' results = connection.query(sql_query) results.each do |row| aliases << row # row should be a hash end connection.close() rescue PGError => e # But pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end return aliases end end