class LdapFluff::ActiveDirectory

Public Class Methods

new(config = {}) click to toggle source
Calls superclass method LdapFluff::Generic.new
# File lib/ldap_fluff/active_directory.rb, line 3
def initialize(config = {})
  @bind_user  = config.service_user
  @bind_pass  = config.service_pass
  @anon       = config.anon_queries
  super
end

Public Instance Methods

bind?(uid = nil, password = nil) click to toggle source
# File lib/ldap_fluff/active_directory.rb, line 10
def bind?(uid = nil, password = nil)
  @ldap.auth(uid, password)
  @ldap.bind
end
group_exists?(gid) click to toggle source
Calls superclass method LdapFluff::Generic#group_exists?
# File lib/ldap_fluff/active_directory.rb, line 41
def group_exists?(gid)
  service_bind
  super
end
groups_for_uid(uid) click to toggle source

returns the list of groups to which a user belongs this query is simpler in active directory

Calls superclass method LdapFluff::Generic#groups_for_uid
# File lib/ldap_fluff/active_directory.rb, line 17
def groups_for_uid(uid)
  service_bind
  super
end
is_in_groups(uid, gids = [], all = false) click to toggle source

active directory stores group membership on a users model TODO: query by group individually not like this

# File lib/ldap_fluff/active_directory.rb, line 24
def is_in_groups(uid, gids = [], all = false)
  service_bind
  return true if gids == []
  begin
    groups       = @member_service.find_user_groups(uid)
    intersection = gids & groups
    return (all ? intersection == gids : intersection.size > 0)
  rescue MemberService::UIDNotFoundException
    return false
  end
end
user_exists?(uid) click to toggle source
Calls superclass method LdapFluff::Generic#user_exists?
# File lib/ldap_fluff/active_directory.rb, line 36
def user_exists?(uid)
  service_bind
  super
end

Private Instance Methods

users_from_search_results(search, method) click to toggle source
# File lib/ldap_fluff/active_directory.rb, line 48
def users_from_search_results(search, method)
  users = []

  search.send(method).each do |member|
    cn    = member.downcase.split(',')[0].split('=')[1]
    entry = @member_service.find_user(cn).first

    objectclasses = entry.objectclass.map(&:downcase)

    if (%w(organizationalperson person) & objectclasses).present?
      users << @member_service.get_logins([member])
    elsif (%w(organizationalunit group) & objectclasses).present?
      users << users_for_gid(cn)
    end
  end

  users.flatten.uniq
end