rack-auth-ldap 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,11 @@
1
- # coding: utf-8
2
1
  # Author : Romain GEORGES
3
-
2
+ require 'version'
4
3
  # the Rack module from Rack Sources
5
4
  module Rack
6
-
7
- # the Rack::Auth module from Rack Sources
5
+ # the Rack::Auth module from Rack Sources
8
6
  module Auth
9
7
  # the current version for Rack::Auth::Ldap => gem rack-auth-ldap
10
8
  # used by gemspec
11
- LDAP_VERSION = "1.2.1"
9
+ LDAP_VERSION = Version.current
12
10
  end
13
11
  end
@@ -1,6 +1,4 @@
1
- # coding: utf-8
2
-
3
- #inhibit warning : due to net-ldap warning on Socket.tcp
1
+ # inhibit warning : due to net-ldap warning on Socket.tcp
4
2
  $-w = nil
5
3
 
6
4
  require 'rack'
@@ -11,67 +9,62 @@ require 'yaml'
11
9
 
12
10
  # the rack module from Rack Sources
13
11
  module Rack
14
-
15
12
  # the auth module from Rack Sources
16
13
  module Auth
17
-
18
14
  # class Config provide Yaml config mapping for Rack::Auth::Module
19
15
  # the class map ldap configurations values
20
16
  # @note this class is not provide to be used standalone
21
17
  class Config
22
-
23
18
  # initializer for Config class
24
19
  # @param [Hash<Symbol>] options initialisation options
25
20
  # @option options [Symbol] :file The YAML filename (default to ./ldap.yml, the config.ru path)
26
21
  # @return [Config] object himself
27
- def initialize(options = { :file => './ldap.yml'})
22
+ def initialize(options = { file: './ldap.yml' })
28
23
  @values = defaults
29
- options.merge!(:file => './ldap.yml') { |key,oldval,newval| oldval }
30
- target = (ENV['RACK_ENV'])? ENV['RACK_ENV'] : 'test'
24
+ options.merge!(file: './ldap.yml') { |_key, oldval, _newval| oldval }
25
+ target = ENV['RACK_ENV'] || 'test'
31
26
  config_values = load_yaml(::File.expand_path(options[:file], Dir.pwd))[target]
32
- debug = ::File.open("/tmp/test.txt",'a+')
33
- debug.puts ENV['RACK_ENV']
27
+ debug = ::File.open('/tmp/test.txt', 'a+')
28
+ debug.puts ENV.fetch('RACK_ENV', nil)
34
29
  debug.close
35
30
  config_values.keys.each do |key|
36
31
  config_values[key.to_sym] = config_values.delete(key)
37
32
  end
38
33
  @values.merge! config_values
39
34
  @values.keys.each do |meth|
40
- bloc = Proc.new {@values[meth] }
41
- self.class.send :define_method, meth, &bloc
35
+ bloc = proc { @values[meth] }
36
+ self.class.send :define_method, meth, &bloc
42
37
  end
43
38
  end
44
39
 
45
40
  private
46
41
 
47
42
  def load_yaml(file)
48
- if ::File.exist?(file)
49
- ::YAML.load ::ERB.new(IO.read(file)).result
50
- else
51
- raise "Could not load ldap configuration. No such file - #{file}"
52
- end
43
+ raise "Could not load ldap configuration. No such file - #{file}" unless ::File.exist?(file)
44
+
45
+ ::YAML.load ::ERB.new(IO.read(file)).result, aliases: true
53
46
  rescue ::Psych::SyntaxError => e
54
47
  raise "YAML syntax error occurred while parsing #{file}. " \
55
- "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
48
+ 'Please note that YAML must be consistently indented using spaces. Tabs are not allowed. ' \
56
49
  "Error: #{e.message}"
57
50
  end
58
51
 
59
52
  # private method with default configuration values for LDAP
60
53
  # @return [Hash<Symbol>] the default values of LDAP configuration
61
54
  def defaults
62
- return {
63
- :hostname => 'localhost',
64
- :basedn => 'dc=domain,dc=tld',
65
- :rootdn => '',
66
- :passdn => '',
67
- :auth => false,
68
- :port => 389,
69
- :scope => :subtree,
70
- :username_ldap_attribute => 'uid',
71
- :ldaps => false,
72
- :starttls => false,
73
- :tls_options => nil,
74
- :debug => false
55
+ {
56
+ hostname: 'localhost',
57
+ basedn: 'dc=domain,dc=tld',
58
+ rootdn: '',
59
+ passdn: '',
60
+ auth: false,
61
+ port: 389,
62
+ scope: :subtree,
63
+ username_ldap_attribute: 'uid',
64
+ ldaps: false,
65
+ starttls: false,
66
+ tls_options: nil,
67
+ debug: false
75
68
  }
76
69
  end
77
70
  end
@@ -85,7 +78,6 @@ module Rack
85
78
  # require 'rack/auth/ldap'
86
79
  # use Rack::Auth::Ldap
87
80
  class Ldap < AbstractHandler
88
-
89
81
  # the config read accessor
90
82
  # @attr [Rack::Auth::Config] the read accessor to the LDAP Config object
91
83
  attr_reader :config
@@ -109,6 +101,7 @@ module Rack
109
101
  auth = Ldap::Request.new(env)
110
102
  return unauthorized unless auth.provided?
111
103
  return bad_request unless auth.basic?
104
+
112
105
  if valid?(auth)
113
106
  env['REMOTE_USER'] = auth.username
114
107
  return @app.call(env)
@@ -116,7 +109,6 @@ module Rack
116
109
  unauthorized
117
110
  end
118
111
 
119
-
120
112
  private
121
113
 
122
114
  # forge a challange header for HTTP basic auth with the realm attribut
@@ -131,16 +123,16 @@ module Rack
131
123
  def valid?(auth)
132
124
  # how to connect to the ldap server: ldap, ldaps, ldap + starttls
133
125
  if @config.ldaps
134
- enc = { :method => :simple_tls }
126
+ enc = { method: :simple_tls }
135
127
  elsif @config.starttls
136
- enc = { :method => :start_tls }
128
+ enc = { method: :start_tls }
137
129
  enc[:tls_options] = @config.tls_options if @config.tls_options
138
130
  else
139
- enc = nil # just straight ldap
131
+ enc = nil # just straight ldap
140
132
  end
141
- conn = Net::LDAP.new( :host => @config.hostname, :port => @config.port,
142
- :base => @config.basedn,
143
- :encryption => enc )
133
+ conn = Net::LDAP.new(host: @config.hostname, port: @config.port,
134
+ base: @config.basedn,
135
+ encryption: enc)
144
136
 
145
137
  $stdout.puts "Net::LDAP.new => #{conn.inspect}" if @config.debug
146
138
 
@@ -157,30 +149,26 @@ module Rack
157
149
  $stdout.puts "Net::LDAP::Filter.eq => #{filter.inspect}" if @config.debug
158
150
 
159
151
  # find the user and rebind as them to test the password
160
- #return conn.bind_as(:filter => filter, :password => auth.password)
152
+ # return conn.bind_as(:filter => filter, :password => auth.password)
161
153
  $stdout.puts "doing bind_as password.size: #{auth.password.size}..." if @config.debug
162
- ret = conn.bind_as(:filter => filter, :password => auth.password)
154
+ ret = conn.bind_as(filter: filter, password: auth.password)
163
155
  $stdout.puts "bind_as => #{ret.inspect}" if @config.debug
164
156
  ret
165
157
  end
166
158
 
167
- private
168
-
169
-
170
159
  # Request class the LDAP credentials authenticator
171
160
  # @note please do not instantiate manually, used by Rack::Auth:Ldap
172
161
  class Request < Auth::AbstractRequest
173
-
174
162
  # return true if the auth scheme provide is really a basic scheme
175
163
  # @return [FalseClass,TrueClass] the result
176
164
  def basic?
177
- !parts.first.nil? && "basic" == scheme
165
+ !parts.first.nil? && 'basic' == scheme
178
166
  end
179
167
 
180
168
  # return an array of the two credentials [username,password]
181
169
  # @return [Array] the couple [username,password]
182
170
  def credentials
183
- @credentials ||= params.unpack("m*").first.split(/:/, 2)
171
+ @credentials ||= params.unpack1('m*').split(':', 2)
184
172
  end
185
173
 
186
174
  # read accessor on the first credentials, username
@@ -194,9 +182,7 @@ module Rack
194
182
  def password
195
183
  credentials.last
196
184
  end
197
-
198
185
  end
199
-
200
186
  end
201
187
  end
202
188
  end
@@ -1,32 +1,31 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'rack/auth/ldap/version'
4
-
5
3
 
6
4
  Gem::Specification.new do |s|
7
- s.name = "rack-auth-ldap"
8
- s.summary = %Q{Rack middleware providing LDAP authentication}
9
- s.email = "romain@ultragreen.net"
10
- s.homepage = "http://www.github.com/lecid/rack-auth-ldap"
11
- s.authors = ["Romain GEORGES"]
12
- s.version = Rack::Auth::LDAP_VERSION
13
-
14
-
15
- s.description = %q{rack-auth-ldap : provide LDAP authentication for Rack middelware}
16
- s.add_development_dependency 'rspec', '~> 3.9.0'
17
- s.add_development_dependency 'yard', '~> 0.9.24'
18
- s.add_development_dependency 'rdoc', '~> 6.2.1'
19
- s.add_development_dependency 'roodi', '~> 5.0.0'
5
+
6
+ s.name = 'rack-auth-ldap'
7
+ s.summary = %(Rack middleware providing LDAP authentication)
8
+ s.email = 'romain@ultragreen.net'
9
+ s.homepage = 'http://www.github.com/lecid/rack-auth-ldap'
10
+ s.authors = ['Romain GEORGES']
11
+ s.version = `cat VERSION`.chomp
12
+ s.description = 'rack-auth-ldap : provide LDAP authentication for Rack middelware'
13
+
14
+ s.add_development_dependency 'bundle-audit', '~> 0.1.0'
20
15
  s.add_development_dependency 'code_statistics', '~> 0.2.13'
21
- s.add_development_dependency 'yard-rspec', '~> 0.1'
22
16
  s.add_development_dependency 'ladle', '~> 1.0.1'
23
- s.add_development_dependency 'rake', '~> 13.0.1'
24
-
25
-
17
+ s.add_development_dependency 'rake', '~> 13.2.1'
18
+ s.add_development_dependency 'rspec', '~> 3.13.0'
19
+ s.add_development_dependency 'rubocop', '~> 1.63.2'
20
+ s.add_development_dependency 'yard', '~> 0.9.36'
21
+ s.add_development_dependency 'yard-rspec', '~> 0.1'
22
+ s.add_development_dependency 'version', '~> 1.1.1'
23
+ s.add_development_dependency 'debride', '~> 1.12'
26
24
 
25
+ s.add_dependency 'net-ldap', '~> 0.19'
26
+ s.add_dependency 'rack', '~> 3.0.10'
27
27
 
28
- s.add_dependency 'net-ldap', '~> 0.16.2'
29
- s.add_dependency 'rack', '~> 2.2.2'
30
- s.license = "BSD-2-Clause"
28
+ s.license = 'BSD-2-Clause'
31
29
  s.files = `git ls-files`.split($/)
30
+ s.metadata['rubygems_mfa_required'] = 'true'
32
31
  end
@@ -1,24 +1,21 @@
1
- # coding: utf-8
2
1
  require 'ladle'
3
2
  require 'rack/auth/ldap'
4
3
  require 'rack/lint'
5
4
  require 'rack/mock'
6
5
 
7
6
  describe Rack::Auth::Ldap do
7
+ before :all do
8
+ @ldap_server = Ladle::Server.new({
9
+ quiet: true, port: 3897,
10
+ ldif: './spec/config/users.ldif',
11
+ domain: 'dc=test',
12
+ tmpdir: '/tmp'
13
+ }).start
14
+ end
8
15
 
9
- before :all do
10
- @ldap_server = Ladle::Server.new({
11
- :quiet => true, :port => 3897,
12
- :ldif => "./spec/config/users.ldif",
13
- :domain => "dc=test",
14
- :tmpdir => '/tmp'
15
- }).start
16
- end
17
-
18
- after :all do
19
- @ldap_server.stop if @ldap_server
20
- end
21
-
16
+ after :all do
17
+ @ldap_server.stop if @ldap_server
18
+ end
22
19
 
23
20
  def realm
24
21
  'test'
@@ -26,12 +23,12 @@ describe Rack::Auth::Ldap do
26
23
 
27
24
  def unprotected_app
28
25
  Rack::Lint.new lambda { |env|
29
- [ 200, {'Content-Type' => 'text/plain'}, ["Hi #{env['REMOTE_USER']}"] ]
26
+ [200, { 'content-type' => 'text/plain' }, ["Hi #{env['REMOTE_USER']}"]]
30
27
  }
31
28
  end
32
29
 
33
30
  def protected_app
34
- app = Rack::Auth::Ldap.new(unprotected_app,{:file => "./spec/config/ldap.yml"})
31
+ app = Rack::Auth::Ldap.new(unprotected_app, { file: './spec/config/ldap.yml' })
35
32
  app.realm = realm
36
33
  app
37
34
  end
@@ -41,7 +38,7 @@ describe Rack::Auth::Ldap do
41
38
  end
42
39
 
43
40
  def request_with_basic_auth(username, password, &block)
44
- request 'HTTP_AUTHORIZATION' => 'Basic ' + ["#{username}:#{password}"].pack("m*"), &block
41
+ request 'HTTP_AUTHORIZATION' => 'Basic ' + ["#{username}:#{password}"].pack('m*'), &block
45
42
  end
46
43
 
47
44
  def request(headers = {})
@@ -52,18 +49,18 @@ describe Rack::Auth::Ldap do
52
49
  expect(response.client_error?).to be true
53
50
  expect(response.status).to eq 401
54
51
  expect(response).to include 'WWW-Authenticate'
55
- expect(response.headers['WWW-Authenticate']).to match /Basic realm="#{Regexp.escape(realm)}"/
52
+ expect(response.headers['WWW-Authenticate']).to match(/Basic realm="#{Regexp.escape(realm)}"/)
56
53
  expect(response.body).to be_empty
57
54
  end
58
55
 
59
56
  it 'should render ldap.yaml with erb and use env vars' do
60
- allow(ENV).to receive(:[]).with('RACK_ENV')
61
- allow(ENV).to receive(:[]).with('HOSTNAME').and_return('localhost.local')
62
- allow(ENV).to receive(:[]).with('PORT').and_return('9090')
57
+ allow(ENV).to receive(:[]).with('RACK_ENV')
58
+ allow(ENV).to receive(:[]).with('HOSTNAME').and_return('localhost.local')
59
+ allow(ENV).to receive(:[]).with('PORT').and_return('9090')
63
60
 
64
- app = Rack::Auth::Ldap.new(unprotected_app,{:file => './spec/config/ldap.yml'})
65
- expect(app.config.hostname).to eq('localhost.local')
66
- expect(app.config.port).to eq(9090)
61
+ app = Rack::Auth::Ldap.new(unprotected_app, { file: './spec/config/ldap.yml' })
62
+ expect(app.config.hostname).to eq('localhost.local')
63
+ expect(app.config.port).to eq(9090)
67
64
  end
68
65
 
69
66
  it 'should challenge correctly when no credentials are specified' do
metadata CHANGED
@@ -1,85 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-auth-ldap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-30 00:00:00.000000000 Z
11
+ date: 2024-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
14
+ name: bundle-audit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.9.0
19
+ version: 0.1.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.9.0
26
+ version: 0.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: yard
28
+ name: code_statistics
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.24
33
+ version: 0.2.13
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.9.24
40
+ version: 0.2.13
41
41
  - !ruby/object:Gem::Dependency
42
- name: rdoc
42
+ name: ladle
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 6.2.1
47
+ version: 1.0.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 6.2.1
54
+ version: 1.0.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: roodi
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 5.0.0
61
+ version: 13.2.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 5.0.0
68
+ version: 13.2.1
69
69
  - !ruby/object:Gem::Dependency
70
- name: code_statistics
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.13
75
+ version: 3.13.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.13
82
+ version: 3.13.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.63.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.63.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.36
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.36
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: yard-rspec
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -95,72 +123,77 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0.1'
97
125
  - !ruby/object:Gem::Dependency
98
- name: ladle
126
+ name: version
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: 1.0.1
131
+ version: 1.1.1
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: 1.0.1
138
+ version: 1.1.1
111
139
  - !ruby/object:Gem::Dependency
112
- name: rake
140
+ name: debride
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: 13.0.1
145
+ version: '1.12'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: 13.0.1
152
+ version: '1.12'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: net-ldap
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: 0.16.2
159
+ version: '0.19'
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: 0.16.2
166
+ version: '0.19'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: rack
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - "~>"
144
172
  - !ruby/object:Gem::Version
145
- version: 2.2.2
173
+ version: 3.0.10
146
174
  type: :runtime
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
178
  - - "~>"
151
179
  - !ruby/object:Gem::Version
152
- version: 2.2.2
180
+ version: 3.0.10
153
181
  description: 'rack-auth-ldap : provide LDAP authentication for Rack middelware'
154
182
  email: romain@ultragreen.net
155
183
  executables: []
156
184
  extensions: []
157
185
  extra_rdoc_files: []
158
186
  files:
187
+ - ".debride-whitelist"
188
+ - ".github/workflows/main.yml"
159
189
  - ".gitignore"
160
- - COPYRIGHT
190
+ - ".rubocop.yml"
161
191
  - Gemfile
192
+ - LICENSE.txt
162
193
  - README.rdoc
163
194
  - Rakefile
195
+ - VERSION
196
+ - bom.xml
164
197
  - examples/Gemfile
165
198
  - examples/config.ru
166
199
  - examples/ldap.yml
@@ -174,7 +207,8 @@ files:
174
207
  homepage: http://www.github.com/lecid/rack-auth-ldap
175
208
  licenses:
176
209
  - BSD-2-Clause
177
- metadata: {}
210
+ metadata:
211
+ rubygems_mfa_required: 'true'
178
212
  post_install_message:
179
213
  rdoc_options: []
180
214
  require_paths:
@@ -190,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
224
  - !ruby/object:Gem::Version
191
225
  version: '0'
192
226
  requirements: []
193
- rubygems_version: 3.1.2
227
+ rubygems_version: 3.4.19
194
228
  signing_key:
195
229
  specification_version: 4
196
230
  summary: Rack middleware providing LDAP authentication
File without changes