Sha256: 98cc6a9dc4bafb59feaaf02ae655745c394963283dc0b852875250f6e82b597b

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

require 'net/ldap'

module LdapQuery
  # For establishing an LDAP connection (binding LDAP connection)
  class Connection
    attr_accessor :link

    REQUIRED_KEYS = %i[host port base auth].freeze

    # Used for creating the initial Ldap connection for querying with supplied parameters
    #
    # @param credentials [Hash]
    # @return [Interface <Net::Ldap>]
    def initialize(credentials, type: :basic)
      if type == :auth
        credentials = filter_auth_credentials(credentials)
      else
        valid_credentials?(credentials)
      end
      @link = bind_connection(credentials)
    end

    private

    # Filter out all parameter keyus/values and only keep the required auth keys
    #
    # @param credentials [Hash]
    # @return [Hash]
    def filter_auth_credentials(credentials)
      auth_keys = %i[host port encryption].freeze
      credentials.select { |key, _v| auth_keys.include?(key) }.freeze
    end

    # Validate all required keys have been included
    #
    # @param credentials [Hash]
    # @return [Hash]
    def valid_credentials?(credentials)
      credentials_error if !credentials.is_a?(Hash) || credentials.empty?
      required_credentials?(credentials)
    end

    # Validate all required auth credentials have been supplied
    #
    # @param credentials [Hash]
    # @return [Hash]
    def required_credentials?(credentials = {})
      credentials_error unless REQUIRED_KEYS.all? { |k| credentials[k] }
    end

    # Raise an exception error if not all LDAP credentials have been included
    def credentials_error
      raise(CredentialsError, 'valid ldap credentials must be passed in order to establish a connection')
    end

    # Create LDAP connection string
    #
    # @params credentials [Hash]
    # @return [Interface <Net::Ldap>]
    def bind_connection(credentials)
      Net::LDAP.new(credentials)
    rescue
      raise(ConnectionError, 'Failure connecting to LDAP host')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ldap_query-0.0.1 lib/ldap_query/connection.rb