Class: ASF::Group

Inherits:
Base
  • Object
show all
Defined in:
lib/whimsy/asf/ldap.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#<=>, [], base, #base, collection, find, #id, #initialize, mod_add, mod_delete, mod_replace, new, #reference, #weakref

Constructor Details

This class inherits a constructor from ASF::Base

Instance Attribute Details

#createTimestampObject

Returns the value of attribute createTimestamp.



585
586
587
# File 'lib/whimsy/asf/ldap.rb', line 585

def createTimestamp
  @createTimestamp
end

#modifyTimestampObject

Returns the value of attribute modifyTimestamp.



585
586
587
# File 'lib/whimsy/asf/ldap.rb', line 585

def modifyTimestamp
  @modifyTimestamp
end

Class Method Details

.add(name, people) ⇒ Object

add a new group



624
625
626
627
628
629
630
631
632
633
634
635
636
637
# File 'lib/whimsy/asf/ldap.rb', line 624

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

.list(filter = 'cn=*') ⇒ Object



560
561
562
# File 'lib/whimsy/asf/ldap.rb', line 560

def self.list(filter='cn=*')
  ASF.search_one(base, filter, 'cn').flatten.map {|cn| find(cn)}
end

.preloadObject



573
574
575
576
577
578
579
580
581
582
583
# File 'lib/whimsy/asf/ldap.rb', line 573

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(name) ⇒ Object

remove a group



640
641
642
# File 'lib/whimsy/asf/ldap.rb', line 640

def self.remove(name)
  ASF.ldap.delete("cn=#{name},#{base}")
end

Instance Method Details

#add(people) ⇒ Object

add people to an existing group



614
615
616
617
618
619
620
621
# File 'lib/whimsy/asf/ldap.rb', line 614

def add(people)
  @members = nil
  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

#dnObject



599
600
601
# File 'lib/whimsy/asf/ldap.rb', line 599

def dn
  @dn ||= ASF.search_one(base, "cn=#{name}", 'dn').first.first
end

#include?(person) ⇒ Boolean

Returns:

  • (Boolean)


564
565
566
567
568
569
570
571
# File 'lib/whimsy/asf/ldap.rb', line 564

def include?(person)
  filter = "(&(cn=#{name})(memberUid=#{person.name}))"
  if ASF.search_one(base, filter, 'cn').empty?
    return false
  else
    return true
  end
end

#membersObject



591
592
593
594
595
596
597
# File 'lib/whimsy/asf/ldap.rb', line 591

def members
  members = weakref(:members) do
    ASF.search_one(base, "cn=#{name}", 'memberUid').flatten
  end

  members.map {|uid| Person.find(uid)}
end

#members=(members) ⇒ Object



587
588
589
# File 'lib/whimsy/asf/ldap.rb', line 587

def members=(members)
  @members = WeakRef.new(members)
end

#remove(people) ⇒ Object

remove people from an existing group



604
605
606
607
608
609
610
611
# File 'lib/whimsy/asf/ldap.rb', line 604

def remove(people)
  @members = nil
  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