devise_w3_authenticatable 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ nbproject/*
14
14
  public/stylesheets/*.css
15
15
  public/system/*
16
16
  db/*.sqlite3
17
+ pkg/*
data/Rakefile CHANGED
@@ -22,8 +22,8 @@ begin
22
22
  gemspec.email = "reu@rnavarro.com.br"
23
23
  gemspec.homepage = "http://github.com/reu/devise_w3_authenticatable"
24
24
  gemspec.authors = ["Rodrigo Navarro"]
25
- gemspec.add_dependency "devise", ">= 1.1.rc1"
26
- gemspec.add_dependency "hpricot", ">= 0.8.0"
25
+ gemspec.add_dependency "devise", "~> 1.1"
26
+ gemspec.add_dependency "nokogiri", "~> 1.4.3.1"
27
27
  gemspec.add_dependency "net-ldap", ">= 0.1.1"
28
28
  end
29
29
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{devise_w3_authenticatable}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rodrigo Navarro"]
12
- s.date = %q{2010-06-11}
12
+ s.date = %q{2010-08-24}
13
13
  s.description = %q{Devise strategy to authenticate against IBM w3 LDAP directory.}
14
14
  s.email = %q{reu@rnavarro.com.br}
15
15
  s.files = [
@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
19
19
  "devise_w3_authenticatable.gemspec",
20
20
  "lib/devise_w3_authenticatable.rb",
21
21
  "lib/devise_w3_authenticatable/model.rb",
22
- "lib/devise_w3_authenticatable/routes.rb",
23
22
  "lib/devise_w3_authenticatable/schema.rb",
24
23
  "lib/devise_w3_authenticatable/strategy.rb",
25
24
  "lib/devise_w3_authenticatable/w3_adapter.rb",
@@ -30,7 +29,7 @@ Gem::Specification.new do |s|
30
29
  s.homepage = %q{http://github.com/reu/devise_w3_authenticatable}
31
30
  s.rdoc_options = ["--charset=UTF-8"]
32
31
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.3.6}
32
+ s.rubygems_version = %q{1.3.7}
34
33
  s.summary = %q{Devise IBM w3 authentication strategy}
35
34
  s.test_files = [
36
35
  "test/devise_w3_authenticatable_test.rb",
@@ -41,18 +40,18 @@ Gem::Specification.new do |s|
41
40
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
42
41
  s.specification_version = 3
43
42
 
44
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<devise>, [">= 1.1.rc1"])
46
- s.add_runtime_dependency(%q<hpricot>, [">= 0.8.0"])
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<devise>, ["~> 1.1"])
45
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
47
46
  s.add_runtime_dependency(%q<net-ldap>, [">= 0.1.1"])
48
47
  else
49
- s.add_dependency(%q<devise>, [">= 1.1.rc1"])
50
- s.add_dependency(%q<hpricot>, [">= 0.8.0"])
48
+ s.add_dependency(%q<devise>, ["~> 1.1"])
49
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
51
50
  s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
52
51
  end
53
52
  else
54
- s.add_dependency(%q<devise>, [">= 1.1.rc1"])
55
- s.add_dependency(%q<hpricot>, [">= 0.8.0"])
53
+ s.add_dependency(%q<devise>, ["~> 1.1"])
54
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
56
55
  s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
57
56
  end
58
57
  end
@@ -3,11 +3,10 @@ require 'devise'
3
3
 
4
4
  require 'devise_w3_authenticatable/schema'
5
5
  require 'devise_w3_authenticatable/w3_adapter'
6
- require 'devise_w3_authenticatable/routes'
7
6
 
8
7
  # Add w3_authenticatable strategy to defaults.
9
8
  Devise.add_module(:w3_authenticatable,
10
9
  :strategy => true,
11
10
  :controller => :sessions,
12
- :route => :w3_authenticatable,
11
+ :route => :session,
13
12
  :model => 'devise_w3_authenticatable/model')
@@ -9,16 +9,16 @@ module Devise
9
9
  attr_accessor :password
10
10
  end
11
11
 
12
- def valid_w3_password?(password)
13
- Devise::W3Adapter.valid_credentials? logon, password
12
+ def authenticate_with_w3!(password)
13
+ Devise::W3Adapter.valid_credentials? email, password
14
14
  end
15
15
 
16
- def after_w3_authentication
16
+ def after_w3_authentication(employee = nil)
17
17
  end
18
18
 
19
19
  module ClassMethods
20
20
  def find_for_w3_authentication(conditions={})
21
- find_or_initialize_by_logon(conditions[:email])
21
+ find_or_initialize_by_email(conditions[:email])
22
22
  end
23
23
  end
24
24
  end
@@ -1,8 +1,7 @@
1
1
  Devise::Schema.class_eval do
2
2
  def w3_authenticatable(options={})
3
3
  null = options[:null] || false
4
- default = options[:default] || ""
5
4
 
6
- apply_schema :logon, String, :null => null, :default => default
5
+ apply_devise_schema :email, String, :null => null
7
6
  end
8
7
  end
@@ -6,8 +6,10 @@ module Devise
6
6
  def authenticate!
7
7
  resource = mapping.to.find_for_w3_authentication(authentication_hash)
8
8
 
9
- if validate(resource) { resource.valid_w3_password?(password) }
10
- resource.after_w3_authentication
9
+ employee = nil
10
+
11
+ if validate(resource) { employee = resource.authenticate_with_w3!(password) }
12
+ resource.after_w3_authentication employee
11
13
  success! resource
12
14
  else
13
15
  fail :invalid
@@ -1,26 +1,39 @@
1
1
  require 'net/ldap'
2
2
  require 'open-uri'
3
- require 'hpricot'
3
+ require 'nokogiri'
4
4
 
5
5
  module Devise
6
6
  module W3Adapter
7
7
  def self.valid_credentials?(logon, password)
8
- return unless dn = get_dn_from_bluepages(logon)
8
+ return unless employee = get_information_from_bluepages(logon)
9
9
 
10
10
  user = Net::LDAP.new :host => "bluepages.ibm.com"
11
- user.authenticate(dn, password)
12
- user.bind
11
+ user.authenticate(employee.uid, password)
12
+
13
+ user.bind and employee
14
+ end
15
+
16
+ def self.get_information_from_bluepages(logon)
17
+ IBMEmployee.parse_from_bluepages("http://bluepages.ibm.com/BpHttpApisv3/slaphapi?ibmperson/mail=#{logon}.list/byxml")
13
18
  end
14
19
 
15
- protected
20
+ class IBMEmployee < Struct.new(:uid, :logon, :name, :serial, :department, :country, :workplace)
21
+ def self.parse_from_bluepages(bluepages_url)
22
+ begin
23
+ entry = Nokogiri::XML(open(bluepages_url)).css("entry").first
24
+
25
+ uid = entry.attributes["dn"].to_s
26
+ logon = entry.css("attr[name='mail'] value").children.first.to_s
27
+ name = entry.css("attr[name='cn'] value").children.first.to_s
28
+ serial = entry.css("attr[name='serialnumber'] value").children.first.to_s
29
+ department = entry.css("attr[name='dept'] value").children.first.to_s
30
+ country = entry.css("attr[name='co'] value").children.first.to_s
31
+ workplace = entry.css("attr[name='physicaldeliveryofficename'] value").children.first.to_s
16
32
 
17
- def self.get_dn_from_bluepages(logon)
18
- begin
19
- bluepages_url = "http://bluepages.ibm.com/BpHttpApisv3/slaphapi?ibmperson/mail=#{logon}.list/byxml?cn"
20
- ibmer = Hpricot.XML open(bluepages_url)
21
- (ibmer/:"entry").first.attributes["dn"]
22
- rescue
23
- nil
33
+ new(uid, logon, name, serial, department, country, workplace)
34
+ rescue
35
+ nil
36
+ end
24
37
  end
25
38
  end
26
39
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Rodrigo Navarro
@@ -14,41 +14,44 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-11 00:00:00 -03:00
17
+ date: 2010-08-24 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: devise
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
- - - ">="
26
+ - - ~>
26
27
  - !ruby/object:Gem::Version
27
28
  segments:
28
29
  - 1
29
30
  - 1
30
- - rc1
31
- version: 1.1.rc1
31
+ version: "1.1"
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
34
  - !ruby/object:Gem::Dependency
35
- name: hpricot
35
+ name: nokogiri
36
36
  prerelease: false
37
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
38
39
  requirements:
39
- - - ">="
40
+ - - ~>
40
41
  - !ruby/object:Gem::Version
41
42
  segments:
42
- - 0
43
- - 8
44
- - 0
45
- version: 0.8.0
43
+ - 1
44
+ - 4
45
+ - 3
46
+ - 1
47
+ version: 1.4.3.1
46
48
  type: :runtime
47
49
  version_requirements: *id002
48
50
  - !ruby/object:Gem::Dependency
49
51
  name: net-ldap
50
52
  prerelease: false
51
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
52
55
  requirements:
53
56
  - - ">="
54
57
  - !ruby/object:Gem::Version
@@ -74,7 +77,6 @@ files:
74
77
  - devise_w3_authenticatable.gemspec
75
78
  - lib/devise_w3_authenticatable.rb
76
79
  - lib/devise_w3_authenticatable/model.rb
77
- - lib/devise_w3_authenticatable/routes.rb
78
80
  - lib/devise_w3_authenticatable/schema.rb
79
81
  - lib/devise_w3_authenticatable/strategy.rb
80
82
  - lib/devise_w3_authenticatable/w3_adapter.rb
@@ -91,6 +93,7 @@ rdoc_options:
91
93
  require_paths:
92
94
  - lib
93
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
94
97
  requirements:
95
98
  - - ">="
96
99
  - !ruby/object:Gem::Version
@@ -98,6 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
101
  - 0
99
102
  version: "0"
100
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
+ none: false
101
105
  requirements:
102
106
  - - ">="
103
107
  - !ruby/object:Gem::Version
@@ -107,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
111
  requirements: []
108
112
 
109
113
  rubyforge_project:
110
- rubygems_version: 1.3.6
114
+ rubygems_version: 1.3.7
111
115
  signing_key:
112
116
  specification_version: 3
113
117
  summary: Devise IBM w3 authentication strategy
@@ -1,10 +0,0 @@
1
- ActionDispatch::Routing::Mapper.class_eval do
2
- protected
3
- def devise_w3_authenticatable(mapping, controllers)
4
- scope mapping.full_path do
5
- get mapping.path_names[:sign_in], :to => "#{controllers[:sessions]}#new", :as => :"new_#{mapping.name}_session"
6
- post mapping.path_names[:sign_in], :to => "#{controllers[:sessions]}#create", :as => :"#{mapping.name}_session"
7
- get mapping.path_names[:sign_out], :to => "#{controllers[:sessions]}#destroy", :as => :"destroy_#{mapping.name}_session"
8
- end
9
- end
10
- end