sheffield_ldap_lookup 0.0.4 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f1fb61d37a5823114d379ab1a345d184b1c35b17
4
- data.tar.gz: 86156649e10b28a2ff876a165a86eb15ca25b97c
2
+ SHA256:
3
+ metadata.gz: 3090dd3270a42985506f6077318966d175fb5460a058f397b71f1f70577e283e
4
+ data.tar.gz: 60717cc86c1e4302bc2d559678cac466a8fde864f716749f9729cef676a29116
5
5
  SHA512:
6
- metadata.gz: 080c9715362eb34846ec609100cfc7ba7936caa346d8ad99f6a0d9d45d03823a171b245d03f1646a3e3417b7d28ac3feff62d3976e9a889f7ed718950ea33051
7
- data.tar.gz: 0116b41bd5caa1e52ced95c481721c1641669af4838b76207ba581a1d5234b725db5e0fc709568f2fa6f592b280cc5c8665d082e365d2935944f5f76f586023f
6
+ metadata.gz: 0cd3d1d61454854acee77fd4ce9e508596f2f5b915dd55cc1a8ca72812154e0e23da960c0c0abf0d4d51364146261fc46f4f17215e2e0bd62e704fb47aa4c52f
7
+ data.tar.gz: 229b7266dd482ef161b6544906d1c51847ddc7b28bd027687d295e28474d7fa9a8006386c3bd83d3e032beb1445d6d6400a5fd781f2b947626955605bb973e73
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.1
@@ -2,16 +2,18 @@ require 'net/ldap'
2
2
  module SheffieldLdapLookup
3
3
  class LdapFinder
4
4
  attr_accessor :keyword
5
-
6
- def initialize(keyword = nil, config_prefix = nil)
5
+ attr_accessor :custom_search_attribute
6
+
7
+ def initialize(keyword = nil, config_prefix = nil, custom_search_attribute = nil)
7
8
  self.keyword = keyword
8
9
  @config_prefix = config_prefix
10
+ self.custom_search_attribute = custom_search_attribute
9
11
  end
10
-
12
+
11
13
  class << self
12
14
  attr_accessor :ldap_config
13
15
  end
14
-
16
+
15
17
  def lookup
16
18
  begin
17
19
  @lookup ||= connection.search(filter: ldap_filter)[0]
@@ -25,6 +27,7 @@ module SheffieldLdapLookup
25
27
  end
26
28
 
27
29
  def search_attribute
30
+ return custom_search_attribute if custom_search_attribute
28
31
  keyword =~ /\A[^@]+@[^@]+\z/ ? 'mail' : 'uid'
29
32
  end
30
33
 
@@ -35,12 +38,14 @@ module SheffieldLdapLookup
35
38
  def connection(ldap_class = Net::LDAP)
36
39
  @connection ||= ldap_class.new(connection_settings)
37
40
  end
38
-
41
+
39
42
  def connection_settings
40
43
  base_settings = {
41
- host: ldap_config["#{@config_prefix}host"], port: ldap_config["#{@config_prefix}port"], base: ldap_config["#{@config_prefix}base"]
44
+ host: ldap_config["#{@config_prefix}host"],
45
+ port: ldap_config["#{@config_prefix}port"],
46
+ base: ldap_config["#{@config_prefix}base"]
42
47
  }
43
-
48
+
44
49
  if ldap_config.key?("#{@config_prefix}username") && ldap_config.key?("#{@config_prefix}password")
45
50
  base_settings[:auth] = {
46
51
  method: :simple,
@@ -48,8 +53,14 @@ module SheffieldLdapLookup
48
53
  password: ldap_config["#{@config_prefix}password"]
49
54
  }
50
55
  end
56
+
57
+ if ldap_config["#{@config_prefix}ssl"] == true
58
+ base_settings[:port] ||= 636
59
+ base_settings[:encryption] = :simple_tls
60
+ end
61
+
51
62
  base_settings
52
63
  end
53
-
64
+
54
65
  end
55
- end
66
+ end
@@ -1,3 +1,3 @@
1
1
  module SheffieldLdapLookup
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -6,20 +6,20 @@ require 'sheffield_ldap_lookup/version'
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "sheffield_ldap_lookup"
8
8
  gem.version = SheffieldLdapLookup::VERSION
9
- gem.authors = ["Shuo Chen"]
10
- gem.email = ["s.chen@epigenesys.co.uk"]
9
+ gem.authors = ["James Gregory-Monk", "Shuo Chen"]
10
+ gem.email = ["james.gregory@epigenesys.org.uk", "shuo.chen@epigenesys.org.uk"]
11
11
  gem.description = "A gem to fetch information from University of Sheffield LDAP server based on username or email address."
12
12
  gem.summary = "LDAP lookup"
13
- gem.homepage = "http://www.epigenesys.org.uk"
13
+ gem.homepage = "https://www.epigenesys.org.uk"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
-
19
+
20
20
  gem.add_dependency('net-ldap')
21
-
21
+
22
22
  gem.add_development_dependency('rake')
23
23
  gem.add_development_dependency('rails', '>= 3.2')
24
24
  gem.add_development_dependency('rspec')
25
- end
25
+ end
@@ -2,68 +2,127 @@ require 'spec_helper'
2
2
  require 'sheffield_ldap_lookup/ldap_finder.rb'
3
3
 
4
4
  describe SheffieldLdapLookup::LdapFinder do
5
- LDAP_CONFIG = { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users' }
5
+ let(:ldap_config) { { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users' } }
6
+
6
7
  describe "#connection" do
7
8
  it "should create a new LDAP connection" do
8
- subject.stub(ldap_config: LDAP_CONFIG)
9
+ allow(subject).to receive(:ldap_config).and_return(ldap_config)
9
10
  ldap_class = double
10
- ldap_class.should_receive(:new).with(host: LDAP_CONFIG['host'], port: LDAP_CONFIG['port'], base: LDAP_CONFIG['base'])
11
+ expect(ldap_class).to receive(:new).with(host: ldap_config['host'], port: ldap_config['port'], base: ldap_config['base'])
11
12
  subject.connection(ldap_class)
12
13
  end
13
14
  end
14
-
15
+
15
16
  describe "#ldap_config" do
16
17
  it "should load the LDAP configuration" do
17
- SheffieldLdapLookup::LdapFinder.ldap_config = LDAP_CONFIG
18
- subject.ldap_config.should == LDAP_CONFIG
18
+ SheffieldLdapLookup::LdapFinder.ldap_config = ldap_config
19
+ expect(subject.ldap_config).to eq ldap_config
19
20
  end
20
21
  end
21
-
22
+
22
23
  describe "#search_attribute" do
23
24
  describe "determine to search against uid or email based on the format of the keyword" do
24
25
  it "should use 'uid' attribute for username" do
25
26
  finder = SheffieldLdapLookup::LdapFinder.new('username')
26
- finder.search_attribute.should == 'uid'
27
+ expect(finder.search_attribute).to eq 'uid'
27
28
  end
28
-
29
+
29
30
  it "should use 'mail' attribute for email" do
30
31
  finder = SheffieldLdapLookup::LdapFinder.new('test@test.com')
31
- finder.search_attribute.should == 'mail'
32
+ expect(finder.search_attribute).to eq 'mail'
32
33
  end
33
34
  end
34
35
  end
35
-
36
+
36
37
  describe "#ldap_filter" do
37
38
  it "should create a LDAP filter for the attribute and keyword" do
38
39
  finder = SheffieldLdapLookup::LdapFinder.new('username')
39
- finder.stub(search_attribute: 'uid')
40
+ allow(finder).to receive(:search_attribute).and_return('uid')
40
41
  filter_class = double
41
- filter_class.should_receive(:eq).with('uid', 'username')
42
+ expect(filter_class).to receive(:eq).with('uid', 'username')
42
43
  finder.ldap_filter filter_class
43
44
  end
44
45
  end
45
-
46
+
47
+ context "load config prefix" do
48
+ let(:ldap_config) { { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users',
49
+ 'prefix_host' => 'prefix_localhost', 'prefix_port' => '400', 'prefix_base' => 'ou=BigUsers' } }
50
+ subject { SheffieldLdapLookup::LdapFinder.new('123', 'prefix_') }
51
+
52
+ it "should create a new LDAP connection" do
53
+ allow(subject).to receive(:ldap_config).and_return(ldap_config)
54
+ ldap_class = double
55
+ expect(ldap_class).to receive(:new).with(host: ldap_config['prefix_host'], port: ldap_config['prefix_port'], base: ldap_config['prefix_base'])
56
+ subject.connection(ldap_class)
57
+ end
58
+ end
59
+
60
+ context 'with an ssl config' do
61
+ let(:ldap_config) { { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users', 'ssl' => true } }
62
+
63
+ it "should create a new secure LDAP connection" do
64
+ allow(subject).to receive(:ldap_config).and_return(ldap_config)
65
+ ldap_class = double
66
+ expect(ldap_class).to receive(:new).with(host: ldap_config['host'],
67
+ port: ldap_config['port'], base: ldap_config['base'],
68
+ encryption: :simple_tls)
69
+ subject.connection(ldap_class)
70
+ end
71
+ end
72
+
73
+ context 'with a username and password config' do
74
+ let(:ldap_config) { { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users',
75
+ 'username' => 'ldapusername', 'password' => 'ldappassword' } }
76
+
77
+ it "should create a new secure LDAP connection" do
78
+ allow(subject).to receive(:ldap_config).and_return(ldap_config)
79
+ ldap_class = double
80
+ expect(ldap_class).to receive(:new).with(host: ldap_config['host'],
81
+ port: ldap_config['port'], base: ldap_config['base'],
82
+ auth: { method: :simple, username: 'ldapusername', password: 'ldappassword' } )
83
+ subject.connection(ldap_class)
84
+ end
85
+ end
86
+
87
+ context 'with a username, password and ssl config' do
88
+ let(:ldap_config) { { 'host' => 'localhost', 'port' => '389', 'base' => 'ou=Users',
89
+ 'username' => 'ldapusername', 'password' => 'ldappassword', 'ssl' => true } }
90
+
91
+ it "should create a new secure LDAP connection" do
92
+ allow(subject).to receive(:ldap_config).and_return(ldap_config)
93
+ ldap_class = double
94
+ expect(ldap_class).to receive(:new).with(host: ldap_config['host'],
95
+ port: ldap_config['port'], base: ldap_config['base'], encryption: :simple_tls,
96
+ auth: { method: :simple, username: 'ldapusername', password: 'ldappassword' } )
97
+ subject.connection(ldap_class)
98
+ end
99
+ end
100
+
46
101
  describe "#lookup" do
47
102
  describe "use the LDAP filter to search for the entity and return the first result" do
48
103
  let(:ldap_filter) { double }
49
104
  let(:connection) { double }
50
- before { subject.stub(ldap_filter: ldap_filter, connection: connection) }
51
-
105
+
106
+ before do
107
+ allow(subject).to receive(:ldap_filter).and_return(ldap_filter)
108
+ allow(subject).to receive(:connection).and_return(connection)
109
+ end
110
+
52
111
  it "should search the LDAP connection using the filter" do
53
- connection.should_receive(:search).with(filter: ldap_filter).and_return([])
112
+ expect(connection).to receive(:search).with(filter: ldap_filter).and_return([])
54
113
  subject.lookup
55
114
  end
56
-
115
+
57
116
  it "should return the first result" do
58
117
  result = double
59
- connection.stub(search: [result])
60
- subject.lookup.should == result
118
+ allow(connection).to receive(:search).and_return([result])
119
+ expect(subject.lookup).to eq result
61
120
  end
62
-
121
+
63
122
  it "should return an empty hash if cannot connect to LDAP" do
64
- connection.stub(search: ->{raise})
65
- subject.lookup.should == {}
123
+ allow(connection).to receive(:search).and_return(->{raise})
124
+ expect(subject.lookup).to eq({})
66
125
  end
67
126
  end
68
127
  end
69
- end
128
+ end
metadata CHANGED
@@ -1,81 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheffield_ldap_lookup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
+ - James Gregory-Monk
7
8
  - Shuo Chen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-07-31 00:00:00.000000000 Z
12
+ date: 2023-01-05 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: net-ldap
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - '>='
18
+ - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '0'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - '>='
25
+ - - ">="
25
26
  - !ruby/object:Gem::Version
26
27
  version: '0'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: rake
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - '>='
32
+ - - ">="
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - '>='
39
+ - - ">="
39
40
  - !ruby/object:Gem::Version
40
41
  version: '0'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rails
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - '>='
46
+ - - ">="
46
47
  - !ruby/object:Gem::Version
47
48
  version: '3.2'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - '>='
53
+ - - ">="
53
54
  - !ruby/object:Gem::Version
54
55
  version: '3.2'
55
56
  - !ruby/object:Gem::Dependency
56
57
  name: rspec
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - '>='
60
+ - - ">="
60
61
  - !ruby/object:Gem::Version
61
62
  version: '0'
62
63
  type: :development
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - '>='
67
+ - - ">="
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  description: A gem to fetch information from University of Sheffield LDAP server based
70
71
  on username or email address.
71
72
  email:
72
- - s.chen@epigenesys.co.uk
73
+ - james.gregory@epigenesys.org.uk
74
+ - shuo.chen@epigenesys.org.uk
73
75
  executables: []
74
76
  extensions: []
75
77
  extra_rdoc_files: []
76
78
  files:
77
- - .gitignore
78
- - .rvmrc
79
+ - ".gitignore"
80
+ - ".ruby-version"
79
81
  - Gemfile
80
82
  - LICENSE.txt
81
83
  - README.md
@@ -88,7 +90,7 @@ files:
88
90
  - sheffield_ldap_lookup.gemspec
89
91
  - spec/lib/ldap_finder_spec.rb
90
92
  - spec/spec_helper.rb
91
- homepage: http://www.epigenesys.org.uk
93
+ homepage: https://www.epigenesys.org.uk
92
94
  licenses: []
93
95
  metadata: {}
94
96
  post_install_message:
@@ -97,17 +99,16 @@ require_paths:
97
99
  - lib
98
100
  required_ruby_version: !ruby/object:Gem::Requirement
99
101
  requirements:
100
- - - '>='
102
+ - - ">="
101
103
  - !ruby/object:Gem::Version
102
104
  version: '0'
103
105
  required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  requirements:
105
- - - '>='
107
+ - - ">="
106
108
  - !ruby/object:Gem::Version
107
109
  version: '0'
108
110
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.2.2
111
+ rubygems_version: 3.1.6
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: LDAP lookup
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use --create @sheffield_ldap_lookup