devise_w3_authenticatable 0.1.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 +16 -0
- data/Rakefile +32 -0
- data/VERSION +1 -0
- data/devise_w3_authenticatable.gemspec +59 -0
- data/lib/devise_w3_authenticatable/model.rb +26 -0
- data/lib/devise_w3_authenticatable/routes.rb +10 -0
- data/lib/devise_w3_authenticatable/schema.rb +8 -0
- data/lib/devise_w3_authenticatable/strategy.rb +20 -0
- data/lib/devise_w3_authenticatable/w3_adapter.rb +27 -0
- data/lib/devise_w3_authenticatable.rb +13 -0
- data/rails/init.rb +2 -0
- data/test/devise_w3_authenticatable_test.rb +8 -0
- data/test/test_helper.rb +3 -0
- metadata +116 -0
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the devise_w3 plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
16
|
+
begin
|
17
|
+
require 'jeweler'
|
18
|
+
Jeweler::Tasks.new do |gemspec|
|
19
|
+
gemspec.name = "devise_w3_authenticatable"
|
20
|
+
gemspec.summary = "Devise IBM w3 authentication strategy"
|
21
|
+
gemspec.description = "Devise strategy to authenticate against IBM w3 LDAP directory."
|
22
|
+
gemspec.email = "reu@rnavarro.com.br"
|
23
|
+
gemspec.homepage = "http://github.com/reu/devise_w3_authenticatable"
|
24
|
+
gemspec.authors = ["Rodrigo Navarro"]
|
25
|
+
gemspec.add_dependency "devise", ">= 1.1.rc1"
|
26
|
+
gemspec.add_dependency "hpricot", ">= 0.8.0"
|
27
|
+
gemspec.add_dependency "net-ldap", ">= 0.1.1"
|
28
|
+
end
|
29
|
+
Jeweler::GemcutterTasks.new
|
30
|
+
rescue LoadError
|
31
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
32
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{devise_w3_authenticatable}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Rodrigo Navarro"]
|
12
|
+
s.date = %q{2010-06-11}
|
13
|
+
s.description = %q{Devise strategy to authenticate against IBM w3 LDAP directory.}
|
14
|
+
s.email = %q{reu@rnavarro.com.br}
|
15
|
+
s.files = [
|
16
|
+
".gitignore",
|
17
|
+
"Rakefile",
|
18
|
+
"VERSION",
|
19
|
+
"devise_w3_authenticatable.gemspec",
|
20
|
+
"lib/devise_w3_authenticatable.rb",
|
21
|
+
"lib/devise_w3_authenticatable/model.rb",
|
22
|
+
"lib/devise_w3_authenticatable/routes.rb",
|
23
|
+
"lib/devise_w3_authenticatable/schema.rb",
|
24
|
+
"lib/devise_w3_authenticatable/strategy.rb",
|
25
|
+
"lib/devise_w3_authenticatable/w3_adapter.rb",
|
26
|
+
"rails/init.rb",
|
27
|
+
"test/devise_w3_authenticatable_test.rb",
|
28
|
+
"test/test_helper.rb"
|
29
|
+
]
|
30
|
+
s.homepage = %q{http://github.com/reu/devise_w3_authenticatable}
|
31
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
32
|
+
s.require_paths = ["lib"]
|
33
|
+
s.rubygems_version = %q{1.3.6}
|
34
|
+
s.summary = %q{Devise IBM w3 authentication strategy}
|
35
|
+
s.test_files = [
|
36
|
+
"test/devise_w3_authenticatable_test.rb",
|
37
|
+
"test/test_helper.rb"
|
38
|
+
]
|
39
|
+
|
40
|
+
if s.respond_to? :specification_version then
|
41
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
42
|
+
s.specification_version = 3
|
43
|
+
|
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"])
|
47
|
+
s.add_runtime_dependency(%q<net-ldap>, [">= 0.1.1"])
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<devise>, [">= 1.1.rc1"])
|
50
|
+
s.add_dependency(%q<hpricot>, [">= 0.8.0"])
|
51
|
+
s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
|
52
|
+
end
|
53
|
+
else
|
54
|
+
s.add_dependency(%q<devise>, [">= 1.1.rc1"])
|
55
|
+
s.add_dependency(%q<hpricot>, [">= 0.8.0"])
|
56
|
+
s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'devise_w3_authenticatable/strategy'
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
module Models
|
5
|
+
module W3Authenticatable
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
attr_accessor :password
|
10
|
+
end
|
11
|
+
|
12
|
+
def valid_w3_password?(password)
|
13
|
+
Devise::W3Adapter.valid_credentials? logon, password
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_w3_authentication
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
def find_for_w3_authentication(conditions={})
|
21
|
+
find_or_initialize_by_logon(conditions[:email])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
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
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'devise/strategies/authenticatable'
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
module Strategies
|
5
|
+
class W3Authenticatable < Authenticatable
|
6
|
+
def authenticate!
|
7
|
+
resource = mapping.to.find_for_w3_authentication(authentication_hash)
|
8
|
+
|
9
|
+
if validate(resource) { resource.valid_w3_password?(password) }
|
10
|
+
resource.after_w3_authentication
|
11
|
+
success! resource
|
12
|
+
else
|
13
|
+
fail :invalid
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Warden::Strategies.add(:w3_authenticatable, Devise::Strategies::W3Authenticatable)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'net/ldap'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'hpricot'
|
4
|
+
|
5
|
+
module Devise
|
6
|
+
module W3Adapter
|
7
|
+
def self.valid_credentials?(logon, password)
|
8
|
+
return unless dn = get_dn_from_bluepages(logon)
|
9
|
+
|
10
|
+
user = Net::LDAP.new :host => "bluepages.ibm.com"
|
11
|
+
user.authenticate(dn, password)
|
12
|
+
user.bind
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
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
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'devise'
|
3
|
+
|
4
|
+
require 'devise_w3_authenticatable/schema'
|
5
|
+
require 'devise_w3_authenticatable/w3_adapter'
|
6
|
+
require 'devise_w3_authenticatable/routes'
|
7
|
+
|
8
|
+
# Add w3_authenticatable strategy to defaults.
|
9
|
+
Devise.add_module(:w3_authenticatable,
|
10
|
+
:strategy => true,
|
11
|
+
:controller => :sessions,
|
12
|
+
:route => :w3_authenticatable,
|
13
|
+
:model => 'devise_w3_authenticatable/model')
|
data/rails/init.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: devise_w3_authenticatable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Rodrigo Navarro
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-06-11 00:00:00 -03:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: devise
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 1
|
30
|
+
- rc1
|
31
|
+
version: 1.1.rc1
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: hpricot
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 8
|
44
|
+
- 0
|
45
|
+
version: 0.8.0
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: net-ldap
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
- 1
|
58
|
+
- 1
|
59
|
+
version: 0.1.1
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
description: Devise strategy to authenticate against IBM w3 LDAP directory.
|
63
|
+
email: reu@rnavarro.com.br
|
64
|
+
executables: []
|
65
|
+
|
66
|
+
extensions: []
|
67
|
+
|
68
|
+
extra_rdoc_files: []
|
69
|
+
|
70
|
+
files:
|
71
|
+
- .gitignore
|
72
|
+
- Rakefile
|
73
|
+
- VERSION
|
74
|
+
- devise_w3_authenticatable.gemspec
|
75
|
+
- lib/devise_w3_authenticatable.rb
|
76
|
+
- lib/devise_w3_authenticatable/model.rb
|
77
|
+
- lib/devise_w3_authenticatable/routes.rb
|
78
|
+
- lib/devise_w3_authenticatable/schema.rb
|
79
|
+
- lib/devise_w3_authenticatable/strategy.rb
|
80
|
+
- lib/devise_w3_authenticatable/w3_adapter.rb
|
81
|
+
- rails/init.rb
|
82
|
+
- test/devise_w3_authenticatable_test.rb
|
83
|
+
- test/test_helper.rb
|
84
|
+
has_rdoc: true
|
85
|
+
homepage: http://github.com/reu/devise_w3_authenticatable
|
86
|
+
licenses: []
|
87
|
+
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options:
|
90
|
+
- --charset=UTF-8
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
version: "0"
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
version: "0"
|
107
|
+
requirements: []
|
108
|
+
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 1.3.6
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Devise IBM w3 authentication strategy
|
114
|
+
test_files:
|
115
|
+
- test/devise_w3_authenticatable_test.rb
|
116
|
+
- test/test_helper.rb
|