devise_masquerade 1.2.0 → 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.

Potentially problematic release.


This version of devise_masquerade might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3d9619a76cbee988888a5168f0cf57b74a59fd7b5c3cfbbac3113458c5cb60c
4
- data.tar.gz: 9d04f07b596f095533e4e766f0ed1e0672f0078ae5fcecf696571326ed3d3b8d
3
+ metadata.gz: 9b0f25fa4c2e5b41336a6b39bb4eab9dc8cc9a90544de0dffec1cd95d2b8b7f6
4
+ data.tar.gz: 96073dd0fb8c13658d7f9b6e156aeb9a9fd90d0aa3e5360fe8416e698b00ceb6
5
5
  SHA512:
6
- metadata.gz: 82d09ecc8063ce935f4125d7c8ecd73772a5d7ad5e5a9e6a909cb18e899793229a473ffdceb6a1c5a1eb36ddd244c2646f248e205f62b4d0c70ad47ef1cadbe9
7
- data.tar.gz: 8c9456b986f8761a5258d1099777d0e8a0d71974de41e1e220c50e6cd7cfec362956d5f41b7ab1466cddbc7d49c350c04febe852f9920bca99a27c1e043ce024
6
+ metadata.gz: 243f3b4580c80bbf3c281df44bb7fba95d18ac67e0a547e925eb50d784bf05d7364c64ad439c45486473d38481f22b45aa44a9d152eddd67759e6792cf956bb4
7
+ data.tar.gz: 3f48a1f7d0a79f2b220380e6aa357ae3a9d937d817b00040b106b7e539d2ed651c61aec2da24626d8a58c9626a30ee958cb752dc779ed3195e09cf1b91177cdd
@@ -0,0 +1 @@
1
+ patreon: oivoodoo
@@ -0,0 +1,44 @@
1
+ # This workflow integrates Brakeman with GitHub's Code Scanning feature
2
+ # Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications
3
+
4
+ name: Brakeman Scan
5
+
6
+ # This section configures the trigger for the workflow. Feel free to customize depending on your convention
7
+ on:
8
+ push:
9
+ branches: [ "master", "main" ]
10
+ pull_request:
11
+ branches: [ "master", "main" ]
12
+
13
+ jobs:
14
+ brakeman-scan:
15
+ name: Brakeman Scan
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ # Checkout the repository to the GitHub Actions runner
19
+ - name: Checkout
20
+ uses: actions/checkout@v2
21
+
22
+ # Customize the ruby version depending on your needs
23
+ - name: Setup Ruby
24
+ uses: actions/setup-ruby@v1
25
+ with:
26
+ ruby-version: '2.7'
27
+
28
+ - name: Setup Brakeman
29
+ env:
30
+ BRAKEMAN_VERSION: '4.10' # SARIF support is provided in Brakeman version 4.10+
31
+ run: |
32
+ gem install brakeman --version $BRAKEMAN_VERSION
33
+
34
+ # Execute Brakeman CLI and generate a SARIF output with the security issues identified during the analysis
35
+ - name: Scan
36
+ continue-on-error: true
37
+ run: |
38
+ brakeman -f sarif -o output.sarif.json .
39
+
40
+ # Upload the SARIF file generated in the previous step
41
+ - name: Upload SARIF
42
+ uses: github/codeql-action/upload-sarif@v1
43
+ with:
44
+ sarif_file: output.sarif.json
@@ -0,0 +1,39 @@
1
+ name: "Rubocop"
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ rubocop:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v2
14
+
15
+ # If running on a self-hosted runner, check it meets the requirements
16
+ # listed at https://github.com/ruby/setup-ruby#using-self-hosted-runners
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 2.6
21
+
22
+ # This step is not necessary if you add the gem to your Gemfile
23
+ - name: Install Code Scanning integration
24
+ run: bundle add code-scanning-rubocop --version 0.3.0 --skip-install
25
+
26
+ - name: Install dependencies
27
+ run: bundle install
28
+
29
+ - name: Rubocop run
30
+ run: |
31
+ bash -c "
32
+ bundle exec rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
33
+ [[ $? -ne 2 ]]
34
+ "
35
+
36
+ - name: Upload Sarif output
37
+ uses: github/codeql-action/upload-sarif@v1
38
+ with:
39
+ sarif_file: rubocop.sarif
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.0
1
+ 2.7.2
data/Gemfile CHANGED
@@ -36,4 +36,6 @@ group :test do
36
36
  gem 'selenium-webdriver'
37
37
  gem 'chromedriver-helper'
38
38
  gem 'launchy'
39
+
40
+ gem "nokogiri", ">= 1.10.8"
39
41
  end
data/Gemfile.lock CHANGED
@@ -52,8 +52,9 @@ GIT
52
52
  PATH
53
53
  remote: .
54
54
  specs:
55
- devise_masquerade (1.2.0)
55
+ devise_masquerade (1.3.0)
56
56
  devise (>= 4.7.0)
57
+ globalid (>= 0.3.6)
57
58
  railties (>= 5.2.0)
58
59
 
59
60
  GEM
@@ -97,7 +98,7 @@ GEM
97
98
  archive-zip (0.12.0)
98
99
  io-like (~> 0.3.0)
99
100
  backports (3.15.0)
100
- bcrypt (3.1.13)
101
+ bcrypt (3.1.16)
101
102
  bson (1.12.5)
102
103
  bson_ext (1.12.5)
103
104
  bson (~> 1.12.5)
@@ -141,7 +142,7 @@ GEM
141
142
  cucumber-tag_expressions (1.1.1)
142
143
  cucumber-wire (0.0.1)
143
144
  database_cleaner (1.0.1)
144
- devise (4.7.1)
145
+ devise (4.7.3)
145
146
  bcrypt (~> 3.0)
146
147
  orm_adapter (~> 0.1)
147
148
  railties (>= 4.1.0)
@@ -189,7 +190,7 @@ GEM
189
190
  listen (3.2.0)
190
191
  rb-fsevent (~> 0.10, >= 0.10.3)
191
192
  rb-inotify (~> 0.9, >= 0.9.10)
192
- loofah (2.3.0)
193
+ loofah (2.3.1)
193
194
  crass (~> 1.0.2)
194
195
  nokogiri (>= 1.5.9)
195
196
  lumberjack (1.0.13)
@@ -205,7 +206,7 @@ GEM
205
206
  multi_json (1.14.1)
206
207
  multi_test (0.1.2)
207
208
  nenv (0.3.0)
208
- nokogiri (1.10.4)
209
+ nokogiri (1.10.8)
209
210
  mini_portile2 (~> 2.4.0)
210
211
  notiffany (0.1.3)
211
212
  nenv (~> 0.1)
@@ -219,7 +220,7 @@ GEM
219
220
  byebug (~> 11.0)
220
221
  pry (~> 0.10)
221
222
  public_suffix (4.0.1)
222
- rack (2.0.7)
223
+ rack (2.2.3)
223
224
  rack-test (1.1.0)
224
225
  rack (>= 1.0, < 3)
225
226
  rails-dom-testing (2.0.3)
@@ -238,7 +239,7 @@ GEM
238
239
  rb-inotify (0.10.0)
239
240
  ffi (~> 1.0)
240
241
  regexp_parser (1.6.0)
241
- responders (3.0.0)
242
+ responders (3.0.1)
242
243
  actionpack (>= 5.0)
243
244
  railties (>= 5.0)
244
245
  rubyzip (2.0.0)
@@ -259,8 +260,8 @@ GEM
259
260
  thread_safe (0.3.6)
260
261
  tzinfo (1.2.5)
261
262
  thread_safe (~> 0.1)
262
- warden (1.2.8)
263
- rack (>= 2.0.6)
263
+ warden (1.2.9)
264
+ rack (>= 2.0.9)
264
265
  xpath (3.2.0)
265
266
  nokogiri (~> 1.8)
266
267
  zeitwerk (2.2.0)
@@ -285,6 +286,7 @@ DEPENDENCIES
285
286
  guard-cucumber
286
287
  guard-rspec (~> 4.7)
287
288
  launchy
289
+ nokogiri (>= 1.10.8)
288
290
  pry
289
291
  pry-byebug
290
292
  rb-fsevent
@@ -300,4 +302,4 @@ DEPENDENCIES
300
302
  test-unit
301
303
 
302
304
  BUNDLED WITH
303
- 2.0.2
305
+ 2.1.4
data/README.md CHANGED
@@ -179,6 +179,14 @@ in `routes.rb`:
179
179
  And check http://localhost:3000/, use for login user1@example.com and
180
180
  'password'
181
181
 
182
+ ## Troubleshooting
183
+
184
+ Are you working in development mode and wondering why masquerade attempts result in a [Receiving "You are already signed in" flash[:error]](https://github.com/oivoodoo/devise_masquerade/issues/58) message? `Filter chain halted as :require_no_authentication rendered or redirected` showing up in your logfile? Chances are that you need to enable caching:
185
+
186
+ rails dev:cache
187
+
188
+ This is a one-time operation, so you can set it and forget it. Should you ever need to disable caching in development, you can re-run the command as required.
189
+
182
190
  ## Test project
183
191
 
184
192
  make test
@@ -28,15 +28,9 @@ class Devise::MasqueradesController < DeviseController
28
28
  end
29
29
 
30
30
  def back
31
- user_id = session[session_key]
31
+ self.resource = find_owner_resource
32
32
 
33
- resource = if user_id.present?
34
- masquerading_resource_class.to_adapter.find_first(:id => user_id)
35
- else
36
- send(:"current_#{masquerading_resource_name}")
37
- end
38
-
39
- if masquerading_resource_class != masqueraded_resource_class
33
+ if resource.class != masqueraded_resource_class
40
34
  sign_out(send("current_#{masqueraded_resource_name}"))
41
35
  end
42
36
 
@@ -57,10 +51,11 @@ class Devise::MasqueradesController < DeviseController
57
51
  end
58
52
 
59
53
  def find_resource
60
- masqueraded_resource_class.
61
- find_by_masquerade_key(params[Devise.masquerade_param]).
62
- where(id: params[:id]).
63
- first
54
+ GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
55
+ end
56
+
57
+ def find_owner_resource
58
+ GlobalID::Locator.locate_signed(Rails.cache.read(session_key), for: 'masquerade')
64
59
  end
65
60
 
66
61
  def go_back(user, path:)
@@ -126,15 +121,20 @@ class Devise::MasqueradesController < DeviseController
126
121
  end
127
122
 
128
123
  def save_masquerade_owner_session
124
+ resource_gid = send("current_#{masquerading_resource_name}").to_sgid(
125
+ expires_in: Devise.masquerade_expires_in, for: 'masquerade')
126
+ # skip sharing owner id via session
127
+ Rails.cache.write(session_key, resource_gid, expires_in: Devise.masquerade_expires_in)
128
+
129
129
  unless session.key?(session_key)
130
- session[session_key] = send("current_#{masquerading_resource_name}").id
131
130
  session[session_key_masquerading_resource_class] = masquerading_resource_class.name
132
131
  session[session_key_masqueraded_resource_class] = masqueraded_resource_class.name
133
132
  end
134
133
  end
135
134
 
136
135
  def cleanup_masquerade_owner_session
137
- session.delete(session_key)
136
+ Rails.cache.delete(session_key)
137
+
138
138
  session.delete(session_key_masqueraded_resource_class)
139
139
  session.delete(session_key_masquerading_resource_class)
140
140
  end
@@ -24,4 +24,5 @@ Gem::Specification.new do |gem|
24
24
 
25
25
  gem.add_runtime_dependency('railties', '>= 5.2.0')
26
26
  gem.add_runtime_dependency('devise', '>= 4.7.0')
27
+ gem.add_runtime_dependency('globalid', '>= 0.3.6')
27
28
  end
@@ -20,7 +20,7 @@ module DeviseMasquerade
20
20
  end
21
21
  return unless klass
22
22
 
23
- resource = klass.find_by_masquerade_key(params["#{Devise.masquerade_param}"]).first
23
+ resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
24
24
 
25
25
  if resource
26
26
  masquerade_sign_in(resource)
@@ -30,7 +30,7 @@ module DeviseMasquerade
30
30
  def masquerade_#{name}!
31
31
  return if params["#{Devise.masquerade_param}"].blank?
32
32
 
33
- resource = ::#{class_name}.find_by_masquerade_key(params["#{Devise.masquerade_param}"]).first
33
+ resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
34
34
 
35
35
  if resource
36
36
  masquerade_sign_in(resource)
@@ -38,12 +38,12 @@ module DeviseMasquerade
38
38
  end
39
39
 
40
40
  def #{name}_masquerade?
41
- session[:"devise_masquerade_#{name}"].present?
41
+ ::Rails.cache.exist?(:"devise_masquerade_#{name}").present?
42
42
  end
43
43
 
44
44
  def #{name}_masquerade_owner
45
45
  return nil unless send(:#{name}_masquerade?)
46
- ::#{class_name}.to_adapter.find_first(id: session[:"devise_masquerade_#{name}"])
46
+ GlobalID::Locator.locate_signed(Rails.cache.read(:"devise_masquerade_#{name}"), for: 'masquerade')
47
47
  end
48
48
 
49
49
  private
@@ -10,7 +10,6 @@ module DeviseMasquerade
10
10
  opts = args.first || {}
11
11
  opts.merge!(masqueraded_resource_class: resource.class.name)
12
12
 
13
- resource.masquerade!
14
13
  opts.merge!(Devise.masquerade_param => resource.masquerade_key)
15
14
 
16
15
  send("#{scope}_masquerade_path", resource, opts, *args)
@@ -4,44 +4,10 @@ module DeviseMasquerade
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- attr_reader :masquerade_key
8
-
9
- def masquerade!
10
- @masquerade_key = SecureRandom.urlsafe_base64(
11
- Devise.masquerade_key_size)
12
- cache_key = self.class.cache_masquerade_key_by(@masquerade_key)
13
- ::Rails.cache.write(
14
- cache_key, id, expires_in: Devise.masquerade_expires_in)
7
+ def masquerade_key
8
+ to_sgid(expires_in: Devise.masquerade_expires_in, for: 'masquerade')
15
9
  end
16
10
  end
17
-
18
- module ClassMethods
19
- def cache_masquerade_key_by(key)
20
- "#{self.name.pluralize.underscore}:#{key}:masquerade"
21
- end
22
-
23
- def remove_masquerade_key!(key)
24
- ::Rails.cache.delete(cache_masquerade_key_by(key))
25
- end
26
-
27
- def find_by_masquerade_key(key)
28
- id = ::Rails.cache.read(cache_masquerade_key_by(key))
29
-
30
- # clean up the cached masquerade key value
31
- remove_masquerade_key!(key)
32
-
33
- where(id: id)
34
- end
35
-
36
- def find_by_masquerade_key(key)
37
- id = ::Rails.cache.read(cache_masquerade_key_by(key))
38
-
39
- # clean up the cached masquerade key value
40
- remove_masquerade_key!(key)
41
-
42
- where(id: id)
43
- end
44
- end # ClassMethods
45
11
  end
46
12
  end
47
13
  end
@@ -1,3 +1,3 @@
1
1
  module DeviseMasquerade
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
@@ -8,8 +8,6 @@ describe Admin::DashboardController, type: :controller do
8
8
  let!(:mask) { create(:admin_user) }
9
9
 
10
10
  before do
11
- mask.masquerade!
12
-
13
11
  get :index, params: { masquerade: mask.masquerade_key, masqueraded_resource_class: 'Admin::User' }
14
12
  end
15
13
 
@@ -8,8 +8,6 @@ describe DashboardController, type: :controller do
8
8
  let!(:mask) { create(:user) }
9
9
 
10
10
  before do
11
- mask.masquerade!
12
-
13
11
  get :index, params: { masquerade: mask.masquerade_key }
14
12
  end
15
13
 
@@ -10,13 +10,11 @@ describe Devise::MasqueradesController, type: :controller do
10
10
  context 'with masqueradable_class param' do
11
11
  let(:mask) { create(:student) }
12
12
 
13
- before { mask.masquerade! }
14
-
15
13
  before do
16
14
  get :show, params: { id: mask.to_param, masqueraded_resource_class: mask.class.name, masquerade: mask.masquerade_key }
17
15
  end
18
16
 
19
- it { expect(session.keys).to include('devise_masquerade_student') }
17
+ it { expect(Rails.cache.read('devise_masquerade_student')).to be }
20
18
 
21
19
  it 'should have warden keys defined' do
22
20
  expect(session["warden.user.student.key"].first.first).to eq(mask.id)
@@ -28,13 +26,11 @@ describe Devise::MasqueradesController, type: :controller do
28
26
  describe '#masquerade user' do
29
27
  let(:mask) { create(:user) }
30
28
 
31
- before { mask.masquerade! }
32
-
33
29
  before do
34
30
  get :show, params: { id: mask.to_param, masquerade: mask.masquerade_key }
35
31
  end
36
32
 
37
- it { expect(session.keys).to include('devise_masquerade_user') }
33
+ it { expect(Rails.cache.read('devise_masquerade_user')).to be }
38
34
  it { expect(session["warden.user.user.key"].first.first).to eq(mask.id) }
39
35
  it { should redirect_to('/') }
40
36
 
@@ -43,7 +39,7 @@ describe Devise::MasqueradesController, type: :controller do
43
39
 
44
40
  it { should redirect_to(masquerade_page) }
45
41
  it { expect(current_user.reload).to eq(@user) }
46
- it { expect(session.keys).not_to include('devise_masquerade_user') }
42
+ it { expect(Rails.cache.read('devise_masquerade_user')).not_to be }
47
43
  end
48
44
  end
49
45
 
@@ -55,8 +51,6 @@ describe Devise::MasqueradesController, type: :controller do
55
51
 
56
52
  after { Devise.masquerade_routes_back = false }
57
53
 
58
- before { mask.masquerade! }
59
-
60
54
  context 'show' do
61
55
  context 'with http referrer' do
62
56
  before do
@@ -80,13 +74,19 @@ describe Devise::MasqueradesController, type: :controller do
80
74
  end # context
81
75
 
82
76
  context 'and back' do
83
- before { get :back }
77
+ before do
78
+ get :show, params: { id: mask.to_param, masquerade: mask.masquerade_key }
79
+
80
+ get :back
81
+ end
84
82
 
85
83
  it { should redirect_to(masquerade_page) }
86
84
  end # context
87
85
 
88
86
  context 'and back fallback if http_referer not present' do
89
87
  before do
88
+ get :show, params: { id: mask.to_param, masquerade: mask.masquerade_key }
89
+
90
90
  @request.env['HTTP_REFERER'] = 'previous_location'
91
91
  get :back
92
92
  end
@@ -13,12 +13,10 @@ describe MasqueradesTestsController, type: :controller do
13
13
 
14
14
  let(:mask) { create(:user) }
15
15
 
16
- before { mask.masquerade! }
17
-
18
16
  before { get :show, params: { id: mask.to_param, masquerade: mask.masquerade_key } }
19
17
 
20
18
  it { expect(response.status).to eq(403) }
21
- it { expect(session.keys).not_to include('devise_masquerade_user') }
19
+ it { expect(Rails.cache.read('devise_masquerade_user')).not_to be }
22
20
  it { expect(session['warden.user.user.key'].first.first).not_to eq(mask.id) }
23
21
  end
24
22
 
@@ -32,14 +30,12 @@ describe MasqueradesTestsController, type: :controller do
32
30
 
33
31
  let(:mask) { create(:user) }
34
32
 
35
- before { mask.masquerade! }
36
-
37
33
  before do
38
34
  get :show, params: { id: mask.to_param, masquerade: mask.masquerade_key }
39
35
  end
40
36
 
41
37
  it { expect(response.status).to eq(302) }
42
- it { expect(session.keys).to include('devise_masquerade_user') }
38
+ it { expect(Rails.cache.read('devise_masquerade_user')).to be }
43
39
  it { expect(session['warden.user.user.key'].first.first).to eq(mask.id) }
44
40
  end
45
41
  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).first
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
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: 1.2.0
4
+ version: 1.3.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: 2019-10-23 00:00:00.000000000 Z
11
+ date: 2021-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
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,6 +73,9 @@ 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"
@@ -144,7 +161,7 @@ homepage: http://github.com/oivoodoo/devise_masquerade
144
161
  licenses:
145
162
  - MIT
146
163
  metadata: {}
147
- post_install_message:
164
+ post_install_message:
148
165
  rdoc_options: []
149
166
  require_paths:
150
167
  - lib
@@ -159,8 +176,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
176
  - !ruby/object:Gem::Version
160
177
  version: '0'
161
178
  requirements: []
162
- rubygems_version: 3.0.1
163
- signing_key:
179
+ rubygems_version: 3.1.4
180
+ signing_key:
164
181
  specification_version: 4
165
182
  summary: use for login as functionallity on your admin users pages
166
183
  test_files: