thoughtbot / ldap-activerecord-gateway

This URL has Read+Write access

ldap-activerecord-gateway / README
100644 52 lines (43 sloc) 1.896 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
ldap-activerecord-gateway
=========================
 
This is an implementation of an LDAP server which uses active record as the data source.
The server is read-only, and can serve information from any AR model that implements the
#search(string) class method and the #to_ldap_entry instance method.
 
To use, configure the server by creating a conf/ldap-server.yml file (see ldap-server.example.yml).
The important bits are rails_dir, active_record_model, basedn, and port. Once that's done,
run "./bin/ldap-server.rb start", wait for it to daemonize, and check the log file under $RAILS_ROOT/log/ for
errors. To stop, run "./bin/ldap-server.rb", and if you reconfigure the server or change the underlying
AR model, restart it with "./bin/ldap-server.rb restart".
 
To test, point your addressbook (ie: Thunderbird or OS X Address Book) at the server and run a search.
 
Example AR class:
 
class Person < ActiveRecord::Base
  def fullname
    "#{firstname} #{lastname}"
  end
  
  def to_ldap_entry
{
"objectclass" => ["top", "person", "organizationalPerson", "inetOrgPerson", "mozillaOrgPerson"],
"uid" => ["tbotter-#{id}"],
  "sn" => [lastname],
   "givenName" => [firstname],
"cn" => [fullname],
   "title" => [title],
   "o" => [company],
   "mail" => [email],
   "telephonenumber" => [work_phone],
   "homephone" => [home_phone],
   "fax" => [fax],
   "mobile" => [mobile],
   "street" => [address],
   "l" => [city],
   "st" => [state],
   "postalcode" => [zip],
}
end
 
  def self.search(query)
    Person.find(:all,
                :conditions => ["(email LIKE ?) OR (firstname LIKE ?) OR (lastname LIKE ?)",
                                "#{query}%", "#{query}%", "#{query}%"])
  end
end
 
Have fun.