devise_cloudfuji_authenticatable 1.0.4

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