class ASF::Group
Access to LDAP
groups; where committer lists for PMCs have traditionally been stored. The intent is to move this data to member attributes on Project
lists.
Attributes
Date this committee was initially created in LDAP
.
Date this committee was last modified in LDAP
.
Public Class Methods
return group only if it actually exits
ASF::Base::[]
# File lib/whimsy/asf/ldap.rb, line 1107 def self.[](name) group = super group.dn ? group : nil end
add a new group to LDAP
# File lib/whimsy/asf/ldap.rb, line 1156 def self.add(name, people) nextgid = ASF.search_one(ASF::Group.base, 'cn=*', 'gidNumber'). flatten.map(&:to_i).max + 1 entry = [ mod_add('objectClass', ['posixGroup', 'top']), mod_add('cn', name), mod_add('userPassword', '{crypt}*'), mod_add('gidNumber', nextgid.to_s), mod_add('memberUid', people.map(&:id)) ] ASF::LDAP.add("cn=#{name},#{base}", entry) end
obtain a list of groups from LDAP
# File lib/whimsy/asf/ldap.rb, line 1067 def self.list(filter='cn=*') ASF.search_one(base, filter, 'cn').flatten.map {|cn| find(cn)} end
return a list of groups (cns only), from LDAP
.
# File lib/whimsy/asf/ldap.rb, line 1072 def self.listcns(filter='cn=*') ASF.search_one(base, filter, 'cn').flatten end
fetch dn
, member
, modifyTimestamp
, and createTimestamp
for all groups in LDAP
.
# File lib/whimsy/asf/ldap.rb, line 1088 def self.preload Hash[ASF.search_one(base, "cn=*", %w(dn memberUid modifyTimestamp createTimestamp)).map do |results| cn = results['dn'].first[/^cn=(.*?),/, 1] group = ASF::Group.find(cn) group.modifyTimestamp = results['modifyTimestamp'].first # it is returned as an array of 1 entry group.createTimestamp = results['createTimestamp'].first # it is returned as an array of 1 entry members = results['memberUid'] || [] group.members = members [group, members] end] end
remove a group from LDAP
# File lib/whimsy/asf/ldap.rb, line 1172 def self.remove(name) ASF::LDAP.delete("cn=#{name},#{base}") end
Public Instance Methods
add people to an existing group in LDAP
# File lib/whimsy/asf/ldap.rb, line 1146 def add(people) @members = nil # force fresh LDAP search people = (Array(people) - members).map(&:id) return if people.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_add('memberUid', people)]) ensure @members = nil end
Designated Name from LDAP
# File lib/whimsy/asf/ldap.rb, line 1131 def dn @dn ||= ASF.search_one(base, "cn=#{name}", 'dn').first.first rescue nil end
determine if a given ASF::Person
is a member of this group
# File lib/whimsy/asf/ldap.rb, line 1077 def include?(person) filter = "(&(cn=#{name})(memberUid=#{person.name}))" if ASF.search_one(base, filter, 'cn').empty? return false else return true end end
return a list of ids who are members of this group
# File lib/whimsy/asf/ldap.rb, line 1124 def memberids weakref(:members) do # initialises @members if necessary ASF.search_one(base, "cn=#{name}", 'memberUid').flatten end end
return a list of ASF::People who are members of this group
# File lib/whimsy/asf/ldap.rb, line 1119 def members memberids.map {|uid| Person.find(uid)} end
setter for members, should only be used by preload N.B. Do not dereference @members directly; use weakref(:members) instead
# File lib/whimsy/asf/ldap.rb, line 1114 def members=(members) @members = WeakRef.new(members) end
remove people from an existing group in LDAP
# File lib/whimsy/asf/ldap.rb, line 1136 def remove(people) @members = nil # force fresh LDAP search people = (Array(people) & members).map(&:id) return if people.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_delete('memberUid', people)]) ensure @members = nil end