Class: Ldumbd::TableMap

Inherits:
Object
  • Object
show all
Defined in:
lib/ldumbd/table_map.rb

Constant Summary collapse

TABLE_MAP =
{
  group: {
    object_classes: ['posixGroup'],
    attributes: {
      'gidNumber' => :groups__id,
      'cn'        => :groups__name,
      'memberUid' => :users
    },
  },
  user: {
    object_classes: ['posixAccount'],
    attributes: {
      'uidNumber'     => :users__id,
      'uid'           => :users__name,
      'cn'            => :users__realname,
      'loginShell'    => :users__shell,
      'homeDirectory' => :users__homedir,
      'gidNumber'     => :users__group_id
    }
  }
}
INVERSE_TABLE_MAP =
invert_table_map(TABLE_MAP)

Class Method Summary collapse

Class Method Details

.db_key(model, ldap_key) ⇒ Object



44
45
46
47
# File 'lib/ldumbd/table_map.rb', line 44

def self.db_key(model, ldap_key)
  table = model_to_sym(model)
  TABLE_MAP[table][:attributes][ldap_key]
end

.ldap_keys(model) ⇒ Object



59
60
61
62
# File 'lib/ldumbd/table_map.rb', line 59

def self.ldap_keys(model)
  table = model_to_sym(model)
  INVERSE_TABLE_MAP[table]
end

.object_classes(model) ⇒ Object



49
50
51
52
# File 'lib/ldumbd/table_map.rb', line 49

def self.object_classes(model)
  table = model_to_sym(model)
  TABLE_MAP[table][:object_classes]
end

.sequel_to_ldap_object(sequel_object) ⇒ Object

TODO: move this into User/Group model class



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ldumbd/table_map.rb', line 65

def self.sequel_to_ldap_object(sequel_object)
  # return unmodified object if it is not a Sequel model instance
  return sequel_object unless sequel_object.is_a?(Sequel::Model)

  model = sequel_object.class
  ldap_keys = ldap_keys(model)
  ldap_array = sequel_object.values.map do |sequel_key, value|
    # LDAP::Server expects all values to be Arrays
    [ldap_keys[sequel_key], [value]]
  end
  ldap_object = Hash[ldap_array]

  ldap_object['objectClass'] = object_classes(model)
  if sequel_object.is_a?(Group)
    ldap_object['dn_prefix'] = "cn=#{sequel_object.name},ou=Groups"
    if sequel_object.users.any?
      ldap_object['memberUid'] = sequel_object.users.map { |u| u.name }
    end
  elsif sequel_object.is_a?(User)
    ldap_object['dn_prefix'] = "uid=#{sequel_object.name},ou=People"
  end
  ldap_object
end