Class: FakeLDAP::Server
- Inherits:
-
LDAP::Server
- Object
- LDAP::Server
- FakeLDAP::Server
- Defined in:
- lib/fakeldap.rb
Instance Method Summary collapse
- #add_to_group(dn, member) ⇒ Object
- #add_user(user, pass, mail = nil) ⇒ Object
- #default_options ⇒ Object
- #delete_entry(dn) ⇒ Object
- #find_groups(basedn, filter) ⇒ Object
- #find_users(basedn, filter) ⇒ Object
- #group_attributes(cn) ⇒ Object
-
#initialize(options = {}) ⇒ Server
constructor
A new instance of Server.
- #modify_entry(dn, key, action, value) ⇒ Object
- #user_attributes(dn) ⇒ Object
- #valid_credentials?(user, pass) ⇒ Boolean
Constructor Details
#initialize(options = {}) ⇒ Server
Returns a new instance of Server.
6 7 8 9 10 |
# File 'lib/fakeldap.rb', line 6 def initialize(={}) @users = {} @groups = {} super(.merge()) end |
Instance Method Details
#add_to_group(dn, member) ⇒ Object
16 17 18 19 20 |
# File 'lib/fakeldap.rb', line 16 def add_to_group(dn, member) # Member array keyed on dn @groups[dn] = [] unless @groups[dn] @groups[dn] << member unless @groups[dn].include?(member) end |
#add_user(user, pass, mail = nil) ⇒ Object
12 13 14 |
# File 'lib/fakeldap.rb', line 12 def add_user(user, pass, mail = nil) @users[user] = [pass, mail] end |
#default_options ⇒ Object
110 111 112 113 114 115 |
# File 'lib/fakeldap.rb', line 110 def { :operation_class => ::FakeLDAP::Operation, :operation_args => [self] } end |
#delete_entry(dn) ⇒ Object
44 45 46 |
# File 'lib/fakeldap.rb', line 44 def delete_entry(dn) @users.delete(dn[0]) || @groups.delete(dn[0]) end |
#find_groups(basedn, filter) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/fakeldap.rb', line 86 def find_groups(basedn, filter) # Expected result - array of strings result = [] group = "#{basedn}" case filter[1] when 'objectClass' result = @groups.keys if filter[3] == 'groupOfNames' when 'cn' result = @groups[group] || [] when 'member' result = [filter[3]] if @groups[group] && @groups[group].include?(filter[3]) result = @groups.keys if filter[3] == 'groupOfNames' end result end |
#find_users(basedn, filter) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/fakeldap.rb', line 52 def find_users(basedn, filter) result = [] basedn_regex = /#{Regexp.escape(basedn)}$/ filter_regex = /^#{filter[1]}=#{filter[3]}$/ case filter[1] when 'objectClass' result = @users.keys if filter[3] == 'inetOrgPerson' when 'cn' @users.keys.select { |dn| dn =~ basedn_regex && dn.split(",").grep(filter_regex).any? } when 'mail' @users.keys.each do |dn| # Keyed on full cn=...,dn... if @users[dn][1] == filter[3] result << dn end end result else result end end |
#group_attributes(cn) ⇒ Object
102 103 104 105 106 107 108 |
# File 'lib/fakeldap.rb', line 102 def group_attributes(cn) if @groups[cn] { 'cn' => ["#{cn}"], 'member' => @groups["#{cn}"] } else {} end end |
#modify_entry(dn, key, action, value) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fakeldap.rb', line 22 def modify_entry(dn, key, action, value) e = @users[dn] # Didn't find user => maybe it's a group e = @groups[dn] unless e && e[0] if e # FIXME: Annoying! Proper hash, not just array. Or hide in private method. case key when 'password' e[0] = value when 'mail' e[1] = value when 'member' case action when :add e << value unless e.include?(value) when :delete e.delete(value) end end end end |
#user_attributes(dn) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/fakeldap.rb', line 77 def user_attributes(dn) # Create attribute hash here if @users[dn] {'cn' => ["#{dn}"], 'regular_password' => ["#{ @users[dn][0]}"], 'mail' => ["#{ @users[dn][1]}"], 'disclaimer' => 'Test data - not for operational use'} else {} end end |
#valid_credentials?(user, pass) ⇒ Boolean
48 49 50 |
# File 'lib/fakeldap.rb', line 48 def valid_credentials?(user, pass) @users.has_key?(user) && @users[user][0] == pass end |