dm-ldap-adapter 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,17 +28,27 @@ module Ldap
28
28
  end
29
29
  logger.info("using #{@facade}")
30
30
  @ldaps = { }
31
- auth = {
32
- :method => :simple,
33
- :username => options[:bind_name],
34
- :password => options[:password]
35
- }
36
31
  @config = {
37
32
  :host => options[:host],
38
33
  :port => options[:port].to_i,
39
- :auth => auth,
40
34
  :base => options[:base]
41
35
  }
36
+
37
+ if not options[:bind_name].nil? then
38
+ @config.update({
39
+ :auth => {
40
+ :method => :simple,
41
+ :username => options[:bind_name],
42
+ :password => options[:password]
43
+ }
44
+ })
45
+ end
46
+
47
+ if not options[:adapter_options].nil? then
48
+ options[:adapter_options].each do |k,v|
49
+ @config[k.to_sym] = v
50
+ end
51
+ end
42
52
  end
43
53
 
44
54
  # puts a LdapFacade into the current thread and executes the
@@ -178,7 +188,7 @@ module DataMapper
178
188
  end
179
189
 
180
190
  def update(attributes, collection)
181
- collection.each do |resource|
191
+ size = collection.each do |resource|
182
192
  #puts "update"
183
193
  #p resource
184
194
  update_resource(resource, attributes)
@@ -1 +1,2 @@
1
- require 'adapter/ldap-adapter'
1
+ require 'slf4r'
2
+ require 'adapters/ldap_adapter'
@@ -1,4 +1,5 @@
1
1
  require 'net/ldap'
2
+ require 'slf4r'
2
3
  require 'ldap/conditions_2_filter'
3
4
 
4
5
  module Ldap
data/lib/ldap_resource.rb CHANGED
@@ -4,7 +4,15 @@ require 'ldap/array'
4
4
 
5
5
  module DataMapper
6
6
  module Model
7
-
7
+
8
+ if DataMapper::VERSION =~ /^1.[0-1]/
9
+ Immutable = Resource::State::Immutable
10
+ Clean = Resource::State::Clean
11
+ else
12
+ Immutable = Resource::PersistenceState::Immutable
13
+ Clean = Resource::PersistenceState::Clean
14
+ end
15
+
8
16
  def load(records, query)
9
17
  repository = query.repository
10
18
  repository_name = repository.name
@@ -67,13 +75,17 @@ module DataMapper
67
75
  resource.instance_variable_set(:@_repository, repository)
68
76
 
69
77
  if identity_map
70
- resource.persisted_state = Resource::State::Clean.new(resource) unless resource.persisted_state?
71
-
78
+ if DataMapper::VERSION =~ /^1.[0-1]/
79
+ resource.persisted_state = Clean.new(resource) unless resource.persisted_state?
80
+ else
81
+ resource.persistence_state = Clean.new(resource) unless resource.persistence_state?
82
+ end
83
+
72
84
  # defer setting the IdentityMap so second level caches can
73
85
  # record the state of the resource after loaded
74
86
  identity_map[key_values] = resource
75
87
  else
76
- resource.persisted_state = Resource::State::Immutable.new(resource)
88
+ resource.persisted_state = Immutable.new(resource)
77
89
  end
78
90
 
79
91
  resource
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper::Adapters::LdapAdapter do
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper.repository(:ldap).adapter do
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
  require 'ldap/transactions'
4
3
 
@@ -50,6 +49,15 @@ describe DataMapper::Adapters::LdapAdapter do
50
49
  end
51
50
  end
52
51
 
52
+ it 'should return false if save fails' do
53
+ DataMapper.repository(:ldap) do
54
+ u = User.first(:login.not => "black")
55
+ u.age = 'some error'
56
+ u.save.should be_false
57
+ #p User.all
58
+ end
59
+ end
60
+
53
61
  it 'should be able to get all the objects' do
54
62
  DataMapper.repository(:ldap) do
55
63
  User.all(:login.like => "b%").should == [@user1, @user2, @user3]
@@ -1,11 +1,6 @@
1
- $LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
2
-
3
- require 'ldap/array'
4
- require 'dm-migrations'
5
- require 'dm-sqlite-adapter'
1
+ require 'spec_helper'
6
2
 
7
3
  class A
8
-
9
4
  include DataMapper::Resource
10
5
 
11
6
  property :id, Serial
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  class Order
@@ -1,32 +1,5 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
- class TestContact
5
- include DataMapper::Resource
6
-
7
- property :id, Serial, :field => "uidNumber"
8
- property :login, String, :field => "uid", :unique_index => true
9
- property :hashed_password, String, :field => "userPassword", :lazy => true
10
- property :name, String, :field => "cn"
11
- property :mail, ::Ldap::LdapArray
12
-
13
- dn_prefix { |contact| "uid=#{contact.login}"}
14
-
15
- treebase "ou=people"
16
-
17
- ldap_properties do |contact|
18
- properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
19
- properties[:sn] = "#{contact.name.sub(/.*\ /, "")}"
20
- properties[:givenname] = "#{contact.name.sub(/\ .*/, "")}"
21
- properties[:homedirectory] = "/home/#{contact.login}"
22
- properties
23
- end
24
-
25
- def password=(password)
26
- attribute_set(:hashed_password, Ldap::Digest.ssha(password, "--#{Time.now}--#{login}--")) if password
27
- end
28
- end
29
-
30
3
  describe DataMapper.repository(:ldap).adapter.class do
31
4
 
32
5
  describe 'LdapArray' do
data/spec/sorting_spec.rb CHANGED
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper.repository(:ldap).adapter do
@@ -58,4 +57,4 @@ describe DataMapper.repository(:ldap).adapter do
58
57
  end
59
58
  end
60
59
  end
61
- end
60
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,19 +1,18 @@
1
- require 'rubygems'
2
-
3
- require 'slf4r/ruby_logger'
4
- Slf4r::LoggerFacade4RubyLogger.level = :warn
1
+ #Require main environment
2
+ require 'dm-ldap-adapter'
5
3
 
4
+ #Require developer depdencies
6
5
  require 'dm-sqlite-adapter'
7
6
  require 'dm-migrations'
8
- require 'dm-transactions'
9
- require 'pathname'
10
- $LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
11
7
 
12
8
  print "datamapper version:"
13
9
  puts DataMapper::VERSION
14
10
 
11
+ #Logging needs to be cleaned up...
12
+ require 'slf4r/ruby_logger'
13
+ Slf4r::LoggerFacade4RubyLogger.level = :warn
14
+
15
15
  require 'ldap_resource'
16
- require 'adapters/ldap_adapter'
17
16
 
18
17
  DataMapper.setup(:default, 'sqlite3::memory:')
19
18
  DataMapper.setup(:ldap, {
@@ -28,136 +27,10 @@ DataMapper.setup(:ldap, {
28
27
 
29
28
  puts "using facade #{(ENV['FACADE'] || :net_ldap).to_sym}"
30
29
 
31
- module DataMapper
32
- module Resource
33
- class State
34
-
35
- # a persisted/deleted resource
36
- class Deleted < Persisted
37
- def set(subject, value)
38
- warn 'Deleted resource cannot be modified ' + subject.inspect + ' ' + value.to_s + " " + @resource.inspect
39
- super
40
- end
41
- end
42
- end
43
- end
44
- end
45
- class User
46
- include DataMapper::Resource
47
- property :id, Serial, :field => "uidnumber"
48
- property :login, String, :field => "uid", :unique_index => true
49
- property :hashed_password, String, :field => "userPassword", :writer => :private
50
- property :name, String, :field => "cn"
51
- property :mail, String
52
- property :age, Integer, :field => "postalCode"
53
- property :alive, Boolean, :field => "gecos"
54
-
55
- has n, :roles
56
-
57
- has n, :group_users
58
-
59
- def groups
60
- groups = GroupUser.all(:user_id => login).collect{ |gu| gu.group }
61
-
62
- def groups.user=(user)
63
- @user = user
64
- end
65
-
66
- groups.user = self
67
-
68
- def groups.<<(group)
69
- unless member? group
70
- GroupUser.create(:user_id => @user.login, :group_id => group.id)
71
- super
72
- end
73
- self
74
- end
75
-
76
- def groups.delete(group)
77
- gu = GroupUser.first(:user_id => @user.login, :group_id => group.id)
78
- if gu
79
- gu.destroy
80
- super
81
- end
82
- end
83
-
84
- groups
85
- end
86
-
87
- dn_prefix { |user| "uid=#{user.login}"}
88
-
89
- treebase "ou=people"
90
-
91
- ldap_properties do |user|
92
- properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
93
- properties[:sn] = "#{user.name.sub(/.*\ /, "")}"
94
- properties[:givenname] = "#{user.name.sub(/\ .*/, "")}"
95
- properties[:homedirectory] = "/home/#{user.login}"
96
- properties
97
- end
98
-
99
- def password=(password)
100
- salt = "--#{Time.now}--#{login}--"
101
- attribute_set(:hashed_password, Ldap::Digest.ssha(password, salt)) if password
102
- end
103
- end
30
+ # Requires supporting ruby files with custom matchers and macros, etc,
31
+ # in spec/support/ and its subdirectories.
32
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
104
33
 
105
- class Role
106
- include DataMapper::Resource
107
- property :id, Serial, :field => "gidNumber"
108
- property :name, String, :field => "cn"
109
-
110
- dn_prefix { |role| "cn=#{role.name}" }
111
-
112
- treebase "ou=groups"
113
-
114
- ldap_properties {{:objectclass => "posixGroup"}}
115
-
116
- belongs_to :user
117
- end
118
-
119
- class Group
120
- include DataMapper::Resource
121
- property :id, Serial, :field => "gidNumber"
122
- property :name, String, :field => "cn"
123
-
124
- dn_prefix { |group| "cn=#{group.name}" }
125
-
126
- treebase "ou=groups"
127
-
128
- ldap_properties {{:objectclass => "posixGroup"}}
129
- end
130
-
131
- class GroupUser
132
- include DataMapper::Resource
133
-
134
- dn_prefix { |group_user| "cn=#{group_user.group.name}" }
135
-
136
- treebase "ou=groups"
137
-
138
- multivalue_field :memberUid
139
-
140
- ldap_properties do |group_user|
141
- {:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
142
- end
143
-
144
- property :user_id, String, :key => true, :field => "memberUid"
145
- property :group_id, Integer, :key => true, :field => "gidNumber"
146
-
147
- def group
148
- Group.get!(group_id)
149
- end
150
-
151
- def group=(group)
152
- group_id = group.id
153
- end
34
+ DataMapper.auto_migrate!(:default)
154
35
 
155
- def user
156
- User.get!(user_id)
157
- end
158
36
 
159
- def user=(user)
160
- user_id = user.id
161
- end
162
- end
163
- DataMapper.auto_migrate!(:default)
@@ -0,0 +1,11 @@
1
+ class Group
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "gidNumber"
4
+ property :name, String, :field => "cn"
5
+
6
+ dn_prefix { |group| "cn=#{group.name}" }
7
+
8
+ treebase "ou=groups"
9
+
10
+ ldap_properties {{:objectclass => "posixGroup"}}
11
+ end
@@ -0,0 +1,32 @@
1
+ class GroupUser
2
+ include DataMapper::Resource
3
+
4
+ dn_prefix { |group_user| "cn=#{group_user.group.name}" }
5
+
6
+ treebase "ou=groups"
7
+
8
+ multivalue_field :memberUid
9
+
10
+ ldap_properties do |group_user|
11
+ {:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
12
+ end
13
+
14
+ property :user_id, String, :key => true, :field => "memberUid"
15
+ property :group_id, Integer, :key => true, :field => "gidNumber"
16
+
17
+ def group
18
+ Group.get!(group_id)
19
+ end
20
+
21
+ def group=(group)
22
+ group_id = group.id
23
+ end
24
+
25
+ def user
26
+ User.get!(user_id)
27
+ end
28
+
29
+ def user=(user)
30
+ user_id = user.id
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ class Role
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "gidNumber"
4
+ property :name, String, :field => "cn"
5
+
6
+ dn_prefix { |role| "cn=#{role.name}" }
7
+
8
+ treebase "ou=groups"
9
+
10
+ ldap_properties {{:objectclass => "posixGroup"}}
11
+
12
+ belongs_to :user
13
+ end
@@ -0,0 +1,25 @@
1
+ class TestContact
2
+ include DataMapper::Resource
3
+
4
+ property :id, Serial, :field => "uidNumber"
5
+ property :login, String, :field => "uid", :unique_index => true
6
+ property :hashed_password, String, :field => "userPassword", :lazy => true
7
+ property :name, String, :field => "cn"
8
+ property :mail, ::Ldap::LdapArray
9
+
10
+ dn_prefix { |contact| "uid=#{contact.login}"}
11
+
12
+ treebase "ou=people"
13
+
14
+ ldap_properties do |contact|
15
+ properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
16
+ properties[:sn] = "#{contact.name.sub(/.*\ /, "")}"
17
+ properties[:givenname] = "#{contact.name.sub(/\ .*/, "")}"
18
+ properties[:homedirectory] = "/home/#{contact.login}"
19
+ properties
20
+ end
21
+
22
+ def password=(password)
23
+ attribute_set(:hashed_password, Ldap::Digest.ssha(password, "--#{Time.now}--#{login}--")) if password
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+ class User
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "uidnumber"
4
+ property :login, String, :field => "uid", :unique_index => true
5
+ property :hashed_password, String, :field => "userPassword", :writer => :private
6
+ property :name, String, :field => "cn"
7
+ property :mail, String
8
+ property :age, Integer, :field => "postalCode"
9
+ property :alive, Boolean, :field => "gecos"
10
+
11
+ has n, :roles
12
+
13
+ has n, :group_users
14
+
15
+ def groups
16
+ groups = GroupUser.all(:user_id => login).collect{ |gu| gu.group }
17
+
18
+ def groups.user=(user)
19
+ @user = user
20
+ end
21
+
22
+ groups.user = self
23
+
24
+ def groups.<<(group)
25
+ unless member? group
26
+ GroupUser.create(:user_id => @user.login, :group_id => group.id)
27
+ super
28
+ end
29
+ self
30
+ end
31
+
32
+ def groups.delete(group)
33
+ gu = GroupUser.first(:user_id => @user.login, :group_id => group.id)
34
+ if gu
35
+ gu.destroy
36
+ super
37
+ end
38
+ end
39
+
40
+ groups
41
+ end
42
+
43
+ dn_prefix { |user| "uid=#{user.login}"}
44
+
45
+ treebase "ou=people"
46
+
47
+ ldap_properties do |user|
48
+ properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
49
+ properties[:sn] = "#{user.name.sub(/.*\ /, "")}"
50
+ properties[:givenname] = "#{user.name.sub(/\ .*/, "")}"
51
+ properties[:homedirectory] = "/home/#{user.login}"
52
+ properties
53
+ end
54
+
55
+ def password=(password)
56
+ salt = "--#{Time.now}--#{login}--"
57
+ attribute_set(:hashed_password, Ldap::Digest.ssha(password, salt)) if password
58
+ end
59
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-ldap-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 3
10
- version: 0.4.3
9
+ - 4
10
+ version: 0.4.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - mkristian
@@ -16,8 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-06 00:00:00 +05:30
20
- default_executable:
19
+ date: 2011-12-03 00:00:00 Z
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: net-ldap
@@ -128,9 +127,25 @@ dependencies:
128
127
  type: :development
129
128
  version_requirements: *id007
130
129
  - !ruby/object:Gem::Dependency
131
- name: ruby-ldap
130
+ name: bundler
132
131
  prerelease: false
133
132
  requirement: &id008 !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ hash: 9
138
+ segments:
139
+ - 1
140
+ - 0
141
+ - 15
142
+ version: 1.0.15
143
+ type: :development
144
+ version_requirements: *id008
145
+ - !ruby/object:Gem::Dependency
146
+ name: ruby-ldap
147
+ prerelease: false
148
+ requirement: &id009 !ruby/object:Gem::Requirement
134
149
  none: false
135
150
  requirements:
136
151
  - - ~>
@@ -142,7 +157,7 @@ dependencies:
142
157
  - 11
143
158
  version: 0.9.11
144
159
  type: :development
145
- version_requirements: *id008
160
+ version_requirements: *id009
146
161
  description: ldap adapter for datamapper which uses either net-ldap or ruby-ldap
147
162
  email:
148
163
  - m.kristian@web.de
@@ -178,14 +193,17 @@ files:
178
193
  - spec/multi_value_attributes_spec.rb
179
194
  - spec/sorting_spec.rb
180
195
  - spec/multi_repository_spec.rb
181
- - spec/contact.rb
182
196
  - spec/spec_helper.rb
183
197
  - spec/ldap_adapter_spec.rb
184
198
  - spec/authentication_ldap_adapter_spec.rb
185
199
  - spec/assiociations_ldap_adapter_spec.rb
186
200
  - spec/ldap_array_spec.rb
201
+ - spec/support/group_user.rb
202
+ - spec/support/user.rb
203
+ - spec/support/test_contact.rb
204
+ - spec/support/role.rb
205
+ - spec/support/group.rb
187
206
  - example/posix.rb
188
- has_rdoc: true
189
207
  homepage: http://github.com/mkristian/dm-ldap-adapter
190
208
  licenses: []
191
209
 
@@ -216,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
234
  requirements: []
217
235
 
218
236
  rubyforge_project:
219
- rubygems_version: 1.5.3
237
+ rubygems_version: 1.7.2
220
238
  signing_key:
221
239
  specification_version: 3
222
240
  summary: ""
data/spec/contact.rb DELETED
@@ -1,58 +0,0 @@
1
- class Contact
2
- include DataMapper::Resource
3
-
4
- def self.auto_upgrade!(args = nil)
5
- DataMapper.logger.warn("Skipping #{self.name}.auto_upgrade!")
6
- end
7
-
8
- def self.default_repository_name
9
- :ldap
10
- end
11
-
12
- def self.repository_name
13
- :ldap
14
- end
15
-
16
- property :id, Serial, :field => 'uid'
17
- property :cn, String, :required => true
18
- property :salutation, String, :lazy => [:view]
19
- property :title, String, :lazy => [:view]
20
- property :givenname, String
21
- property :sn, String, :required => true
22
- property :o, String
23
- property :postaladdress, String, :lazy => [:view]
24
- property :postalcode, String, :lazy => [:view]
25
- property :l, String
26
- property :st, String, :lazy => [:view]
27
- property :c, String, :lazy => [:view]
28
- property :telephonenumber, String
29
- property :facsimiletelephonenumber, String, :lazy => [:view]
30
- property :pager, String, :lazy => [:view]
31
- property :jpegphoto, LdapArray, :lazy => true
32
- property :mobile, String, :lazy => [:view]
33
- property :anniversary, String, :lazy => [:view]
34
- property :mail, LdapArray
35
- property :labeleduri, LdapArray, :lazy => [:view]
36
- property :marker, LdapArray, :lazy => [:view]
37
- property :description, LdapArray, :lazy => [:view]
38
-
39
- dn_prefix do |u|
40
- "uid=#{u.id}"
41
- end
42
-
43
- ldap_properties do |u|
44
- properties = { :objectclass => ['inetOrgPerson']}#, "posixAccount", "shadowAccount"]}#'contactPerson'] }
45
- properties
46
- end
47
-
48
- treebase 'ou=people'
49
-
50
- before :save, :fix_object
51
-
52
- private
53
-
54
- def fix_object
55
- self.cn = "#{self.givenname} #{self.sn}".strip
56
- end
57
-
58
- end