require 'common/plugin' module DavicalPlugin # Code that all Davical plugins (Prune, Rm, Mv...) will share. That # is, we implement the Plugin interface. include Plugin def initialize(cfg) @db_host = cfg.davical_dbhost @db_port = cfg.davical_dbport @db_opts = cfg.davical_dbopts @db_tty = cfg.davical_dbtty @db_name = cfg.davical_dbname @db_user = cfg.davical_dbuser @db_pass = cfg.davical_dbpass end def describe_domain(domain) # DAViCal doesn't have a concept of domains. return domain end def describe_user(user) principal_id = self.get_principal_id(user) if principal_id.nil? return 'User not found' else return "Principal ID: #{principal_id}" end end def list_users() # # Produce a list of DAViCal users. This is public because it's # useful for testing. # usernames = [] begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) # User #1 is the super-user, and not tied to an email address. sql_query = "SELECT username FROM usr WHERE user_no > 1" 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 protected; def get_principal_id(user) principal_id = nil begin connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_query = "SELECT principal.principal_id " sql_query += "FROM (principal INNER JOIN usr " sql_query += " ON principal.user_no = usr.user_no) " sql_query += "WHERE usr.username = $1;" connection.query(sql_query, [user]) do |result| if result.num_tuples > 0 principal_id = result[0]['principal_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 principal_id end end