Sha256: a742330e417935eb35243fc91540f3033282ceecddf47018f35fdaf78f285006

Contents?: true

Size: 1.78 KB

Versions: 3

Compression:

Stored size: 1.78 KB

Contents

module Wobauth
  class SearchAdUserService
    Result = ImmutableStruct.new( :success?, :error_messages, :ad_users )

    def initialize(options = {})
      @options = options.symbolize_keys
      @ldap_options = options.fetch(:ldap_options, Wobauth.ldap_options)
      if @ldap_options.blank?
        raise RuntimeError, "ldap_options not set!"
      end
      @query        = options.fetch(:query, false)
    end

    def call
      unless query
	return Result.new(success: false, error_messages: ["no query given"], ad_users: [])
      end

      ldap = Wobaduser::LDAP.new(ldap_options: ldap_options)
      if ldap.errors.any?
	return Result.new(success: false, error_messages: ldap.errors, ad_users: [])
      end

      search = Wobaduser::User.search(ldap: ldap, filter: user_filter(query))
      if search.success?
	result = Result.new(success: true, error_messages: [], ad_users: search.entries)
      else
	result = Result.new(success: false, error_messages: search.errors, ad_users: [])
       end
    end

  private
    attr_reader :query, :ldap_options

    # use filter in Wobaduser::User.search
    # objectclass=user will be implicit added via Wobaduser::User.filter
    def user_filter(query)
      filter  = "(&"
      filter += "(|(sn=#{query}*)(givenName=#{query}*)(mail=#{query}*))"
      filter += "(!(sAMAccountname=admin*))"
      filter += "(!(sAMAccountname=*test*))"
      filter += "(!(sn=*test*))"
      filter += "(!(sn=*admin*))"
      filter += "(!(givenName=*admin*))"
      filter += "(UserAccountControl:1.2.840.113556.1.4.803:=512)"
      filter += "(!(UserAccountControl:1.2.840.113556.1.4.803:=2))"
      filter += "(!(primaryGroupID=512))"
      filter += "(!(msExchHideFromAddressLists=TRUE))"
      filter += ")"
      filter = Net::LDAP::Filter.construct(filter)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wobauth-3.4.6 app/services/wobauth/search_ad_user_service.rb
wobauth-3.4.5 app/services/wobauth/search_ad_user_service.rb
wobauth-3.4.4 app/services/wobauth/search_ad_user_service.rb