class GitHub::Ldap::URL

This class represents an LDAP URL

See: tools.ietf.org/html/rfc4516#section-2

https://docs.oracle.com/cd/E19957-01/817-6707/urls.html

Constants

SCOPES

Attributes

attributes[R]
dn[R]
filter[R]
scope[R]

Public Class Methods

new(url_string) click to toggle source

Public - Creates a new GitHub::Ldap::URL object with :port, :host and :scheme delegated to a URI object parsed from url_string, and then parses the query params according to the LDAP specification.

url_string - An LDAP URL string. returns - a GitHub::Ldap::URL with the following attributes:

host         - Name or IP of the LDAP server.
port         - The given port, defaults to 389.
dn           - The base search DN.
attributes   - The comma-delimited list of attributes to be returned.
scope        - The scope of the search.
filter       - Search filter to apply to entries within the specified scope of the search.

Supported LDAP URL strings look like this, where sections in brackets are optional:

    ldap[s]://[hostport][/[dn[?[attributes][?[scope][?[filter]]]]]]

where:

    hostport is a host name with an optional ":portnumber"
    dn is the base DN to be used for an LDAP search operation
    attributes is a comma separated list of attributes to be retrieved
    scope is one of these three strings: base one sub (default=base)
    filter is LDAP search filter as used in a call to ldap_search

For example:

ldap://dc4.ghe.local:456/CN=Maggie,DC=dc4,DC=ghe,DC=local?cn,mail?base?(cn=Charlie)
# File lib/github/ldap/url.rb, line 51
def initialize(url_string)
  if !self.class.valid?(url_string)
    raise InvalidLdapURLException.new("Invalid LDAP URL: #{url_string}")
  end
  @uri = URI(url_string)
  @dn = URI.unescape(@uri.path.sub(/^\//, ""))
  if @uri.query
    @attributes, @scope, @filter = @uri.query.split("?")
  end
end
valid?(url_string) click to toggle source
# File lib/github/ldap/url.rb, line 62
def self.valid?(url_string)
  url_string =~ URI::regexp && ["ldap", "ldaps"].include?(URI(url_string).scheme)
end

Public Instance Methods

net_ldap_scope() click to toggle source

Maps the returned scope value from the URL to one of Net::LDAP::Scopes

The URL scope value can be one of:

"base" - retrieves information only about the DN (base_dn) specified.
"one"  - retrieves information about entries one level below the DN (base_dn) specified. The base entry is not included in this scope.
"sub"  - retrieves information about entries at all levels below the DN (base_dn) specified. The base entry is included in this scope.

Which will map to one of the following Net::LDAP::Scopes:

SearchScope_BaseObject   = 0
SearchScope_SingleLevel  = 1
SearchScope_WholeSubtree = 2

If no scope or an invalid scope is given, defaults to SearchScope_BaseObject

# File lib/github/ldap/url.rb, line 79
def net_ldap_scope
  Net::LDAP::SearchScopes[SCOPES[scope]]
end