X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fcommon%2Froundcube_plugin.rb;fp=lib%2Fcommon%2Froundcube_plugin.rb;h=8e9d62259d78fd9819bc2ef77bc97c3c2b0fa96c;hp=0000000000000000000000000000000000000000;hb=7f8654ed6582062a295e1be75ae70e99de41b323;hpb=bd2dabf89ab277fbe315b05e6dfa839afb5ce5ef diff --git a/lib/common/roundcube_plugin.rb b/lib/common/roundcube_plugin.rb new file mode 100644 index 0000000..8e9d622 --- /dev/null +++ b/lib/common/roundcube_plugin.rb @@ -0,0 +1,97 @@ +require 'common/plugin' + +module RoundcubePlugin + # Code that all Roundcube 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 domain + 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 + + + # Used in both prune/rm. + def list_users() + 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