oa-ldap 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/omniauth/strategies/ldap.rb +83 -29
  2. metadata +65 -55
@@ -1,6 +1,8 @@
1
- require 'net/ldap'
1
+ #require 'net/ldap'
2
+ require 'ldap'
2
3
  require 'omniauth/core'
3
4
 
5
+
4
6
  module OmniAuth
5
7
  module Strategies
6
8
  class LDAP
@@ -9,58 +11,110 @@ module OmniAuth
9
11
  def initialize(app, name, host, port, base, options = {})
10
12
  @options = options
11
13
  @base = base
12
- @identifier_key = options[:identifier_key] || "uid"
14
+ @uid_key = options[:identifier_key] || "uid"
15
+
16
+ @auth = nil
17
+ @host = host
18
+ @port = port
13
19
 
14
- @ldap = Net::LDAP.new(:host => host, :port => port)
15
20
  if options[:username] && options[:password]
16
- @ldap.auth options[:username], options[:password]
21
+ @auth = {:method => :simple,
22
+ :username => options[:username],
23
+ :password => options[:password]}
17
24
  end
18
25
 
19
26
  super(app, name)
20
27
  end
21
28
 
29
+ def connect
30
+ end
22
31
 
23
- def request_phase
24
- return fail!(:missing_information) unless (request[:identifier] && request[:password])
25
-
26
32
 
27
- result = @ldap.bind_as(:base => @base,
28
- :filter => "(#{@identifier_key}=#{request[:identifier]})",
29
- :password => request[:password])
30
-
33
+ def bind(username, password)
34
+ filter = "(#{@uid_key}=#{username})"
31
35
 
36
+ ldap = Net::LDAP.new(:host => @host, :port => @port, :auth => @auth)
37
+ result = ldap.bind_as(:base => @base,
38
+ :filter => filter,
39
+ :password => password)
32
40
  if result
33
- env['REQUEST_METHOD'] = 'GET'
34
- env['PATH_INFO'] = request.path + '/callback'
35
- request['auth'] = auth_hash(result.first)
36
- @app.call(env)
41
+ result.first.inspect
37
42
  else
38
- fail!(:invalid_credentials)
43
+ false
44
+ end
45
+ end
46
+
47
+ def bind_jruby(username, password)
48
+
49
+ begin
50
+ conn = ::LDAP::Conn.new(host=@host, port=@port)
51
+ dn = "#{@uid_key}=#{username},#{@base}"
52
+
53
+ result = false
54
+
55
+ conn.bind(dn=dn, password=password, method=::LDAP::LDAP_AUTH_SIMPLE) do
56
+ conn.search(dn, ::LDAP::LDAP_SCOPE_BASE, "(&(objectclass=person))",
57
+ ["name","email","displayName"]) do |entry|
58
+
59
+ result = entry
60
+ end
61
+ end
62
+
63
+ result = result.inspect
64
+
65
+ @user_info = entry_map result
66
+ @user_info[@uid_key] = username
67
+ @ldap_user_info = result
68
+ return result
69
+
70
+ rescue
71
+ false
39
72
  end
73
+ end
74
+
75
+ def request_phase
76
+ return fail!(:missing_information) unless (request[:username] && request[:password])
77
+
78
+ result = bind_jruby(request[:username], request[:password])
79
+
80
+ if result
81
+ @env['REQUEST_METHOD'] = 'GET'
82
+ @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"
83
+ @env['omniauth.auth'] = auth_hash
40
84
 
85
+ callback_phase
86
+ else
87
+ fail!(:invalid_credentials)
88
+ end
41
89
  end
42
90
 
43
91
 
44
- def auth_hash(entry)
92
+ def auth_hash
45
93
  OmniAuth::Utils.deep_merge(super(), {
46
- 'uid' => (entry.send @identifier_key)[0],
47
- 'strategy' => self.class.to_s,
48
- 'user_info' => {
49
- 'name' => entry_attr(entry, :name),
50
- 'displayName' => entry_attr(entry, :displayName),
51
- 'uid' => entry_attr(entry, :uid),
52
- 'email' => entry_attr(entry, :mail) || entry_attr(entry, :email)
53
- }
94
+ 'uid' => @user_info["uid"],
95
+ 'strategy' => self.class.to_s,
96
+ 'user_info' => @user_info,
97
+ 'extra' => @ldap_user_info
54
98
  })
55
99
  end
56
100
 
57
101
 
58
- def callback_phase
59
- @app.call(env)
60
- end
102
+ def entry_map(entry)
103
+ {
104
+ 'name' => entry_attr(entry, :name) || entry_attr(entry, :displayName),
105
+ 'displayName' => entry_attr(entry, :displayName),
106
+ 'uid' => entry_attr(entry, :uid),
107
+ 'email' => entry_attr(entry, :mail) || entry_attr(entry, :email)
108
+ }
109
+ end
61
110
 
62
111
  def entry_attr(entry, key)
63
- (entry.attribute_names.member?(key) && entry.send(key) && (entry.send key)[0]) || nil
112
+ key = key.to_s
113
+ if entry[key]
114
+ entry[key].first
115
+ else
116
+ nil
117
+ end
64
118
  end
65
119
 
66
120
  end
metadata CHANGED
@@ -3,50 +3,62 @@ name: oa-ldap
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
- - Pedro Teixeira
12
+ - Pedro Teixeira
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-07 00:00:00 -03:00
17
+ date: 2010-10-18 00:00:00 -02:00
18
18
  default_executable:
19
19
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: oa-core
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 0
31
- - 3
32
- version: 0.0.3
33
- type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: net-ldap
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- - 1
46
- - 1
47
- version: 0.1.1
48
- type: :runtime
49
- version_requirements: *id002
20
+ - !ruby/object:Gem::Dependency
21
+ name: oa-core
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 0
30
+ - 3
31
+ version: 0.0.3
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: net-ldap
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 1
44
+ - 1
45
+ version: 0.1.1
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: jruby-ldap
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 0
58
+ - 1
59
+ version: 0.0.1
60
+ type: :runtime
61
+ version_requirements: *id003
50
62
  description: LDAP strategies for OmniAuth.
51
63
  email: pedro.t@gmail.com
52
64
  executables: []
@@ -56,11 +68,11 @@ extensions: []
56
68
  extra_rdoc_files: []
57
69
 
58
70
  files:
59
- - lib/omniauth/strategies/ldap.rb
60
- - lib/omniauth/ldap.rb
61
- - README.rdoc
62
- - LICENSE.rdoc
63
- - CHANGELOG.rdoc
71
+ - lib/omniauth/ldap.rb
72
+ - lib/omniauth/strategies/ldap.rb
73
+ - README.rdoc
74
+ - LICENSE.rdoc
75
+ - CHANGELOG.rdoc
64
76
  has_rdoc: true
65
77
  homepage: http://github.com/pedroteixeira/oa-ldap
66
78
  licenses: []
@@ -69,27 +81,25 @@ post_install_message:
69
81
  rdoc_options: []
70
82
 
71
83
  require_paths:
72
- - lib
84
+ - lib
73
85
  required_ruby_version: !ruby/object:Gem::Requirement
74
- none: false
75
86
  requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- segments:
79
- - 0
80
- version: "0"
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
91
+ version: "0"
81
92
  required_rubygems_version: !ruby/object:Gem::Requirement
82
- none: false
83
93
  requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- segments:
87
- - 0
88
- version: "0"
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
98
+ version: "0"
89
99
  requirements: []
90
100
 
91
101
  rubyforge_project:
92
- rubygems_version: 1.3.7
102
+ rubygems_version: 1.3.6
93
103
  signing_key:
94
104
  specification_version: 3
95
105
  summary: LDAP strategies for OmniAuth.