devise_cas_authenticatable 1.0.0.alpha5 → 1.0.0.alpha6
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/Gemfile +20 -10
- data/Gemfile.lock +95 -43
- data/VERSION +1 -1
- data/devise_cas_authenticatable.gemspec +82 -62
- data/lib/devise_cas_authenticatable/exceptions.rb +2 -0
- data/lib/devise_cas_authenticatable/model.rb +13 -15
- data/lib/devise_cas_authenticatable/routes.rb +4 -4
- data/lib/devise_cas_authenticatable/schema.rb +2 -0
- data/lib/devise_cas_authenticatable/strategy.rb +6 -0
- data/lib/devise_cas_authenticatable.rb +15 -6
- data/spec/routes_spec.rb +2 -1
- data/spec/scenario/app/controllers/application_controller.rb +0 -1
- data/spec/scenario/app/controllers/home_controller.rb +2 -0
- data/spec/scenario/config/application.rb +18 -0
- data/spec/scenario/config/routes.rb +4 -0
- data/spec/scenario/config/rubycas-server.yml +13 -0
- data/spec/scenario/public/.gitkeep +0 -0
- data/spec/spec_helper.rb +1 -5
- data/spec/strategy_spec.rb +43 -0
- metadata +99 -12
- data/.gitignore +0 -5
data/Gemfile
CHANGED
|
@@ -2,13 +2,23 @@ source "http://rubygems.org"
|
|
|
2
2
|
|
|
3
3
|
gemspec
|
|
4
4
|
|
|
5
|
-
gem '
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
gem "
|
|
9
|
-
gem "
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
gem "
|
|
14
|
-
gem "
|
|
5
|
+
gem 'devise'
|
|
6
|
+
|
|
7
|
+
group :development do
|
|
8
|
+
gem "ruby-debug"
|
|
9
|
+
gem "jeweler"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
group :test do
|
|
13
|
+
gem "rails", ">= 3.0.0"
|
|
14
|
+
gem "rspec", ">= 2.0.0.beta.17"
|
|
15
|
+
gem "rspec-rails", ">= 2.0.0.beta.17"
|
|
16
|
+
gem "mocha"
|
|
17
|
+
gem "shoulda"
|
|
18
|
+
gem "sqlite3-ruby"
|
|
19
|
+
gem "sham_rack"
|
|
20
|
+
gem "capybara"
|
|
21
|
+
gem 'rubycas-server', :git => 'https://github.com/gunark/rubycas-server.git', :branch => 'sinatra'
|
|
22
|
+
gem 'crypt-isaac'
|
|
23
|
+
gem 'launchy'
|
|
24
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: https://github.com/gunark/rubycas-server.git
|
|
3
|
+
revision: c6ce0068bcaffe847f7b12804401c493b1179f47
|
|
4
|
+
branch: sinatra
|
|
5
|
+
specs:
|
|
6
|
+
rubycas-server (0.9.999999)
|
|
7
|
+
activerecord (~> 3.0.0)
|
|
8
|
+
activesupport (~> 3.0.0)
|
|
9
|
+
gettext (~> 2.1.0)
|
|
10
|
+
sinatra (~> 1.0)
|
|
11
|
+
|
|
1
12
|
PATH
|
|
2
13
|
remote: .
|
|
3
14
|
specs:
|
|
4
|
-
devise_cas_authenticatable (1.0.0.
|
|
15
|
+
devise_cas_authenticatable (1.0.0.alpha6)
|
|
5
16
|
devise (>= 1.0.6)
|
|
17
|
+
devise
|
|
18
|
+
devise_cas_authenticatable
|
|
6
19
|
rubycas-client (>= 2.2.1)
|
|
7
20
|
|
|
8
21
|
GEM
|
|
@@ -39,35 +52,60 @@ GEM
|
|
|
39
52
|
activesupport (~> 3.0.0)
|
|
40
53
|
bcrypt-ruby (2.1.4)
|
|
41
54
|
builder (2.1.2)
|
|
55
|
+
capybara (0.4.1.1)
|
|
56
|
+
celerity (>= 0.7.9)
|
|
57
|
+
culerity (>= 0.2.4)
|
|
58
|
+
mime-types (>= 1.16)
|
|
59
|
+
nokogiri (>= 1.3.3)
|
|
60
|
+
rack (>= 1.0.0)
|
|
61
|
+
rack-test (>= 0.5.4)
|
|
62
|
+
selenium-webdriver (>= 0.0.27)
|
|
63
|
+
xpath (~> 0.1.3)
|
|
64
|
+
celerity (0.8.7)
|
|
65
|
+
childprocess (0.1.6)
|
|
66
|
+
ffi (~> 0.6.3)
|
|
42
67
|
columnize (0.3.1)
|
|
43
|
-
|
|
68
|
+
configuration (1.2.0)
|
|
69
|
+
crypt-isaac (0.9.1)
|
|
70
|
+
culerity (0.2.15)
|
|
71
|
+
devise (1.2.1)
|
|
44
72
|
bcrypt-ruby (~> 2.1.2)
|
|
45
|
-
|
|
73
|
+
orm_adapter (~> 0.0.3)
|
|
74
|
+
warden (~> 1.0.3)
|
|
46
75
|
diff-lcs (1.1.2)
|
|
47
76
|
erubis (2.6.6)
|
|
48
77
|
abstract (>= 1.0.0)
|
|
49
|
-
|
|
78
|
+
ffi (0.6.3)
|
|
79
|
+
rake (>= 0.8.7)
|
|
80
|
+
gettext (2.1.0)
|
|
81
|
+
locale (>= 2.0.5)
|
|
50
82
|
git (1.2.5)
|
|
51
|
-
i18n (0.4.
|
|
52
|
-
jeweler (1.
|
|
53
|
-
|
|
83
|
+
i18n (0.4.2)
|
|
84
|
+
jeweler (1.5.2)
|
|
85
|
+
bundler (~> 1.0.0)
|
|
54
86
|
git (>= 1.2.5)
|
|
55
|
-
|
|
56
|
-
json_pure (1.
|
|
87
|
+
rake
|
|
88
|
+
json_pure (1.5.0)
|
|
89
|
+
launchy (0.3.7)
|
|
90
|
+
configuration (>= 0.0.5)
|
|
91
|
+
rake (>= 0.8.1)
|
|
57
92
|
linecache (0.43)
|
|
58
|
-
|
|
93
|
+
locale (2.0.5)
|
|
94
|
+
mail (2.2.14)
|
|
59
95
|
activesupport (>= 2.3.6)
|
|
60
|
-
|
|
61
|
-
|
|
96
|
+
i18n (>= 0.4.0)
|
|
97
|
+
mime-types (~> 1.16)
|
|
98
|
+
treetop (~> 1.4.8)
|
|
62
99
|
mime-types (1.16)
|
|
63
|
-
mocha (0.9.
|
|
100
|
+
mocha (0.9.10)
|
|
64
101
|
rake
|
|
65
|
-
nokogiri (1.4.
|
|
102
|
+
nokogiri (1.4.4)
|
|
103
|
+
orm_adapter (0.0.4)
|
|
66
104
|
polyglot (0.3.1)
|
|
67
105
|
rack (1.2.1)
|
|
68
106
|
rack-mount (0.6.13)
|
|
69
107
|
rack (>= 1.0.0)
|
|
70
|
-
rack-test (0.5.
|
|
108
|
+
rack-test (0.5.7)
|
|
71
109
|
rack (>= 1.0)
|
|
72
110
|
rails (3.0.0)
|
|
73
111
|
actionmailer (= 3.0.0)
|
|
@@ -83,53 +121,67 @@ GEM
|
|
|
83
121
|
rake (>= 0.8.4)
|
|
84
122
|
thor (~> 0.14.0)
|
|
85
123
|
rake (0.8.7)
|
|
86
|
-
rspec (2.
|
|
87
|
-
rspec-core (
|
|
88
|
-
rspec-expectations (
|
|
89
|
-
rspec-mocks (
|
|
90
|
-
rspec-core (2.
|
|
91
|
-
rspec-expectations (2.
|
|
92
|
-
diff-lcs (
|
|
93
|
-
rspec-mocks (2.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
124
|
+
rspec (2.4.0)
|
|
125
|
+
rspec-core (~> 2.4.0)
|
|
126
|
+
rspec-expectations (~> 2.4.0)
|
|
127
|
+
rspec-mocks (~> 2.4.0)
|
|
128
|
+
rspec-core (2.4.0)
|
|
129
|
+
rspec-expectations (2.4.0)
|
|
130
|
+
diff-lcs (~> 1.1.2)
|
|
131
|
+
rspec-mocks (2.4.0)
|
|
132
|
+
rspec-rails (2.4.1)
|
|
133
|
+
actionpack (~> 3.0)
|
|
134
|
+
activesupport (~> 3.0)
|
|
135
|
+
railties (~> 3.0)
|
|
136
|
+
rspec (~> 2.4.0)
|
|
137
|
+
ruby-debug (0.10.4)
|
|
99
138
|
columnize (>= 0.1)
|
|
100
|
-
ruby-debug-base (~> 0.10.
|
|
101
|
-
ruby-debug-base (0.10.
|
|
139
|
+
ruby-debug-base (~> 0.10.4.0)
|
|
140
|
+
ruby-debug-base (0.10.4)
|
|
102
141
|
linecache (>= 0.3)
|
|
103
142
|
rubycas-client (2.2.1)
|
|
104
143
|
activesupport
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
144
|
+
rubyzip (0.9.4)
|
|
145
|
+
selenium-webdriver (0.1.2)
|
|
146
|
+
childprocess (~> 0.1.5)
|
|
147
|
+
ffi (~> 0.6.3)
|
|
148
|
+
json_pure
|
|
149
|
+
rubyzip
|
|
150
|
+
sham_rack (1.3.3)
|
|
151
|
+
rack
|
|
108
152
|
shoulda (2.11.3)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
153
|
+
sinatra (1.1.2)
|
|
154
|
+
rack (~> 1.1)
|
|
155
|
+
tilt (~> 1.2)
|
|
156
|
+
sqlite3 (1.3.3)
|
|
157
|
+
sqlite3-ruby (1.3.3)
|
|
158
|
+
sqlite3 (>= 1.3.3)
|
|
159
|
+
thor (0.14.6)
|
|
160
|
+
tilt (1.2.2)
|
|
161
|
+
treetop (1.4.9)
|
|
112
162
|
polyglot (>= 0.3.1)
|
|
113
|
-
tzinfo (0.3.
|
|
163
|
+
tzinfo (0.3.24)
|
|
114
164
|
warden (1.0.3)
|
|
115
165
|
rack (>= 1.0.0)
|
|
116
|
-
|
|
117
|
-
nokogiri (
|
|
118
|
-
rack (>= 1.0)
|
|
119
|
-
rack-test (>= 0.5.3)
|
|
166
|
+
xpath (0.1.3)
|
|
167
|
+
nokogiri (~> 1.3)
|
|
120
168
|
|
|
121
169
|
PLATFORMS
|
|
122
170
|
ruby
|
|
123
171
|
|
|
124
172
|
DEPENDENCIES
|
|
173
|
+
capybara
|
|
174
|
+
crypt-isaac
|
|
175
|
+
devise
|
|
125
176
|
devise_cas_authenticatable!
|
|
126
177
|
jeweler
|
|
178
|
+
launchy
|
|
127
179
|
mocha
|
|
128
|
-
rails (
|
|
180
|
+
rails (>= 3.0.0)
|
|
129
181
|
rspec (>= 2.0.0.beta.17)
|
|
130
182
|
rspec-rails (>= 2.0.0.beta.17)
|
|
131
183
|
ruby-debug
|
|
184
|
+
rubycas-server!
|
|
132
185
|
sham_rack
|
|
133
186
|
shoulda
|
|
134
187
|
sqlite3-ruby
|
|
135
|
-
webrat
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.0.
|
|
1
|
+
1.0.0.alpha6
|
|
@@ -1,100 +1,120 @@
|
|
|
1
1
|
# Generated by jeweler
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{devise_cas_authenticatable}
|
|
8
|
-
s.version = "1.0.0.
|
|
8
|
+
s.version = "1.0.0.alpha6"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Nat Budin"]
|
|
12
|
-
s.date = %q{2011-
|
|
12
|
+
s.date = %q{2011-04-11}
|
|
13
13
|
s.description = %q{CAS authentication module for Devise}
|
|
14
14
|
s.email = %q{natbudin@gmail.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
16
16
|
"README.md"
|
|
17
17
|
]
|
|
18
18
|
s.files = [
|
|
19
|
-
".
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
19
|
+
".project",
|
|
20
|
+
"Gemfile",
|
|
21
|
+
"Gemfile.lock",
|
|
22
|
+
"README.md",
|
|
23
|
+
"Rakefile",
|
|
24
|
+
"VERSION",
|
|
25
|
+
"app/controllers/devise/cas_sessions_controller.rb",
|
|
26
|
+
"devise_cas_authenticatable.gemspec",
|
|
27
|
+
"lib/devise_cas_authenticatable.rb",
|
|
28
|
+
"lib/devise_cas_authenticatable/exceptions.rb",
|
|
29
|
+
"lib/devise_cas_authenticatable/model.rb",
|
|
30
|
+
"lib/devise_cas_authenticatable/routes.rb",
|
|
31
|
+
"lib/devise_cas_authenticatable/schema.rb",
|
|
32
|
+
"lib/devise_cas_authenticatable/strategy.rb",
|
|
33
|
+
"rails/init.rb",
|
|
34
|
+
"spec/routes_spec.rb",
|
|
35
|
+
"spec/scenario/.gitignore",
|
|
36
|
+
"spec/scenario/app/controllers/application_controller.rb",
|
|
37
|
+
"spec/scenario/app/controllers/home_controller.rb",
|
|
38
|
+
"spec/scenario/app/models/user.rb",
|
|
39
|
+
"spec/scenario/app/views/layouts/application.html.erb",
|
|
40
|
+
"spec/scenario/config.ru",
|
|
41
|
+
"spec/scenario/config/application.rb",
|
|
42
|
+
"spec/scenario/config/boot.rb",
|
|
43
|
+
"spec/scenario/config/database.yml",
|
|
44
|
+
"spec/scenario/config/environment.rb",
|
|
45
|
+
"spec/scenario/config/environments/development.rb",
|
|
46
|
+
"spec/scenario/config/environments/production.rb",
|
|
47
|
+
"spec/scenario/config/environments/test.rb",
|
|
48
|
+
"spec/scenario/config/initializers/backtrace_silencers.rb",
|
|
49
|
+
"spec/scenario/config/initializers/inflections.rb",
|
|
50
|
+
"spec/scenario/config/initializers/mime_types.rb",
|
|
51
|
+
"spec/scenario/config/initializers/secret_token.rb",
|
|
52
|
+
"spec/scenario/config/initializers/session_store.rb",
|
|
53
|
+
"spec/scenario/config/locales/en.yml",
|
|
54
|
+
"spec/scenario/config/routes.rb",
|
|
55
|
+
"spec/scenario/config/rubycas-server.yml",
|
|
56
|
+
"spec/scenario/db/migrate/20100401102949_create_tables.rb",
|
|
57
|
+
"spec/scenario/public/.gitkeep",
|
|
58
|
+
"spec/spec_helper.rb",
|
|
59
|
+
"spec/strategy_spec.rb",
|
|
60
|
+
"spec/support/migrations.rb"
|
|
59
61
|
]
|
|
60
62
|
s.homepage = %q{http://github.com/nbudin/devise_cas_authenticatable}
|
|
61
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
|
62
63
|
s.require_paths = ["lib"]
|
|
63
64
|
s.rubygems_version = %q{1.5.0}
|
|
64
65
|
s.summary = %q{CAS authentication module for Devise}
|
|
65
66
|
s.test_files = [
|
|
66
67
|
"spec/routes_spec.rb",
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
68
|
+
"spec/scenario/app/controllers/application_controller.rb",
|
|
69
|
+
"spec/scenario/app/controllers/home_controller.rb",
|
|
70
|
+
"spec/scenario/app/models/user.rb",
|
|
71
|
+
"spec/scenario/config/application.rb",
|
|
72
|
+
"spec/scenario/config/boot.rb",
|
|
73
|
+
"spec/scenario/config/environment.rb",
|
|
74
|
+
"spec/scenario/config/environments/development.rb",
|
|
75
|
+
"spec/scenario/config/environments/production.rb",
|
|
76
|
+
"spec/scenario/config/environments/test.rb",
|
|
77
|
+
"spec/scenario/config/initializers/backtrace_silencers.rb",
|
|
78
|
+
"spec/scenario/config/initializers/inflections.rb",
|
|
79
|
+
"spec/scenario/config/initializers/mime_types.rb",
|
|
80
|
+
"spec/scenario/config/initializers/secret_token.rb",
|
|
81
|
+
"spec/scenario/config/initializers/session_store.rb",
|
|
82
|
+
"spec/scenario/config/routes.rb",
|
|
83
|
+
"spec/scenario/db/migrate/20100401102949_create_tables.rb",
|
|
84
|
+
"spec/spec_helper.rb",
|
|
85
|
+
"spec/strategy_spec.rb",
|
|
86
|
+
"spec/support/migrations.rb"
|
|
85
87
|
]
|
|
86
88
|
|
|
87
89
|
if s.respond_to? :specification_version then
|
|
88
90
|
s.specification_version = 3
|
|
89
91
|
|
|
90
92
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
93
|
+
s.add_runtime_dependency(%q<devise_cas_authenticatable>, [">= 0"])
|
|
94
|
+
s.add_runtime_dependency(%q<devise>, [">= 0"])
|
|
95
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
|
96
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
97
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
|
98
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
91
99
|
s.add_runtime_dependency(%q<devise>, [">= 1.0.6"])
|
|
92
100
|
s.add_runtime_dependency(%q<rubycas-client>, [">= 2.2.1"])
|
|
93
101
|
else
|
|
102
|
+
s.add_dependency(%q<devise_cas_authenticatable>, [">= 0"])
|
|
103
|
+
s.add_dependency(%q<devise>, [">= 0"])
|
|
104
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
105
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
106
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
107
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
94
108
|
s.add_dependency(%q<devise>, [">= 1.0.6"])
|
|
95
109
|
s.add_dependency(%q<rubycas-client>, [">= 2.2.1"])
|
|
96
110
|
end
|
|
97
111
|
else
|
|
112
|
+
s.add_dependency(%q<devise_cas_authenticatable>, [">= 0"])
|
|
113
|
+
s.add_dependency(%q<devise>, [">= 0"])
|
|
114
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
115
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
116
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
117
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
98
118
|
s.add_dependency(%q<devise>, [">= 1.0.6"])
|
|
99
119
|
s.add_dependency(%q<rubycas-client>, [">= 2.2.1"])
|
|
100
120
|
end
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
module Devise
|
|
2
2
|
module Models
|
|
3
|
+
# Extends your User class with support for CAS ticket authentication.
|
|
3
4
|
module CasAuthenticatable
|
|
4
5
|
def self.included(base)
|
|
5
6
|
base.extend ClassMethods
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
module ClassMethods
|
|
10
|
+
# Authenticate a CAS ticket and return the resulting user object. Behavior is as follows:
|
|
11
|
+
#
|
|
12
|
+
# * Check ticket validity using RubyCAS::Client. Return nil if the ticket is invalid.
|
|
13
|
+
# * Find a matching user by username (will use find_for_authentication if available).
|
|
14
|
+
# * If the user does not exist, but Devise.cas_create_user is set, attempt to create the
|
|
15
|
+
# user object in the database. If cas_extra_attributes= is defined, this will also
|
|
16
|
+
# pass in the ticket's extra_attributes hash.
|
|
17
|
+
# * Return the resulting user object.
|
|
9
18
|
def authenticate_with_cas_ticket(ticket)
|
|
10
19
|
::Devise.cas_client.validate_service_ticket(ticket) unless ticket.has_been_validated?
|
|
11
20
|
|
|
@@ -19,23 +28,12 @@ module Devise
|
|
|
19
28
|
find(:first, :conditions => conditions)
|
|
20
29
|
end
|
|
21
30
|
|
|
22
|
-
resource = new(conditions) if (resource.nil? and ::Devise.cas_create_user)
|
|
31
|
+
resource = new(conditions) if (resource.nil? and ::Devise.cas_create_user?)
|
|
23
32
|
return nil unless resource
|
|
24
33
|
|
|
25
|
-
if resource.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
create(conditions)
|
|
31
|
-
else
|
|
32
|
-
if resource.respond_to? :cas_extra_attributes=
|
|
33
|
-
resource.cas_extra_attributes = ticket.response.extra_attributes
|
|
34
|
-
resource.save
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
resource
|
|
38
|
-
end
|
|
34
|
+
resource.cas_extra_attributes = ticket.response.extra_attributes if resource.respond_to? :cas_extra_attributes=
|
|
35
|
+
resource.save
|
|
36
|
+
resource
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
39
|
end
|
|
@@ -5,10 +5,10 @@ if ActionController::Routing.name =~ /ActionDispatch/
|
|
|
5
5
|
protected
|
|
6
6
|
|
|
7
7
|
def devise_cas_authenticatable(mapping, controllers)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
get "/", :to => "#{controllers[:cas_sessions]}#service"
|
|
8
|
+
# service endpoint for CAS server
|
|
9
|
+
get "/", :to => "#{controllers[:cas_sessions]}#service", :as => ""
|
|
11
10
|
|
|
11
|
+
resource :session, :only => [], :controller => controllers[:cas_sessions], :path => "" do
|
|
12
12
|
get :new, :path => mapping.path_names[:sign_in], :to => "#{controllers[:cas_sessions]}#create", :as => "new"
|
|
13
13
|
post :create, :path => mapping.path_names[:sign_in]
|
|
14
14
|
match :destroy, :path => mapping.path_names[:sign_out], :as => "destroy"
|
|
@@ -23,7 +23,7 @@ else
|
|
|
23
23
|
|
|
24
24
|
def cas_authenticatable(routes, mapping)
|
|
25
25
|
routes.with_options(:controller => 'devise/cas_sessions', :name_prefix => nil) do |session|
|
|
26
|
-
session.
|
|
26
|
+
session.send(:"#{mapping.name}", '/', :action => 'service', :conditions => {:method => :get})
|
|
27
27
|
session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :get})
|
|
28
28
|
session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :post})
|
|
29
29
|
session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
|
|
@@ -2,6 +2,8 @@ require 'devise/schema'
|
|
|
2
2
|
|
|
3
3
|
module Devise
|
|
4
4
|
module Schema
|
|
5
|
+
# Adds the required fields for cas_authenticatable to the schema. Currently
|
|
6
|
+
# this is just username (String).
|
|
5
7
|
def cas_authenticatable
|
|
6
8
|
if respond_to? :apply_devise_schema
|
|
7
9
|
apply_devise_schema :username, String
|
|
@@ -3,10 +3,16 @@ require 'devise/strategies/base'
|
|
|
3
3
|
module Devise
|
|
4
4
|
module Strategies
|
|
5
5
|
class CasAuthenticatable < Base
|
|
6
|
+
# True if the mapping supports authenticate_with_cas_ticket.
|
|
6
7
|
def valid?
|
|
7
8
|
mapping.to.respond_to?(:authenticate_with_cas_ticket)
|
|
8
9
|
end
|
|
9
10
|
|
|
11
|
+
# Try to authenticate a user using the CAS ticket passed in params.
|
|
12
|
+
# If the ticket is valid and the model's authenticate_with_cas_ticket method
|
|
13
|
+
# returns a user, then return success. If the ticket is invalid, then either
|
|
14
|
+
# fail (if we're just returning from the CAS server, based on the referrer)
|
|
15
|
+
# or attempt to redirect to the CAS server's login URL.
|
|
10
16
|
def authenticate!
|
|
11
17
|
ticket = read_ticket(params)
|
|
12
18
|
if ticket
|
|
@@ -18,22 +18,31 @@ else
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
module Devise
|
|
22
|
-
|
|
21
|
+
module Devise
|
|
22
|
+
# The base URL of the CAS server. For example, http://cas.example.com. Specifying this
|
|
23
|
+
# is mandatory.
|
|
23
24
|
@@cas_base_url = nil
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
# The login URL of the CAS server. If undefined, will default based on cas_base_url.
|
|
26
27
|
@@cas_login_url = nil
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
# The login URL of the CAS server. If undefined, will default based on cas_base_url.
|
|
29
30
|
@@cas_logout_url = nil
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
# The login URL of the CAS server. If undefined, will default based on cas_base_url.
|
|
32
33
|
@@cas_validate_url = nil
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
# Should devise_cas_authenticatable attempt to create new user records for
|
|
36
|
+
# unknown usernames? True by default.
|
|
35
37
|
@@cas_create_user = true
|
|
36
38
|
|
|
39
|
+
mattr_accessor :cas_base_url, :cas_login_url, :cas_logout_url, :cas_validate_url, :cas_create_user
|
|
40
|
+
|
|
41
|
+
def self.cas_create_user?
|
|
42
|
+
cas_create_user
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Return a CASClient::Client instance based on configuration parameters.
|
|
37
46
|
def self.cas_client
|
|
38
47
|
@@cas_client ||= CASClient::Client.new(
|
|
39
48
|
:cas_base_url => @@cas_base_url,
|
data/spec/routes_spec.rb
CHANGED
|
@@ -9,7 +9,8 @@ describe Devise::CasSessionsController do
|
|
|
9
9
|
it { should route(:get, "/users/sign_out").to(:action => "destroy") }
|
|
10
10
|
|
|
11
11
|
it "should have the right route names" do
|
|
12
|
-
controller.should respond_to("new_user_session_path", "user_session_path", "destroy_user_session_path")
|
|
12
|
+
controller.should respond_to("user_path", "new_user_session_path", "user_session_path", "destroy_user_session_path")
|
|
13
|
+
controller.user_path.should == "/users"
|
|
13
14
|
controller.new_user_session_path.should == "/users/sign_in"
|
|
14
15
|
controller.user_session_path.should == "/users/sign_in"
|
|
15
16
|
controller.destroy_user_session_path.should == "/users/sign_out"
|
|
@@ -11,6 +11,24 @@ Devise.setup do |config|
|
|
|
11
11
|
require "devise/orm/active_record"
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
require 'casserver/authenticators/base'
|
|
15
|
+
class TestAuthenticator < CASServer::Authenticators::Base
|
|
16
|
+
def self.reset_valid_users!
|
|
17
|
+
@@valid_users = {
|
|
18
|
+
"joeuser" => "joepassword"
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
reset_valid_users!
|
|
22
|
+
|
|
23
|
+
def self.register_valid_user(username, password)
|
|
24
|
+
@@valid_users[username] = password
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def validate(credentials)
|
|
28
|
+
@@valid_users[credentials[:username]] == credentials[:password]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
14
32
|
module Scenario
|
|
15
33
|
class Application < Rails::Application
|
|
16
34
|
config.active_support.deprecation = :stderr
|
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
|
@@ -6,11 +6,7 @@ require "scenario/config/environment"
|
|
|
6
6
|
require "rails/test_help"
|
|
7
7
|
require 'rspec/rails'
|
|
8
8
|
require 'sham_rack'
|
|
9
|
-
|
|
10
|
-
Webrat.configure do |config|
|
|
11
|
-
config.mode = :rails
|
|
12
|
-
config.open_error_files = false
|
|
13
|
-
end
|
|
9
|
+
require 'capybara/rspec'
|
|
14
10
|
|
|
15
11
|
RSpec.configure do |config|
|
|
16
12
|
config.mock_with :mocha
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Devise::Strategies::CasAuthenticatable, :type => "acceptance" do
|
|
4
|
+
include Rspec::Rails::RequestExampleGroup
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
Devise.cas_base_url = "http://www.example.com/cas_server"
|
|
8
|
+
TestAuthenticator.reset_valid_users!
|
|
9
|
+
User.create! do |u|
|
|
10
|
+
u.username = "joeuser"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
after do
|
|
15
|
+
User.delete_all
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cas_login_url
|
|
19
|
+
@cas_login_url ||= begin
|
|
20
|
+
uri = URI.parse(Devise.cas_base_url + "/login")
|
|
21
|
+
uri.query = Rack::Utils.build_nested_query(:service => user_url)
|
|
22
|
+
uri.to_s
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "GET /protected/resource" do
|
|
27
|
+
before { get '/' }
|
|
28
|
+
|
|
29
|
+
it 'should redirect to sign-in' do
|
|
30
|
+
response.should be_redirect
|
|
31
|
+
response.should redirect_to(cas_login_url)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "Sign in with valid user" do
|
|
36
|
+
it 'should log in ok' do
|
|
37
|
+
puts cas_login_url
|
|
38
|
+
visit cas_login_url
|
|
39
|
+
puts Capybara.current_session.current_url
|
|
40
|
+
save_and_open_page
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: devise_cas_authenticatable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash: -
|
|
4
|
+
hash: -3702664336
|
|
5
5
|
prerelease: 6
|
|
6
6
|
segments:
|
|
7
7
|
- 1
|
|
8
8
|
- 0
|
|
9
9
|
- 0
|
|
10
10
|
- alpha
|
|
11
|
-
-
|
|
12
|
-
version: 1.0.0.
|
|
11
|
+
- 6
|
|
12
|
+
version: 1.0.0.alpha6
|
|
13
13
|
platform: ruby
|
|
14
14
|
authors:
|
|
15
15
|
- Nat Budin
|
|
@@ -17,13 +17,96 @@ autorequire:
|
|
|
17
17
|
bindir: bin
|
|
18
18
|
cert_chain: []
|
|
19
19
|
|
|
20
|
-
date: 2011-
|
|
20
|
+
date: 2011-04-11 00:00:00 -04:00
|
|
21
21
|
default_executable:
|
|
22
22
|
dependencies:
|
|
23
23
|
- !ruby/object:Gem::Dependency
|
|
24
|
-
prerelease: false
|
|
25
24
|
type: :runtime
|
|
26
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ">="
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
hash: 3
|
|
31
|
+
segments:
|
|
32
|
+
- 0
|
|
33
|
+
version: "0"
|
|
34
|
+
name: devise_cas_authenticatable
|
|
35
|
+
version_requirements: *id001
|
|
36
|
+
prerelease: false
|
|
37
|
+
- !ruby/object:Gem::Dependency
|
|
38
|
+
type: :runtime
|
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
40
|
+
none: false
|
|
41
|
+
requirements:
|
|
42
|
+
- - ">="
|
|
43
|
+
- !ruby/object:Gem::Version
|
|
44
|
+
hash: 3
|
|
45
|
+
segments:
|
|
46
|
+
- 0
|
|
47
|
+
version: "0"
|
|
48
|
+
name: devise
|
|
49
|
+
version_requirements: *id002
|
|
50
|
+
prerelease: false
|
|
51
|
+
- !ruby/object:Gem::Dependency
|
|
52
|
+
type: :development
|
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
54
|
+
none: false
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
hash: 3
|
|
59
|
+
segments:
|
|
60
|
+
- 0
|
|
61
|
+
version: "0"
|
|
62
|
+
name: ruby-debug
|
|
63
|
+
version_requirements: *id003
|
|
64
|
+
prerelease: false
|
|
65
|
+
- !ruby/object:Gem::Dependency
|
|
66
|
+
type: :development
|
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
68
|
+
none: false
|
|
69
|
+
requirements:
|
|
70
|
+
- - ">="
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
hash: 3
|
|
73
|
+
segments:
|
|
74
|
+
- 0
|
|
75
|
+
version: "0"
|
|
76
|
+
name: jeweler
|
|
77
|
+
version_requirements: *id004
|
|
78
|
+
prerelease: false
|
|
79
|
+
- !ruby/object:Gem::Dependency
|
|
80
|
+
type: :development
|
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
82
|
+
none: false
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
hash: 3
|
|
87
|
+
segments:
|
|
88
|
+
- 0
|
|
89
|
+
version: "0"
|
|
90
|
+
name: ruby-debug
|
|
91
|
+
version_requirements: *id005
|
|
92
|
+
prerelease: false
|
|
93
|
+
- !ruby/object:Gem::Dependency
|
|
94
|
+
type: :development
|
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
96
|
+
none: false
|
|
97
|
+
requirements:
|
|
98
|
+
- - ">="
|
|
99
|
+
- !ruby/object:Gem::Version
|
|
100
|
+
hash: 3
|
|
101
|
+
segments:
|
|
102
|
+
- 0
|
|
103
|
+
version: "0"
|
|
104
|
+
name: jeweler
|
|
105
|
+
version_requirements: *id006
|
|
106
|
+
prerelease: false
|
|
107
|
+
- !ruby/object:Gem::Dependency
|
|
108
|
+
type: :runtime
|
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
27
110
|
none: false
|
|
28
111
|
requirements:
|
|
29
112
|
- - ">="
|
|
@@ -35,11 +118,11 @@ dependencies:
|
|
|
35
118
|
- 6
|
|
36
119
|
version: 1.0.6
|
|
37
120
|
name: devise
|
|
38
|
-
version_requirements: *
|
|
39
|
-
- !ruby/object:Gem::Dependency
|
|
121
|
+
version_requirements: *id007
|
|
40
122
|
prerelease: false
|
|
123
|
+
- !ruby/object:Gem::Dependency
|
|
41
124
|
type: :runtime
|
|
42
|
-
requirement: &
|
|
125
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
43
126
|
none: false
|
|
44
127
|
requirements:
|
|
45
128
|
- - ">="
|
|
@@ -51,7 +134,8 @@ dependencies:
|
|
|
51
134
|
- 1
|
|
52
135
|
version: 2.2.1
|
|
53
136
|
name: rubycas-client
|
|
54
|
-
version_requirements: *
|
|
137
|
+
version_requirements: *id008
|
|
138
|
+
prerelease: false
|
|
55
139
|
description: CAS authentication module for Devise
|
|
56
140
|
email: natbudin@gmail.com
|
|
57
141
|
executables: []
|
|
@@ -61,7 +145,6 @@ extensions: []
|
|
|
61
145
|
extra_rdoc_files:
|
|
62
146
|
- README.md
|
|
63
147
|
files:
|
|
64
|
-
- .gitignore
|
|
65
148
|
- .project
|
|
66
149
|
- Gemfile
|
|
67
150
|
- Gemfile.lock
|
|
@@ -98,16 +181,19 @@ files:
|
|
|
98
181
|
- spec/scenario/config/initializers/session_store.rb
|
|
99
182
|
- spec/scenario/config/locales/en.yml
|
|
100
183
|
- spec/scenario/config/routes.rb
|
|
184
|
+
- spec/scenario/config/rubycas-server.yml
|
|
101
185
|
- spec/scenario/db/migrate/20100401102949_create_tables.rb
|
|
186
|
+
- spec/scenario/public/.gitkeep
|
|
102
187
|
- spec/spec_helper.rb
|
|
188
|
+
- spec/strategy_spec.rb
|
|
103
189
|
- spec/support/migrations.rb
|
|
104
190
|
has_rdoc: true
|
|
105
191
|
homepage: http://github.com/nbudin/devise_cas_authenticatable
|
|
106
192
|
licenses: []
|
|
107
193
|
|
|
108
194
|
post_install_message:
|
|
109
|
-
rdoc_options:
|
|
110
|
-
|
|
195
|
+
rdoc_options: []
|
|
196
|
+
|
|
111
197
|
require_paths:
|
|
112
198
|
- lib
|
|
113
199
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -156,4 +242,5 @@ test_files:
|
|
|
156
242
|
- spec/scenario/config/routes.rb
|
|
157
243
|
- spec/scenario/db/migrate/20100401102949_create_tables.rb
|
|
158
244
|
- spec/spec_helper.rb
|
|
245
|
+
- spec/strategy_spec.rb
|
|
159
246
|
- spec/support/migrations.rb
|