Some ruby code written to manage an ldap directory.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
1.4 KiB

require 'User'
require 'Group'
require 'Site'
require 'MailAlias'
require 'MailAccount'
class SystemDataBackend
def initialize(backend)
@backend = backend
@data = Hash.new
end
def users
load(:user)
end
def groups
load(:group)
end
def sites
load(:site)
end
def mailAliases
load(:mailAlias)
end
def mailAccounts
load(:mailAccount)
end
def userByName(name)
users.find{|user| user.name == name}
end
def groupByName(name)
groups.find{|group| group.name == name}
end
def siteByName(name)
sites.find{|site| site.name == name}
end
def usersInGroup(group)
case
when group.members.instance_of?(Array):
Hash[group.members.map{|uid| [uid, userByName(uid)] if userByName(uid)}]
when goup.members.nil?:
{}
else
{group.members => userByName(group.members)} if userByName(group.members)
end
end
def mailAliasesBySite(site)
mailAliases.find_all{|mail| mail.site == site.name}
end
def mailAccountsBySite(site)
mailAccounts.find_all{|mail| mail.site == site.name}
end
private
def load(kind)
load!(kind) if ! @data[kind]
@data[kind]
end
def load!(kind)
@data[kind] = Array.new
class_str = kind.to_s
class_str[0] = class_str[0..0].capitalize
@backend.load(kind) do |data|
@data[kind].push(
eval(class_str + '.new(data)')
)
end
end
end