devise_masquerade 0.6.5 → 2.1.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.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/brakeman-analysis.yml +44 -0
  4. data/.github/workflows/rubocop-analysis.yml +39 -0
  5. data/.gitignore +1 -2
  6. data/.ruby-version +1 -1
  7. data/.travis.yml +2 -7
  8. data/Gemfile +16 -10
  9. data/Gemfile.lock +310 -0
  10. data/Makefile +6 -1
  11. data/README.md +57 -12
  12. data/app/controllers/devise/masquerades_controller.rb +119 -70
  13. data/devise_masquerade.gemspec +5 -4
  14. data/features/back.feature +15 -1
  15. data/features/expires_masquerade.feature +36 -0
  16. data/features/multiple_masquerading_models.feature +17 -0
  17. data/features/step_definitions/auth_steps.rb +8 -0
  18. data/features/step_definitions/back_steps.rb +22 -3
  19. data/features/step_definitions/expires_steps.rb +9 -0
  20. data/features/step_definitions/url_helpers_steps.rb +11 -0
  21. data/features/support/env.rb +23 -4
  22. data/features/url_helpers.feature +14 -0
  23. data/lib/devise_masquerade/controllers/helpers.rb +90 -9
  24. data/lib/devise_masquerade/controllers/url_helpers.rb +16 -2
  25. data/lib/devise_masquerade/models/masqueradable.rb +13 -0
  26. data/lib/devise_masquerade/models.rb +9 -0
  27. data/lib/devise_masquerade/rails.rb +14 -4
  28. data/lib/devise_masquerade/routes.rb +11 -8
  29. data/lib/devise_masquerade/version.rb +1 -1
  30. data/lib/devise_masquerade.rb +23 -9
  31. data/spec/controllers/admin/dashboard_controller_spec.rb +3 -4
  32. data/spec/controllers/dashboard_controller_spec.rb +3 -5
  33. data/spec/controllers/devise/masquerades_controller_spec.rb +80 -38
  34. data/spec/controllers/masquerades_tests_controller_spec.rb +57 -0
  35. data/spec/dummy/app/controllers/admin/dashboard_controller.rb +1 -2
  36. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  37. data/spec/dummy/app/controllers/dashboard_controller.rb +5 -2
  38. data/spec/dummy/app/controllers/masquerades_tests_controller.rb +7 -0
  39. data/spec/dummy/app/controllers/students_controller.rb +8 -0
  40. data/spec/dummy/app/models/admin/user.rb +0 -7
  41. data/spec/dummy/app/models/student.rb +3 -0
  42. data/spec/dummy/app/models/user.rb +1 -10
  43. data/spec/dummy/app/views/admin/dashboard/index.html.erb +0 -2
  44. data/spec/dummy/app/views/dashboard/extra_params.html.erb +7 -0
  45. data/spec/dummy/app/views/dashboard/index.html.erb +0 -2
  46. data/spec/dummy/app/views/layouts/application.html.erb +10 -2
  47. data/spec/dummy/app/views/students/_student.html.erb +6 -0
  48. data/spec/dummy/app/views/students/index.html.erb +1 -0
  49. data/spec/dummy/app/views/users/_user.html.erb +1 -1
  50. data/spec/dummy/config/application.rb +2 -0
  51. data/spec/dummy/config/environment.rb +1 -0
  52. data/spec/dummy/config/routes.rb +9 -5
  53. data/spec/dummy/db/.gitignore +1 -0
  54. data/spec/dummy/db/migrate/20121119085620_devise_create_users.rb +1 -1
  55. data/spec/dummy/db/migrate/20140418160449_create_admin_users.rb +1 -1
  56. data/spec/dummy/db/migrate/20191022100000_create_students.rb +14 -0
  57. data/spec/dummy/db/schema.rb +37 -31
  58. data/spec/models/user_spec.rb +3 -30
  59. data/spec/orm/active_record.rb +5 -2
  60. data/spec/spec_helper.rb +3 -3
  61. data/spec/support/factories.rb +13 -9
  62. metadata +61 -19
  63. data/lib/devise_masquerade/model.rb +0 -42
  64. data/spec/controllers/masquerades_controller_spec.rb +0 -42
  65. data/spec/dummy/app/controllers/masquerades_controller.rb +0 -5
@@ -1,52 +1,58 @@
1
- # encoding: UTF-8
2
1
  # This file is auto-generated from the current state of the database. Instead
3
2
  # of editing this file, please use the migrations feature of Active Record to
4
3
  # incrementally modify your database, and then regenerate this schema definition.
5
4
  #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
5
+ # This file is the source Rails uses to define your schema when running `rails
6
+ # db:schema:load`. When creating a new database, `rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
11
10
  #
12
- # It's strongly recommended to check this file into your version control system.
11
+ # It's strongly recommended that you check this file into your version control system.
13
12
 
14
- ActiveRecord::Schema.define(:version => 20140418160449) do
13
+ ActiveRecord::Schema.define(version: 2019_10_22_100000) do
15
14
 
16
- create_table "admin_users", :force => true do |t|
17
- t.string "email", :default => "", :null => false
18
- t.string "encrypted_password", :default => "", :null => false
19
- t.string "reset_password_token"
15
+ create_table "admin_users", force: :cascade do |t|
16
+ t.string "email", default: "", null: false
17
+ t.string "encrypted_password", default: "", null: false
18
+ t.string "reset_password_token"
20
19
  t.datetime "reset_password_sent_at"
21
20
  t.datetime "remember_created_at"
22
- t.integer "sign_in_count", :default => 0
21
+ t.integer "sign_in_count", default: 0
23
22
  t.datetime "current_sign_in_at"
24
23
  t.datetime "last_sign_in_at"
25
- t.string "current_sign_in_ip"
26
- t.string "last_sign_in_ip"
27
- t.datetime "created_at", :null => false
28
- t.datetime "updated_at", :null => false
24
+ t.string "current_sign_in_ip"
25
+ t.string "last_sign_in_ip"
26
+ t.datetime "created_at", null: false
27
+ t.datetime "updated_at", null: false
28
+ t.index ["email"], name: "index_admin_users_on_email", unique: true
29
+ t.index ["reset_password_token"], name: "index_admin_users_on_reset_password_token", unique: true
29
30
  end
30
31
 
31
- add_index "admin_users", ["email"], :name => "index_admin_users_on_email", :unique => true
32
- add_index "admin_users", ["reset_password_token"], :name => "index_admin_users_on_reset_password_token", :unique => true
32
+ create_table "students", force: :cascade do |t|
33
+ t.string "email", default: "", null: false
34
+ t.string "encrypted_password", default: "", null: false
35
+ t.datetime "created_at", null: false
36
+ t.datetime "updated_at", null: false
37
+ t.index "\"reset_password_token\"", name: "index_students_on_reset_password_token", unique: true
38
+ t.index ["email"], name: "index_students_on_email", unique: true
39
+ end
33
40
 
34
- create_table "users", :force => true do |t|
35
- t.string "email", :default => "", :null => false
36
- t.string "encrypted_password", :default => "", :null => false
37
- t.string "reset_password_token"
41
+ create_table "users", force: :cascade do |t|
42
+ t.string "email", default: "", null: false
43
+ t.string "encrypted_password", default: "", null: false
44
+ t.string "reset_password_token"
38
45
  t.datetime "reset_password_sent_at"
39
46
  t.datetime "remember_created_at"
40
- t.integer "sign_in_count", :default => 0
47
+ t.integer "sign_in_count", default: 0
41
48
  t.datetime "current_sign_in_at"
42
49
  t.datetime "last_sign_in_at"
43
- t.string "current_sign_in_ip"
44
- t.string "last_sign_in_ip"
45
- t.datetime "created_at", :null => false
46
- t.datetime "updated_at", :null => false
50
+ t.string "current_sign_in_ip"
51
+ t.string "last_sign_in_ip"
52
+ t.datetime "created_at", null: false
53
+ t.datetime "updated_at", null: false
54
+ t.index ["email"], name: "index_users_on_email", unique: true
55
+ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
47
56
  end
48
57
 
49
- add_index "users", ["email"], :name => "index_users_on_email", :unique => true
50
- add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
51
-
52
58
  end
@@ -3,37 +3,10 @@ require 'spec_helper'
3
3
  describe User do
4
4
  let!(:user) { create(:user) }
5
5
 
6
- describe '#masquerade!' do
6
+ describe '#masquerade_key' do
7
7
  it 'should cache special key on masquerade' do
8
- expect(SecureRandom).to receive(:urlsafe_base64).with(16) { "secure_key" }
9
- user.masquerade!
10
- end
11
- end
12
-
13
- describe '#remove_masquerade_key' do
14
- before { allow(SecureRandom).to receive(:urlsafe_base64) { "secure_key" } }
15
-
16
- let(:key) { 'users:secure_key:masquerade' }
17
-
18
- it 'should be possible to remove cached masquerade key' do
19
- user.masquerade!
20
- expect(Rails.cache.exist?(key)).to eq(true)
21
-
22
- User.remove_masquerade_key!('secure_key')
23
- expect(Rails.cache.exist?(key)).to eq(false)
24
- end
25
- end
26
-
27
- describe '#find_by_masquerade_key' do
28
- it 'should be possible to find user by generate masquerade key' do
29
- user.masquerade!
30
-
31
- allow(Rails.cache).to receive(:read).with("users:#{user.masquerade_key}:masquerade") { user.id }
32
- allow(Rails.cache).to receive(:delete).with("users:#{user.masquerade_key}:masquerade")
33
-
34
- new_user = User.find_by_masquerade_key(user.masquerade_key)
35
-
36
- expect(new_user).to eq(user)
8
+ expect(user).to receive(:to_sgid).with(expires_in: 1.minute, for: 'masquerade') { "secure_key" }
9
+ user.masquerade_key
37
10
  end
38
11
  end
39
12
  end
@@ -1,5 +1,8 @@
1
1
  ActiveRecord::Migration.verbose = false
2
2
  ActiveRecord::Base.logger = Logger.new(nil)
3
3
 
4
- ActiveRecord::Migrator.migrate(File.expand_path("../dummy/db/migrate/", __FILE__))
5
-
4
+ ActiveRecord::MigrationContext.
5
+ new(
6
+ File.expand_path("../../dummy/db/migrate/", __FILE__),
7
+ ActiveRecord::Base.connection.schema_migration
8
+ ).migrate
data/spec/spec_helper.rb CHANGED
@@ -6,7 +6,7 @@ require 'devise_masquerade'
6
6
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
7
  require 'rails/test_help'
8
8
  require 'rspec/rails'
9
- require 'factory_girl'
9
+ require 'factory_bot'
10
10
  require 'database_cleaner'
11
11
 
12
12
  Rails.backtrace_cleaner.remove_silencers!
@@ -18,9 +18,9 @@ RSpec.configure do |config|
18
18
  require 'rspec/expectations'
19
19
  config.include RSpec::Matchers
20
20
 
21
- config.include Devise::TestHelpers, :type => :controller
21
+ config.include Devise::Test::ControllerHelpers, :type => :controller
22
22
  config.include Warden::Test::Helpers
23
- config.include FactoryGirl::Syntax::Methods
23
+ config.include FactoryBot::Syntax::Methods
24
24
  config.include Authentication
25
25
 
26
26
  config.raise_errors_for_deprecations!
@@ -1,16 +1,20 @@
1
- FactoryGirl.define do
2
- sequence(:email) { |i| "john#{i}@example.com" }
3
-
1
+ FactoryBot.define do
4
2
  factory :user do
5
- email
6
- password 'password'
7
- password_confirmation 'password'
3
+ sequence(:email) { |i| "user#{i}@example.com" }
4
+ password { 'password' }
5
+ password_confirmation { 'password' }
8
6
  end
9
7
 
10
8
  factory :admin_user, :class => 'Admin::User' do
11
- email
12
- password 'password'
13
- password_confirmation 'password'
9
+ sequence(:email) { |i| "admin#{i}@example.com" }
10
+ password { 'password' }
11
+ password_confirmation { 'password' }
12
+ end
13
+
14
+ factory :student do
15
+ sequence(:email) { |i| "student#{i}@example.com" }
16
+ password { 'password' }
17
+ password_confirmation { 'password' }
14
18
  end
15
19
  end
16
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_masquerade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandr Korsak
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-23 00:00:00.000000000 Z
11
+ date: 2022-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,42 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0
19
+ version: 2.0.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.0
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
33
+ version: 5.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: 5.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: devise
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.1.0
47
+ version: 4.7.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 2.1.0
54
+ version: 4.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: globalid
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.6
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.3.6
55
69
  description: devise masquerade library
56
70
  email:
57
71
  - alex.korsak@gmail.com
@@ -59,12 +73,16 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
76
+ - ".github/FUNDING.yml"
77
+ - ".github/workflows/brakeman-analysis.yml"
78
+ - ".github/workflows/rubocop-analysis.yml"
62
79
  - ".gitignore"
63
80
  - ".rspec"
64
81
  - ".ruby-version"
65
82
  - ".rvmrc"
66
83
  - ".travis.yml"
67
84
  - Gemfile
85
+ - Gemfile.lock
68
86
  - Guardfile
69
87
  - LICENSE.txt
70
88
  - Makefile
@@ -74,13 +92,19 @@ files:
74
92
  - config/environment.rb
75
93
  - devise_masquerade.gemspec
76
94
  - features/back.feature
95
+ - features/expires_masquerade.feature
96
+ - features/multiple_masquerading_models.feature
77
97
  - features/step_definitions/auth_steps.rb
78
98
  - features/step_definitions/back_steps.rb
99
+ - features/step_definitions/expires_steps.rb
100
+ - features/step_definitions/url_helpers_steps.rb
79
101
  - features/support/env.rb
102
+ - features/url_helpers.feature
80
103
  - lib/devise_masquerade.rb
81
104
  - lib/devise_masquerade/controllers/helpers.rb
82
105
  - lib/devise_masquerade/controllers/url_helpers.rb
83
- - lib/devise_masquerade/model.rb
106
+ - lib/devise_masquerade/models.rb
107
+ - lib/devise_masquerade/models/masqueradable.rb
84
108
  - lib/devise_masquerade/rails.rb
85
109
  - lib/devise_masquerade/routes.rb
86
110
  - lib/devise_masquerade/version.rb
@@ -88,20 +112,25 @@ files:
88
112
  - spec/controllers/admin/dashboard_controller_spec.rb
89
113
  - spec/controllers/dashboard_controller_spec.rb
90
114
  - spec/controllers/devise/masquerades_controller_spec.rb
91
- - spec/controllers/masquerades_controller_spec.rb
115
+ - spec/controllers/masquerades_tests_controller_spec.rb
92
116
  - spec/dummy/Rakefile
93
117
  - spec/dummy/app/controllers/admin/dashboard_controller.rb
94
118
  - spec/dummy/app/controllers/application_controller.rb
95
119
  - spec/dummy/app/controllers/dashboard_controller.rb
96
- - spec/dummy/app/controllers/masquerades_controller.rb
120
+ - spec/dummy/app/controllers/masquerades_tests_controller.rb
121
+ - spec/dummy/app/controllers/students_controller.rb
97
122
  - spec/dummy/app/controllers/users/masquerades_controller.rb
98
123
  - spec/dummy/app/helpers/application_helper.rb
99
124
  - spec/dummy/app/models/admin.rb
100
125
  - spec/dummy/app/models/admin/user.rb
126
+ - spec/dummy/app/models/student.rb
101
127
  - spec/dummy/app/models/user.rb
102
128
  - spec/dummy/app/views/admin/dashboard/index.html.erb
129
+ - spec/dummy/app/views/dashboard/extra_params.html.erb
103
130
  - spec/dummy/app/views/dashboard/index.html.erb
104
131
  - spec/dummy/app/views/layouts/application.html.erb
132
+ - spec/dummy/app/views/students/_student.html.erb
133
+ - spec/dummy/app/views/students/index.html.erb
105
134
  - spec/dummy/app/views/users/_user.html.erb
106
135
  - spec/dummy/config.ru
107
136
  - spec/dummy/config/application.rb
@@ -120,8 +149,10 @@ files:
120
149
  - spec/dummy/config/locales/devise.en.yml
121
150
  - spec/dummy/config/locales/en.yml
122
151
  - spec/dummy/config/routes.rb
152
+ - spec/dummy/db/.gitignore
123
153
  - spec/dummy/db/migrate/20121119085620_devise_create_users.rb
124
154
  - spec/dummy/db/migrate/20140418160449_create_admin_users.rb
155
+ - spec/dummy/db/migrate/20191022100000_create_students.rb
125
156
  - spec/dummy/db/schema.rb
126
157
  - spec/dummy/db/seeds.rb
127
158
  - spec/dummy/public/.empty
@@ -131,11 +162,11 @@ files:
131
162
  - spec/spec_helper.rb
132
163
  - spec/support/authentication.rb
133
164
  - spec/support/factories.rb
134
- homepage: http://github.com/oivoodoo/devise_masquerade/
165
+ homepage: http://github.com/oivoodoo/devise_masquerade
135
166
  licenses:
136
167
  - MIT
137
168
  metadata: {}
138
- post_install_message:
169
+ post_install_message:
139
170
  rdoc_options: []
140
171
  require_paths:
141
172
  - lib
@@ -150,33 +181,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
181
  - !ruby/object:Gem::Version
151
182
  version: '0'
152
183
  requirements: []
153
- rubyforge_project:
154
- rubygems_version: 2.5.2
155
- signing_key:
184
+ rubygems_version: 3.1.4
185
+ signing_key:
156
186
  specification_version: 4
157
187
  summary: use for login as functionallity on your admin users pages
158
188
  test_files:
159
189
  - features/back.feature
190
+ - features/expires_masquerade.feature
191
+ - features/multiple_masquerading_models.feature
160
192
  - features/step_definitions/auth_steps.rb
161
193
  - features/step_definitions/back_steps.rb
194
+ - features/step_definitions/expires_steps.rb
195
+ - features/step_definitions/url_helpers_steps.rb
162
196
  - features/support/env.rb
197
+ - features/url_helpers.feature
163
198
  - spec/controllers/admin/dashboard_controller_spec.rb
164
199
  - spec/controllers/dashboard_controller_spec.rb
165
200
  - spec/controllers/devise/masquerades_controller_spec.rb
166
- - spec/controllers/masquerades_controller_spec.rb
201
+ - spec/controllers/masquerades_tests_controller_spec.rb
167
202
  - spec/dummy/Rakefile
168
203
  - spec/dummy/app/controllers/admin/dashboard_controller.rb
169
204
  - spec/dummy/app/controllers/application_controller.rb
170
205
  - spec/dummy/app/controllers/dashboard_controller.rb
171
- - spec/dummy/app/controllers/masquerades_controller.rb
206
+ - spec/dummy/app/controllers/masquerades_tests_controller.rb
207
+ - spec/dummy/app/controllers/students_controller.rb
172
208
  - spec/dummy/app/controllers/users/masquerades_controller.rb
173
209
  - spec/dummy/app/helpers/application_helper.rb
174
210
  - spec/dummy/app/models/admin.rb
175
211
  - spec/dummy/app/models/admin/user.rb
212
+ - spec/dummy/app/models/student.rb
176
213
  - spec/dummy/app/models/user.rb
177
214
  - spec/dummy/app/views/admin/dashboard/index.html.erb
215
+ - spec/dummy/app/views/dashboard/extra_params.html.erb
178
216
  - spec/dummy/app/views/dashboard/index.html.erb
179
217
  - spec/dummy/app/views/layouts/application.html.erb
218
+ - spec/dummy/app/views/students/_student.html.erb
219
+ - spec/dummy/app/views/students/index.html.erb
180
220
  - spec/dummy/app/views/users/_user.html.erb
181
221
  - spec/dummy/config.ru
182
222
  - spec/dummy/config/application.rb
@@ -195,8 +235,10 @@ test_files:
195
235
  - spec/dummy/config/locales/devise.en.yml
196
236
  - spec/dummy/config/locales/en.yml
197
237
  - spec/dummy/config/routes.rb
238
+ - spec/dummy/db/.gitignore
198
239
  - spec/dummy/db/migrate/20121119085620_devise_create_users.rb
199
240
  - spec/dummy/db/migrate/20140418160449_create_admin_users.rb
241
+ - spec/dummy/db/migrate/20191022100000_create_students.rb
200
242
  - spec/dummy/db/schema.rb
201
243
  - spec/dummy/db/seeds.rb
202
244
  - spec/dummy/public/.empty
@@ -1,42 +0,0 @@
1
- module Devise
2
- module Models
3
- module Masqueradable
4
- def self.included(base)
5
- base.class_eval do
6
- attr_reader :masquerade_key
7
-
8
- include InstanceMethods
9
- extend ClassMethods
10
- end
11
- end
12
-
13
- module InstanceMethods
14
- def masquerade!
15
- @masquerade_key = SecureRandom.urlsafe_base64(Devise.masquerade_key_size)
16
- cache_key = self.class.cache_masquerade_key_by(@masquerade_key)
17
- Rails.cache.write(cache_key, id, :expires_in => Devise.masquerade_expires_in)
18
- end
19
- end
20
-
21
- module ClassMethods
22
- def cache_masquerade_key_by(key)
23
- "#{self.name.pluralize.underscore}:#{key}:masquerade"
24
- end
25
-
26
- def remove_masquerade_key!(key)
27
- Rails.cache.delete(cache_masquerade_key_by(key))
28
- end
29
-
30
- def find_by_masquerade_key(key)
31
- id = Rails.cache.read(cache_masquerade_key_by(key))
32
-
33
- # clean up the cached masquerade key value
34
- remove_masquerade_key!(key)
35
-
36
- where(id: id).first
37
- end
38
- end # ClassMethods
39
- end
40
- end
41
- end
42
-
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe MasqueradesController, type: :controller do
4
- before { @request.env['devise.mapping'] = Devise.mappings[:user] }
5
-
6
- context 'no access for masquerade' do
7
- before do
8
- session.clear
9
- allow_any_instance_of(MasqueradesController).to receive(:masquerade_authorized?) { false }
10
- end
11
-
12
- before { logged_in }
13
-
14
- let(:mask) { create(:user) }
15
-
16
- before { get :show, :id => mask.to_param }
17
-
18
- it { expect(response.status).to eq(403) }
19
- it { expect(session.keys).not_to include('devise_masquerade_user') }
20
- it { expect(session["warden.user.user.key"].first.first).not_to eq(mask.id) }
21
- end
22
-
23
- context 'access for masquerade' do
24
- before do
25
- session.clear
26
- allow_any_instance_of(MasqueradesController).to receive(:masquerade_authorized?) { true }
27
- end
28
-
29
- before { logged_in }
30
-
31
- let(:mask) { create(:user) }
32
-
33
- before do
34
- expect(SecureRandom).to receive(:urlsafe_base64) { "secure_key" }
35
- get :show, :id => mask.to_param
36
- end
37
-
38
- it { expect(response.status).to eq(302) }
39
- it { expect(session.keys).to include('devise_masquerade_user') }
40
- it { expect(session["warden.user.user.key"].first.first).to eq(mask.id) }
41
- end
42
- end
@@ -1,5 +0,0 @@
1
- class MasqueradesController < Devise::MasqueradesController
2
- def show
3
- super
4
- end
5
- end