devise_cas_authenticatable 1.2.1 → 1.3.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/.travis.yml CHANGED
@@ -1,10 +1,8 @@
1
1
  rvm:
2
- - 1.8.7 # (current default)
2
+ - 1.8.7
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  gemfile:
6
- - Gemfile.devise10
7
- - Gemfile.devise11
8
6
  - Gemfile.devise12
9
7
  - Gemfile.devise13
10
8
  - Gemfile.devise14
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog for devise\_cas\_authenticatable
2
2
 
3
+ ## Version 1.3.0 - May 12, 2013
4
+
5
+ * Drop support for Rails 2.3, Devise 1.0 and 1.1
6
+ * Custom failure class for optional redirecting to logout url upon timeout (thanks to @geoffroh and @kylejginavan)
7
+
3
8
  ## Version 1.2.1 - April 16, 2013
4
9
 
5
10
  * Bug fix: use Devise.sign_out_via to configure the HTTP verb sign_out will accept.
data/README.md CHANGED
@@ -81,7 +81,16 @@ to tell your app how to talk to your CAS server:
81
81
  # By default, devise_cas_authenticatable will create users. If you would rather
82
82
  # require user records to already exist locally before they can authenticate via
83
83
  # CAS, uncomment the following line.
84
- # config.cas_create_user = false
84
+ # config.cas_create_user = false
85
+
86
+ # If you want to use the Devise Timeoutable module with single sign out,
87
+ # uncommenting this will redirect timeouts to the logout url, so that the CAS can
88
+ # take care of signing out the other serviced applocations. Note that each
89
+ # application manages timeouts independently, so one application timing out will
90
+ # kill the session on all applications serviced by the CAS.
91
+ # config.warden do |manager|
92
+ # manager.failure_app = DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp
93
+ # end
85
94
  end
86
95
 
87
96
  Extra attributes
data/Rakefile CHANGED
@@ -3,27 +3,11 @@ require 'bundler/gem_tasks'
3
3
 
4
4
  Bundler.setup
5
5
 
6
- require 'rake'
7
- begin
8
- require 'rdoc/task'
9
- rescue LoadError
10
- require 'rake/rdoctask'
11
- end
12
-
13
6
  require 'rspec/mocks/version'
14
7
  require 'rspec/core/rake_task'
15
8
 
16
9
  RSpec::Core::RakeTask.new(:spec)
17
10
 
18
- desc 'Generate documentation for the devise_cas_authenticatable plugin.'
19
- Rake::RDocTask.new(:rdoc) do |rdoc|
20
- rdoc.rdoc_dir = 'rdoc'
21
- rdoc.title = 'devise_cas_authenticatable'
22
- rdoc.options << '--line-numbers' << '--inline-source'
23
- rdoc.rdoc_files.include('README')
24
- rdoc.rdoc_files.include('lib/**/*.rb')
25
- end
26
-
27
11
  require File.expand_path('../spec/scenario/config/application', __FILE__)
28
12
 
29
13
  Scenario::Application.load_tasks
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{devise_cas_authenticatable}
5
- s.version = "1.2.1"
5
+ s.version = "1.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Nat Budin", "Jeremy Haile"]
@@ -21,18 +21,19 @@ Gem::Specification.new do |s|
21
21
  s.rubygems_version = %q{1.5.0}
22
22
  s.summary = %q{CAS authentication module for Devise}
23
23
 
24
- s.add_runtime_dependency(%q<devise>, [">= 1.0.6"])
24
+ s.add_runtime_dependency(%q<devise>, [">= 1.2.0"])
25
25
  s.add_runtime_dependency(%q<rubycas-client>, [">= 2.2.1"])
26
26
 
27
27
  s.add_development_dependency("rails", ">= 3.0.7")
28
28
  s.add_development_dependency("rspec-rails")
29
29
  s.add_development_dependency("mocha")
30
- s.add_development_dependency("shoulda")
30
+ s.add_development_dependency("shoulda", "~> 3.4.0")
31
31
  s.add_development_dependency("sqlite3-ruby")
32
32
  s.add_development_dependency("sham_rack")
33
- s.add_development_dependency("capybara")
33
+ s.add_development_dependency("capybara", "~> 1.1.4")
34
34
  s.add_development_dependency('crypt-isaac')
35
35
  s.add_development_dependency('launchy')
36
+ s.add_development_dependency('timecop')
36
37
  s.add_development_dependency('pry')
37
38
  end
38
39
 
@@ -18,6 +18,11 @@ rescue
18
18
  else
19
19
  module DeviseCasAuthenticatable
20
20
  class Engine < Rails::Engine
21
+ initializer "devise_cas_authenticatable.single_sign_on.warden_failure_app" do |app|
22
+ # requiring this here because the parent class calls Rails.application, which
23
+ # isn't set up until after bundler has required the modules in this engine
24
+ require 'devise_cas_authenticatable/single_sign_out/warden_failure_app'
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -0,0 +1,46 @@
1
+ # Redirect to the logout url when :warden is thrown,
2
+ # so that a single_sign_out request can be initiated
3
+ class DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp < Devise::FailureApp
4
+
5
+ # You need to override respond to eliminate recall
6
+ def respond
7
+ if http_auth?
8
+ http_auth
9
+ else
10
+ redirect
11
+ end
12
+ end
13
+
14
+ def redirect
15
+ store_location!
16
+ if flash[:timedout] && flash[:alert]
17
+ flash.keep(:timedout)
18
+ flash.keep(:alert)
19
+ else
20
+ flash[:alert] = i18n_message
21
+ end
22
+ redirect_to redirect_url
23
+ end
24
+
25
+ protected
26
+
27
+ def redirect_url
28
+ if warden_message == :timeout
29
+ flash[:timedout] = true
30
+ Devise.cas_client.logout_url
31
+ else
32
+ if respond_to?(:scope_path)
33
+ scope_path
34
+ else
35
+ super
36
+ end
37
+ end
38
+ end
39
+
40
+ # Devise < 2.0 doesn't have this method, which we want to use
41
+ unless instance_methods.include?(:warden_message)
42
+ define_method :warden_message do
43
+ @message ||= warden.message || warden_options[:message]
44
+ end
45
+ end
46
+ end
@@ -1,5 +1,5 @@
1
1
  class User < ActiveRecord::Base
2
- devise :cas_authenticatable, :rememberable
2
+ devise :cas_authenticatable, :rememberable, :timeoutable
3
3
 
4
4
  def active_for_authentication?
5
5
  super && !deactivated
@@ -1,3 +1,4 @@
1
1
  Devise.setup do |config|
2
2
  require "devise/orm/active_record"
3
+ config.timeout_in = 7200
3
4
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp do
4
+ include RSpec::Rails::RequestExampleGroup
5
+ include Capybara::DSL
6
+
7
+ describe "A logged in user with a timed out session" do
8
+
9
+ before do
10
+ Devise.cas_base_url = "http://www.example.com/cas_server"
11
+ User.delete_all
12
+ @user = User.create!(:username => "joeuser")
13
+ end
14
+
15
+ describe "using the default warden failure app" do
16
+
17
+ before do
18
+ sign_into_cas "joeuser", "joepassword"
19
+ end
20
+
21
+ it "redirects to cas_login_url when warden is thrown" do
22
+ Devise::FailureApp.any_instance.expects(:redirect_url).returns(cas_login_url)
23
+ Timecop.travel(Devise.timeout_in) do
24
+ visit root_url
25
+ end
26
+ current_url.should == root_url
27
+ end
28
+
29
+ end
30
+
31
+ describe "using the custom WardenFailureApp" do
32
+
33
+ before do
34
+
35
+ Devise.warden_config[:failure_app] = DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp
36
+ sign_into_cas "joeuser", "joepassword"
37
+ end
38
+
39
+ it "uses the redirect_url from the custom failure class" do
40
+ DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp.any_instance.expects(:redirect_url).returns(destroy_user_session_url)
41
+ Timecop.travel(Devise.timeout_in) do
42
+ visit root_url
43
+ end
44
+ current_url.should match(/#{cas_logout_url}/)
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,13 +3,13 @@ $:.unshift File.dirname(__FILE__)
3
3
  $:.unshift File.expand_path('../../lib', __FILE__)
4
4
 
5
5
  require "scenario/config/environment"
6
- require "rails/test_help"
7
6
  require 'rspec/rails'
8
7
  require 'sham_rack'
9
8
  require 'capybara/rspec'
9
+ require 'timecop'
10
10
 
11
- RSpec.configure do |config|
12
- config.mock_with :mocha
11
+ RSpec.configure do |config|
12
+ config.mock_with :mocha
13
13
  end
14
14
 
15
15
  ShamRack.at('www.example.com') do |env|
@@ -124,6 +124,7 @@ describe Devise::Strategies::CasAuthenticatable, :type => "acceptance" do
124
124
  User.find_by_username("newuser").should be_nil
125
125
 
126
126
  click_on "sign in using a different account"
127
+ click_on "here"
127
128
  current_url.should == cas_login_url
128
129
  fill_in "Username", :with => "joeuser"
129
130
  fill_in "Password", :with => "joepassword"
@@ -0,0 +1,19 @@
1
+ def cas_login_url
2
+ @cas_login_url ||= begin
3
+ uri = URI.parse(Devise.cas_base_url + "/login")
4
+ uri.query = Rack::Utils.build_nested_query(:service => user_service_url)
5
+ uri.to_s
6
+ end
7
+ end
8
+
9
+ def cas_logout_url
10
+ @cas_logout_url ||= Devise.cas_base_url + "/logout"
11
+ end
12
+
13
+ def sign_into_cas(username, password)
14
+ visit cas_login_url
15
+ fill_in "Username", :with => username
16
+ fill_in "Password", :with => password
17
+ click_on "Login"
18
+ current_url.should == root_url
19
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp do
4
+
5
+ describe "#redirect_url" do
6
+
7
+ before do
8
+ Devise.cas_base_url = "http://www.example.com/cas_server"
9
+ @failure_app = DeviseCasAuthenticatable::SingleSignOut::WardenFailureApp.new
10
+ @failure_app.stubs(:flash).returns({})
11
+ end
12
+
13
+ describe "resulting from a timeout" do
14
+
15
+ before do
16
+ @failure_app.stubs(:warden_message).returns(:timeout)
17
+ end
18
+
19
+ it "returns the logout url" do
20
+ @failure_app.send(:redirect_url).should match(/#{cas_logout_url}/)
21
+ end
22
+
23
+ end
24
+
25
+ describe "resulting from a generic warden :throw error" do
26
+
27
+ before do
28
+ @failure_app.stubs(:warden_message).returns(nil)
29
+ @failure_app.stubs(:flash).returns({})
30
+ end
31
+
32
+ it "calls the scope_path method to retrieve the standard redirect_url" do
33
+ @failure_app.expects(:scope_path)
34
+ @failure_app.send(:redirect_url)
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: devise_cas_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.2.1
5
+ version: 1.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nat Budin
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-16 00:00:00.000000000 Z
13
+ date: 2013-05-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  prerelease: false
@@ -20,13 +20,13 @@ dependencies:
20
20
  requirements:
21
21
  - - ! '>='
22
22
  - !ruby/object:Gem::Version
23
- version: 1.0.6
23
+ version: 1.2.0
24
24
  none: false
25
25
  requirement: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.0.6
29
+ version: 1.2.0
30
30
  none: false
31
31
  - !ruby/object:Gem::Dependency
32
32
  prerelease: false
@@ -98,15 +98,15 @@ dependencies:
98
98
  type: :development
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 3.4.0
104
104
  none: false
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - ! '>='
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: '0'
109
+ version: 3.4.0
110
110
  none: false
111
111
  - !ruby/object:Gem::Dependency
112
112
  prerelease: false
@@ -144,6 +144,22 @@ dependencies:
144
144
  prerelease: false
145
145
  name: capybara
146
146
  type: :development
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ~>
150
+ - !ruby/object:Gem::Version
151
+ version: 1.1.4
152
+ none: false
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 1.1.4
158
+ none: false
159
+ - !ruby/object:Gem::Dependency
160
+ prerelease: false
161
+ name: crypt-isaac
162
+ type: :development
147
163
  version_requirements: !ruby/object:Gem::Requirement
148
164
  requirements:
149
165
  - - ! '>='
@@ -158,7 +174,7 @@ dependencies:
158
174
  none: false
159
175
  - !ruby/object:Gem::Dependency
160
176
  prerelease: false
161
- name: crypt-isaac
177
+ name: launchy
162
178
  type: :development
163
179
  version_requirements: !ruby/object:Gem::Requirement
164
180
  requirements:
@@ -174,7 +190,7 @@ dependencies:
174
190
  none: false
175
191
  - !ruby/object:Gem::Dependency
176
192
  prerelease: false
177
- name: launchy
193
+ name: timecop
178
194
  type: :development
179
195
  version_requirements: !ruby/object:Gem::Requirement
180
196
  requirements:
@@ -216,8 +232,6 @@ files:
216
232
  - .travis.yml
217
233
  - CHANGELOG.md
218
234
  - Gemfile
219
- - Gemfile.devise10
220
- - Gemfile.devise11
221
235
  - Gemfile.devise12
222
236
  - Gemfile.devise13
223
237
  - Gemfile.devise14
@@ -242,6 +256,7 @@ files:
242
256
  - lib/devise_cas_authenticatable/single_sign_out/strategies.rb
243
257
  - lib/devise_cas_authenticatable/single_sign_out/strategies/base.rb
244
258
  - lib/devise_cas_authenticatable/single_sign_out/strategies/rails_cache.rb
259
+ - lib/devise_cas_authenticatable/single_sign_out/warden_failure_app.rb
245
260
  - lib/devise_cas_authenticatable/strategy.rb
246
261
  - rails/init.rb
247
262
  - spec/config_spec.rb
@@ -275,9 +290,12 @@ files:
275
290
  - spec/scenario/db/migrate/20121009092400_add_deactivated_flag_to_users.rb
276
291
  - spec/scenario/db/schema.rb
277
292
  - spec/scenario/public/.gitkeep
293
+ - spec/single_sign_out_spec.rb
278
294
  - spec/spec_helper.rb
279
295
  - spec/strategy_spec.rb
280
296
  - spec/support/migrations.rb
297
+ - spec/support/urls.rb
298
+ - spec/warden_failure_app_spec.rb
281
299
  homepage: http://github.com/nbudin/devise_cas_authenticatable
282
300
  licenses:
283
301
  - MIT
@@ -291,7 +309,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
291
309
  - !ruby/object:Gem::Version
292
310
  segments:
293
311
  - 0
294
- hash: -2394567349096225548
312
+ hash: 2546603475843590117
295
313
  version: '0'
296
314
  none: false
297
315
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -338,6 +356,9 @@ test_files:
338
356
  - spec/scenario/db/migrate/20121009092400_add_deactivated_flag_to_users.rb
339
357
  - spec/scenario/db/schema.rb
340
358
  - spec/scenario/public/.gitkeep
359
+ - spec/single_sign_out_spec.rb
341
360
  - spec/spec_helper.rb
342
361
  - spec/strategy_spec.rb
343
362
  - spec/support/migrations.rb
363
+ - spec/support/urls.rb
364
+ - spec/warden_failure_app_spec.rb
data/Gemfile.devise10 DELETED
@@ -1,12 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in devise_cas_authenticatable.gemspec
4
- gemspec
5
-
6
- gem 'rails', '~> 2.3.14'
7
- gem 'devise', '~> 1.0.0'
8
- gem 'rspec-rails', '~> 1.2.0'
9
-
10
- group :test do
11
- gem 'castronaut', :git => 'https://github.com/nbudin/castronaut.git', :branch => 'dam5s-merge'
12
- end
data/Gemfile.devise11 DELETED
@@ -1,11 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in devise_cas_authenticatable.gemspec
4
- gemspec
5
-
6
- gem 'rails', '~> 3.0.0'
7
- gem 'devise', '~> 1.1.0'
8
-
9
- group :test do
10
- gem 'castronaut', :git => 'https://github.com/nbudin/castronaut.git', :branch => 'dam5s-merge'
11
- end