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.
- checksums.yaml +5 -5
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/brakeman-analysis.yml +44 -0
- data/.github/workflows/rubocop-analysis.yml +39 -0
- data/.gitignore +1 -2
- data/.ruby-version +1 -1
- data/.travis.yml +2 -7
- data/Gemfile +16 -10
- data/Gemfile.lock +310 -0
- data/Makefile +6 -1
- data/README.md +57 -12
- data/app/controllers/devise/masquerades_controller.rb +119 -70
- data/devise_masquerade.gemspec +5 -4
- data/features/back.feature +15 -1
- data/features/expires_masquerade.feature +36 -0
- data/features/multiple_masquerading_models.feature +17 -0
- data/features/step_definitions/auth_steps.rb +8 -0
- data/features/step_definitions/back_steps.rb +22 -3
- data/features/step_definitions/expires_steps.rb +9 -0
- data/features/step_definitions/url_helpers_steps.rb +11 -0
- data/features/support/env.rb +23 -4
- data/features/url_helpers.feature +14 -0
- data/lib/devise_masquerade/controllers/helpers.rb +90 -9
- data/lib/devise_masquerade/controllers/url_helpers.rb +16 -2
- data/lib/devise_masquerade/models/masqueradable.rb +13 -0
- data/lib/devise_masquerade/models.rb +9 -0
- data/lib/devise_masquerade/rails.rb +14 -4
- data/lib/devise_masquerade/routes.rb +11 -8
- data/lib/devise_masquerade/version.rb +1 -1
- data/lib/devise_masquerade.rb +23 -9
- data/spec/controllers/admin/dashboard_controller_spec.rb +3 -4
- data/spec/controllers/dashboard_controller_spec.rb +3 -5
- data/spec/controllers/devise/masquerades_controller_spec.rb +80 -38
- data/spec/controllers/masquerades_tests_controller_spec.rb +57 -0
- data/spec/dummy/app/controllers/admin/dashboard_controller.rb +1 -2
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/dashboard_controller.rb +5 -2
- data/spec/dummy/app/controllers/masquerades_tests_controller.rb +7 -0
- data/spec/dummy/app/controllers/students_controller.rb +8 -0
- data/spec/dummy/app/models/admin/user.rb +0 -7
- data/spec/dummy/app/models/student.rb +3 -0
- data/spec/dummy/app/models/user.rb +1 -10
- data/spec/dummy/app/views/admin/dashboard/index.html.erb +0 -2
- data/spec/dummy/app/views/dashboard/extra_params.html.erb +7 -0
- data/spec/dummy/app/views/dashboard/index.html.erb +0 -2
- data/spec/dummy/app/views/layouts/application.html.erb +10 -2
- data/spec/dummy/app/views/students/_student.html.erb +6 -0
- data/spec/dummy/app/views/students/index.html.erb +1 -0
- data/spec/dummy/app/views/users/_user.html.erb +1 -1
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/environment.rb +1 -0
- data/spec/dummy/config/routes.rb +9 -5
- data/spec/dummy/db/.gitignore +1 -0
- data/spec/dummy/db/migrate/20121119085620_devise_create_users.rb +1 -1
- data/spec/dummy/db/migrate/20140418160449_create_admin_users.rb +1 -1
- data/spec/dummy/db/migrate/20191022100000_create_students.rb +14 -0
- data/spec/dummy/db/schema.rb +37 -31
- data/spec/models/user_spec.rb +3 -30
- data/spec/orm/active_record.rb +5 -2
- data/spec/spec_helper.rb +3 -3
- data/spec/support/factories.rb +13 -9
- metadata +61 -19
- data/lib/devise_masquerade/model.rb +0 -42
- data/spec/controllers/masquerades_controller_spec.rb +0 -42
- data/spec/dummy/app/controllers/masquerades_controller.rb +0 -5
data/spec/dummy/db/schema.rb
CHANGED
@@ -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
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# from scratch.
|
10
|
-
#
|
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
|
11
|
+
# It's strongly recommended that you check this file into your version control system.
|
13
12
|
|
14
|
-
ActiveRecord::Schema.define(:
|
13
|
+
ActiveRecord::Schema.define(version: 2019_10_22_100000) do
|
15
14
|
|
16
|
-
create_table "admin_users", :
|
17
|
-
t.string
|
18
|
-
t.string
|
19
|
-
t.string
|
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
|
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
|
26
|
-
t.string
|
27
|
-
t.datetime "created_at",
|
28
|
-
t.datetime "updated_at",
|
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
|
-
|
32
|
-
|
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", :
|
35
|
-
t.string
|
36
|
-
t.string
|
37
|
-
t.string
|
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
|
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
|
44
|
-
t.string
|
45
|
-
t.datetime "created_at",
|
46
|
-
t.datetime "updated_at",
|
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
|
data/spec/models/user_spec.rb
CHANGED
@@ -3,37 +3,10 @@ require 'spec_helper'
|
|
3
3
|
describe User do
|
4
4
|
let!(:user) { create(:user) }
|
5
5
|
|
6
|
-
describe '#
|
6
|
+
describe '#masquerade_key' do
|
7
7
|
it 'should cache special key on masquerade' do
|
8
|
-
expect(
|
9
|
-
user.
|
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
|
data/spec/orm/active_record.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
ActiveRecord::Migration.verbose = false
|
2
2
|
ActiveRecord::Base.logger = Logger.new(nil)
|
3
3
|
|
4
|
-
ActiveRecord::
|
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 '
|
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::
|
21
|
+
config.include Devise::Test::ControllerHelpers, :type => :controller
|
22
22
|
config.include Warden::Test::Helpers
|
23
|
-
config.include
|
23
|
+
config.include FactoryBot::Syntax::Methods
|
24
24
|
config.include Authentication
|
25
25
|
|
26
26
|
config.raise_errors_for_deprecations!
|
data/spec/support/factories.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
|
-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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/
|
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/
|
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/
|
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
|
-
|
154
|
-
|
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/
|
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/
|
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
|