devise_masquerade 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.

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: