devise_w3_authenticatable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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