require 'common/plugin' require 'common/user' # Code that all Roundcube plugins ({RoundcubePrune}, {RoundcubeRm}, # {RoundcubeMv}) share. # module RoundcubePlugin # We implement the Plugin "interface." include Plugin # Initialize this Roundcube {Plugin} with values in *cfg*. # # @param cfg [Configuration] the configuration for this plugin. # def initialize(cfg) @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 # Describe the given Roundcube *user*. # # @param user [User] the user whose description we want. # # @return [String] a string containing the Roundcube "User ID" # associated with *user*. # def describe_user(user) user_id = self.get_user_id(user) return "User ID: #{user_id}" end # Return a list of Roundcube users. # # @return [Array] a list of users contained in the # Roundcube database. # def list_users() usernames = [] 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() return usernames.map{ |u| User.new(u) } end protected; # Find the Roundcube "User ID" associated with the given *user*. # # @param user [User] the user whose Roundcube "User ID" we want. # # @return [Fixnum] the Roundcube "User ID" for *user*. # def get_user_id(user) user_id = nil 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, [user.to_s()]) do |result| if result.num_tuples > 0 user_id = result[0]['user_id'] end end connection.close() return user_id end end