require 'common/plugin' module RoundcubeDbPlugin # Code that all RoundcubeDb plugins (Prune, Rm, Mv...) will share. # That is, we implement the Plugin interface. include Plugin def initialize() cfg = Configuration.new() @db_host = cfg.roundcube_dbhost @db_port = cfg.roundcube_dbport @db_opts = cfg.roundcube_dbopts @db_tty = cfg.roundcube_dbtty @db_name = cfg.roundcube_dbname @db_user = cfg.roundcube_dbuser @db_pass = cfg.roundcube_dbpass end def describe_domain(domain) # Roundcube doesn't have a concept of domains. return 'N/A' end def describe_account(account) user_id = self.get_user_id(account) if user_id.nil? return 'User not found' else return "User ID: #{user_id}" end end protected; def get_user_id(account) user_id = nil begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_query = "SELECT user_id FROM users WHERE username = $1;" connection.query(sql_query, [account]) do |result| if result.num_tuples > 0 user_id = result[0]['user_id'] end end connection.close() rescue PGError => e # Pretend like we're database-agnostic in case we ever are. raise DatabaseError.new(e) end return user_id end # Uses in both prune/rm. def get_roundcube_usernames() 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 users;" connection.query(sql_query) 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