X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fmv%2Fplugins%2Fagendav.rb;fp=lib%2Fmv%2Fplugins%2Fagendav.rb;h=15bf3de2ae65a96199a72dc5306c99948e4cf9c6;hp=0000000000000000000000000000000000000000;hb=ec3c9099a29f40d95f055ea0f7fb25a99d913de3;hpb=c6cab6b71770d14dad1115db90a00b990c44a58d diff --git a/lib/mv/plugins/agendav.rb b/lib/mv/plugins/agendav.rb new file mode 100644 index 0000000..15bf3de --- /dev/null +++ b/lib/mv/plugins/agendav.rb @@ -0,0 +1,106 @@ +require 'pg' + +require 'common/plugin' +require 'mv/mv_plugin' + +class AgendavMv + + include Plugin + include MvPlugin + + def initialize() + cfg = Configuration.new() + @db_host = cfg.agendav_dbhost + @db_port = cfg.agendav_dbport + @db_opts = cfg.agendav_dbopts + @db_tty = cfg.agendav_dbtty + @db_name = cfg.agendav_dbname + @db_user = cfg.agendav_dbuser + @db_pass = cfg.agendav_dbpass + end + + + def describe_domain(domain) + # AgenDAV doesn't have a concept of domains. + return 'N/A' + end + + def describe_account(account) + if self.user_exists(account) + return "Username: #{account}" + else + return 'User not found' + end + end + + def mv_domain(from, to) + # AgenDAV doesn't have a concept of domains. + end + + def mv_account(from, to) + sql_queries = ['UPDATE prefs SET username = $1 WHERE username $2;'] + sql_queries << 'UPDATE shared SET user_from = $1 WHERE user_from = $2;' + sql_queries << 'UPDATE shared SET user_which = $1 WHERE user_which = $2;' + + 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, [to, from]) + end + + connection.close() + + rescue PGError => e + # Pretend like we're database-agnostic in case we ever are. + raise DatabaseError.new(e) + end + + end + + + + protected; + + def user_exists(account) + ad_users = get_agendav_usernames() + return ad_users.include?(account) + end + + def get_agendav_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 prefs)' + sql_query += 'UNION' + sql_query += '(SELECT user_from FROM shared);' + + 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