public
Description:
Homepage:
Clone URL: git://github.com/thoughtbot/ldap-activerecord-gateway.git
name age message
file README Thu Aug 09 07:11:55 -0700 2007 fixed documentation git-svn-id: https://svn.th... [tsaleh]
file Rakefile Wed May 09 06:54:18 -0700 2007 - Added tests - Large amount of refactoring ... [tsaleh]
directory bin/ Wed May 09 06:54:18 -0700 2007 - Added tests - Large amount of refactoring ... [tsaleh]
directory conf/ Mon Nov 06 10:08:40 -0800 2006 Cleaned up example configuration file. git-svn... [tsaleh]
directory lib/ Wed May 16 08:12:58 -0700 2007 debugging git-svn-id: https://svn.thoughtbot.c... [tsaleh]
directory test/ Wed May 16 08:11:19 -0700 2007 debugging git-svn-id: https://svn.thoughtbot.c... [tsaleh]
README
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.