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 ADDED
@@ -0,0 +1,16 @@
1
+ *~
2
+ *.cache
3
+ *.sql
4
+ .DS_Store
5
+ config/database.yml
6
+ tmp/*
7
+ log/*
8
+ doc/*
9
+ .*
10
+ !.gitignore
11
+ !.gitmodules
12
+ vendor/rails
13
+ nbproject/*
14
+ public/stylesheets/*.css
15
+ public/system/*
16
+ db/*.sqlite3
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,8 @@
1
+ Devise::Schema.class_eval do
2
+ def w3_authenticatable(options={})
3
+ null = options[:null] || false
4
+ default = options[:default] || ""
5
+
6
+ apply_schema :logon, String, :null => null, :default => default
7
+ end
8
+ 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
@@ -0,0 +1,2 @@
1
+ # Include hook code here
2
+ require 'devise_w3_authenticatable'
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class DeviseW3AuthenticatableTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
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