devise_w3_authenticatable 0.1.0 → 0.2.0

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.
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