devise_cloudfuji_authenticatable 1.0.4

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.
Files changed (62) hide show
  1. data/.gitignore +4 -0
  2. data/.project +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +10 -0
  6. data/README.md +121 -0
  7. data/Rakefile +1 -0
  8. data/app/controllers/devise/cas_sessions_controller.rb +101 -0
  9. data/app/views/devise/cas_sessions/new.html.erb +1 -0
  10. data/app/views/devise/cas_sessions/unregistered.html.erb +150 -0
  11. data/app/views/devise/cas_sessions/unregistered.html.erb.old +2 -0
  12. data/devise_cloudfuji_authenticatable.gemspec +36 -0
  13. data/lib/devise_cas_authenticatable.rb +135 -0
  14. data/lib/devise_cas_authenticatable/exceptions.rb +10 -0
  15. data/lib/devise_cas_authenticatable/missing_session_helpers.rb +9 -0
  16. data/lib/devise_cas_authenticatable/model.rb +56 -0
  17. data/lib/devise_cas_authenticatable/routes.rb +37 -0
  18. data/lib/devise_cas_authenticatable/schema.rb +13 -0
  19. data/lib/devise_cas_authenticatable/single_sign_out.rb +22 -0
  20. data/lib/devise_cas_authenticatable/single_sign_out/session_store/active_record.rb +12 -0
  21. data/lib/devise_cas_authenticatable/single_sign_out/session_store/redis.rb +27 -0
  22. data/lib/devise_cas_authenticatable/single_sign_out/strategies.rb +58 -0
  23. data/lib/devise_cas_authenticatable/single_sign_out/strategies/base.rb +11 -0
  24. data/lib/devise_cas_authenticatable/single_sign_out/strategies/rails_cache.rb +31 -0
  25. data/lib/devise_cas_authenticatable/strategy.rb +56 -0
  26. data/lib/devise_cloudfuji_authenticatable.rb +8 -0
  27. data/lib/devise_cloudfuji_authenticatable/version.rb +3 -0
  28. data/rails/init.rb +1 -0
  29. data/spec/devise_cas_authenticatable/model_spec.rb +39 -0
  30. data/spec/routes_spec.rb +38 -0
  31. data/spec/scenario/.gitignore +4 -0
  32. data/spec/scenario/app/controllers/application_controller.rb +3 -0
  33. data/spec/scenario/app/controllers/home_controller.rb +7 -0
  34. data/spec/scenario/app/models/user.rb +3 -0
  35. data/spec/scenario/app/views/layouts/application.html.erb +17 -0
  36. data/spec/scenario/config.ru +4 -0
  37. data/spec/scenario/config/application.rb +38 -0
  38. data/spec/scenario/config/boot.rb +13 -0
  39. data/spec/scenario/config/castronaut.yml +32 -0
  40. data/spec/scenario/config/database.yml +22 -0
  41. data/spec/scenario/config/environment.rb +5 -0
  42. data/spec/scenario/config/environments/development.rb +25 -0
  43. data/spec/scenario/config/environments/production.rb +49 -0
  44. data/spec/scenario/config/environments/test.rb +35 -0
  45. data/spec/scenario/config/initializers/backtrace_silencers.rb +7 -0
  46. data/spec/scenario/config/initializers/castronaut.rb +1 -0
  47. data/spec/scenario/config/initializers/devise.rb +3 -0
  48. data/spec/scenario/config/initializers/inflections.rb +10 -0
  49. data/spec/scenario/config/initializers/mime_types.rb +5 -0
  50. data/spec/scenario/config/initializers/secret_token.rb +7 -0
  51. data/spec/scenario/config/initializers/session_store.rb +8 -0
  52. data/spec/scenario/config/locales/en.yml +5 -0
  53. data/spec/scenario/config/routes.rb +8 -0
  54. data/spec/scenario/config/rubycas-server.yml +13 -0
  55. data/spec/scenario/db/migrate/20100401102949_create_tables.rb +15 -0
  56. data/spec/scenario/db/migrate/20111002012903_add_sessions_table.rb +16 -0
  57. data/spec/scenario/db/schema.rb +25 -0
  58. data/spec/scenario/public/.gitkeep +0 -0
  59. data/spec/spec_helper.rb +23 -0
  60. data/spec/strategy_spec.rb +87 -0
  61. data/spec/support/migrations.rb +4 -0
  62. metadata +236 -0
@@ -0,0 +1,13 @@
1
+ url_path: /cas_server
2
+
3
+ log:
4
+ level: DEBUG
5
+
6
+ database:
7
+ adapter: sqlite3
8
+ database: db/cas.sqlite3
9
+ pool: 5
10
+ timeout: 5000
11
+
12
+ authenticator:
13
+ class: TestAuthenticator
@@ -0,0 +1,15 @@
1
+ class CreateTables < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |t|
4
+ t.cloudfuji_authenticatable
5
+ t.string :username
6
+ t.rememberable
7
+ t.string :email
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :users
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ class AddSessionsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :sessions do |t|
4
+ t.string :session_id, :null => false
5
+ t.text :data
6
+ t.timestamps
7
+ end
8
+
9
+ add_index :sessions, :session_id
10
+ add_index :sessions, :updated_at
11
+ end
12
+
13
+ def self.down
14
+ drop_table :sessions
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your
6
+ # database schema. If you need to create the application database on another
7
+ # system, you should be using db:schema:load, not running all the migrations
8
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
10
+ #
11
+ # It's strongly recommended to check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(:version => 20111002012903) do
14
+
15
+ create_table "sessions", :force => true do |t|
16
+ t.string "session_id", :null => false
17
+ t.text "data"
18
+ t.datetime "created_at"
19
+ t.datetime "updated_at"
20
+ end
21
+
22
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
23
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
24
+
25
+ end
File without changes
@@ -0,0 +1,23 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ $:.unshift File.dirname(__FILE__)
3
+ $:.unshift File.expand_path('../../lib', __FILE__)
4
+
5
+ require "devise_cloudfuji_authenticatable"
6
+ require "scenario/config/environment"
7
+ require "rails/test_help"
8
+ require 'rspec/rails'
9
+ require 'sham_rack'
10
+ require 'capybara/rspec'
11
+
12
+ RSpec.configure do |config|
13
+ config.mock_with :rspec
14
+ end
15
+
16
+ ShamRack.at('www.example.com') do |env|
17
+ request = Rack::Request.new(env)
18
+ request.path_info = request.path_info.sub(/^\/cas_server/, '')
19
+
20
+ Castronaut::Application.call(request.env)
21
+ end
22
+
23
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,87 @@
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
+ TestAdapter.reset_valid_users!
9
+
10
+ User.delete_all
11
+ User.create! do |u|
12
+ u.username = "joeuser"
13
+ end
14
+ end
15
+
16
+ after do
17
+ visit destroy_user_session_url
18
+ end
19
+
20
+ def cas_login_url(redirect_path=nil)
21
+ @cas_login_url ||= begin
22
+ redirect_path = "/" if not redirect_path
23
+ uri = URI.parse(Devise.cas_base_url + "/login")
24
+ uri.query = "service=#{CGI.escape(user_service_url)}&redirect=#{redirect_path}"
25
+ puts "URI CHECK #{uri.to_s}"
26
+ uri.to_s
27
+ end
28
+ end
29
+
30
+ def cas_logout_url
31
+ @cas_logout_url ||= Devise.cas_base_url + "/logout"
32
+ end
33
+
34
+ def sign_into_cas(username, password)
35
+ visit root_url
36
+ fill_in "Username", :with => username
37
+ fill_in "Password", :with => password
38
+ click_on "Login"
39
+ end
40
+
41
+ describe "GET /protected/resource" do
42
+ before { get '/' }
43
+
44
+ it 'should redirect to sign-in' do
45
+ response.should be_redirect
46
+ response.should redirect_to(new_user_session_url)
47
+ end
48
+ end
49
+
50
+ describe "GET /users/sign_in" do
51
+ before { get new_user_session_url }
52
+
53
+ it 'should redirect to CAS server' do
54
+ response.should be_redirect
55
+ response.should redirect_to(cas_login_url("/"))
56
+ end
57
+ end
58
+
59
+ it "should sign in with valid user" do
60
+ sign_into_cas "joeuser", "joepassword"
61
+ current_url.should == root_url
62
+ end
63
+
64
+ it "should fail to sign in with an invalid user" do
65
+ sign_into_cas "invaliduser", "invalidpassword"
66
+ current_url.should_not == root_url
67
+ end
68
+
69
+ it "should register new CAS users if set up to do so" do
70
+ expect {
71
+ TestAdapter.register_valid_user("newuser", "newpassword")
72
+ Devise.cas_create_user = true
73
+ sign_into_cas "newuser", "newpassword"
74
+
75
+ }.to change(User, :count).by(1)
76
+ end
77
+
78
+ it "should fail CAS login if user is unregistered and cas_create_user is false" do
79
+ expect {
80
+ TestAdapter.register_valid_user("newuser", "newpassword")
81
+ Devise.cas_create_user = false
82
+ sign_into_cas "newuser", "newpassword"
83
+
84
+ current_url.should_not == root_url
85
+ }.to change(User, :count).by(0)
86
+ end
87
+ end
@@ -0,0 +1,4 @@
1
+ FileUtils.rm File.expand_path("../../scenario/db/*.sqlite3", __FILE__), :force => true
2
+ ActiveRecord::Base.logger = Logger.new(nil)
3
+ ActiveRecord::Migration.verbose = false
4
+ ActiveRecord::Migrator.migrate(File.expand_path("../../scenario/db/migrate/", __FILE__))
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devise_cloudfuji_authenticatable
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Akash Manohar J
9
+ - Sean Grove
10
+ - Didier Lafforgue
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2012-04-15 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: devise
18
+ requirement: &13879600 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - =
22
+ - !ruby/object:Gem::Version
23
+ version: 1.5.3
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: *13879600
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubycas-client
29
+ requirement: &13877680 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: 2.2.1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: *13877680
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ requirement: &13892500 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *13892500
49
+ - !ruby/object:Gem::Dependency
50
+ name: mocha
51
+ requirement: &13889700 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *13889700
60
+ - !ruby/object:Gem::Dependency
61
+ name: shoulda
62
+ requirement: &13887500 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *13887500
71
+ - !ruby/object:Gem::Dependency
72
+ name: sqlite3-ruby
73
+ requirement: &13885180 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *13885180
82
+ - !ruby/object:Gem::Dependency
83
+ name: sham_rack
84
+ requirement: &13897320 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *13897320
93
+ - !ruby/object:Gem::Dependency
94
+ name: capybara
95
+ requirement: &13895720 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: *13895720
104
+ - !ruby/object:Gem::Dependency
105
+ name: crypt-isaac
106
+ requirement: &13893940 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *13893940
115
+ - !ruby/object:Gem::Dependency
116
+ name: launchy
117
+ requirement: &13921440 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: *13921440
126
+ - !ruby/object:Gem::Dependency
127
+ name: pry
128
+ requirement: &13917200 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: *13917200
137
+ description: Cloudfuji SSO authentication module for Devise. A slight variant of the
138
+ excellent work from Nat Budlin on devise_cas_authenticatable.
139
+ email: s@cloudfuji.com
140
+ executables: []
141
+ extensions: []
142
+ extra_rdoc_files: []
143
+ files:
144
+ - .gitignore
145
+ - .project
146
+ - .rspec
147
+ - .travis.yml
148
+ - Gemfile
149
+ - Gemfile.lock
150
+ - README.md
151
+ - Rakefile
152
+ - app/controllers/devise/cas_sessions_controller.rb
153
+ - app/views/devise/cas_sessions/new.html.erb
154
+ - app/views/devise/cas_sessions/unregistered.html.erb
155
+ - app/views/devise/cas_sessions/unregistered.html.erb.old
156
+ - devise_cloudfuji_authenticatable.gemspec
157
+ - lib/devise_cas_authenticatable.rb
158
+ - lib/devise_cas_authenticatable/exceptions.rb
159
+ - lib/devise_cas_authenticatable/missing_session_helpers.rb
160
+ - lib/devise_cas_authenticatable/model.rb
161
+ - lib/devise_cas_authenticatable/routes.rb
162
+ - lib/devise_cas_authenticatable/schema.rb
163
+ - lib/devise_cas_authenticatable/single_sign_out.rb
164
+ - lib/devise_cas_authenticatable/single_sign_out/session_store/active_record.rb
165
+ - lib/devise_cas_authenticatable/single_sign_out/session_store/redis.rb
166
+ - lib/devise_cas_authenticatable/single_sign_out/strategies.rb
167
+ - lib/devise_cas_authenticatable/single_sign_out/strategies/base.rb
168
+ - lib/devise_cas_authenticatable/single_sign_out/strategies/rails_cache.rb
169
+ - lib/devise_cas_authenticatable/strategy.rb
170
+ - lib/devise_cloudfuji_authenticatable.rb
171
+ - lib/devise_cloudfuji_authenticatable/version.rb
172
+ - rails/init.rb
173
+ - spec/devise_cas_authenticatable/model_spec.rb
174
+ - spec/routes_spec.rb
175
+ - spec/scenario/.gitignore
176
+ - spec/scenario/app/controllers/application_controller.rb
177
+ - spec/scenario/app/controllers/home_controller.rb
178
+ - spec/scenario/app/models/user.rb
179
+ - spec/scenario/app/views/layouts/application.html.erb
180
+ - spec/scenario/config.ru
181
+ - spec/scenario/config/application.rb
182
+ - spec/scenario/config/boot.rb
183
+ - spec/scenario/config/castronaut.yml
184
+ - spec/scenario/config/database.yml
185
+ - spec/scenario/config/environment.rb
186
+ - spec/scenario/config/environments/development.rb
187
+ - spec/scenario/config/environments/production.rb
188
+ - spec/scenario/config/environments/test.rb
189
+ - spec/scenario/config/initializers/backtrace_silencers.rb
190
+ - spec/scenario/config/initializers/castronaut.rb
191
+ - spec/scenario/config/initializers/devise.rb
192
+ - spec/scenario/config/initializers/inflections.rb
193
+ - spec/scenario/config/initializers/mime_types.rb
194
+ - spec/scenario/config/initializers/secret_token.rb
195
+ - spec/scenario/config/initializers/session_store.rb
196
+ - spec/scenario/config/locales/en.yml
197
+ - spec/scenario/config/routes.rb
198
+ - spec/scenario/config/rubycas-server.yml
199
+ - spec/scenario/db/migrate/20100401102949_create_tables.rb
200
+ - spec/scenario/db/migrate/20111002012903_add_sessions_table.rb
201
+ - spec/scenario/db/schema.rb
202
+ - spec/scenario/public/.gitkeep
203
+ - spec/spec_helper.rb
204
+ - spec/strategy_spec.rb
205
+ - spec/support/migrations.rb
206
+ homepage: http://github.com/cloudfuji/cloudfuji_cas_authenticatable
207
+ licenses: []
208
+ post_install_message:
209
+ rdoc_options: []
210
+ require_paths:
211
+ - lib
212
+ required_ruby_version: !ruby/object:Gem::Requirement
213
+ none: false
214
+ requirements:
215
+ - - ! '>='
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ segments:
219
+ - 0
220
+ hash: -4095724251203699146
221
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
+ none: false
223
+ requirements:
224
+ - - ! '>='
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ segments:
228
+ - 0
229
+ hash: -4095724251203699146
230
+ requirements: []
231
+ rubyforge_project: devise_cloudfuji_authenticatable
232
+ rubygems_version: 1.8.10
233
+ signing_key:
234
+ specification_version: 3
235
+ summary: Cloudfuji SSO authentication module for Devise
236
+ test_files: []