spree_cm_commissioner 2.1.7 → 2.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7e5168cb588dc6b931bee2b2711b37886b364323bf2e7215390fde1e46479b8
4
- data.tar.gz: ed7571aca12c59e7385bd7e34fcde1105b0c8c04484d652bc5c4974f4c90e2ca
3
+ metadata.gz: 36165e2d7e9f037f00a0590045ae9c6171825a79f0499ec4cb70af91a246b0d5
4
+ data.tar.gz: b6d46f79ab01845de456585f50881dbca8b0b28d208e2db386a1833a9dfe1b30
5
5
  SHA512:
6
- metadata.gz: e744361324c16633f8e3648c90b5af642e9deae632e3e9d92681c6d05ffdeca616663b7c535f8ea0f530d640232d4498389f7109d668d92f0f3fcc21afc57038
7
- data.tar.gz: c428e0893d04a933352fe9965f3f1f0e3b270715652f598bbcdf2b12dbf30cb15194eb5e3e5adff6e321d532d0faddae9e40f881060f3cc6cce403031bbbb457
6
+ metadata.gz: bd7ac99403f71109009b3d06dff1fc5a72b61b833d00e27f2a7513c552f7005782ff819a5e69ca67d64160865af6fabf4dd9554f7253b3cbd85ea4ba283b555a
7
+ data.tar.gz: f7d227c43eb5ecfc72eeebbf715e651f576f998a769106a1303e647680a9b4e82820b1e31e3c3b10299a1ee79fa6da9fde4fce5ea9ec62074b62d5b6e937d560
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.1.7)
37
+ spree_cm_commissioner (2.1.8)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -44,6 +44,7 @@ PATH
44
44
  byebug
45
45
  connection_pool
46
46
  counter_culture (~> 3.2)
47
+ devise-two-factor
47
48
  dry-validation (~> 1.10)
48
49
  elasticsearch (~> 8.5)
49
50
  exception_notification
@@ -291,6 +292,11 @@ GEM
291
292
  warden (~> 1.2.3)
292
293
  devise-encryptable (0.2.0)
293
294
  devise (>= 2.1.0)
295
+ devise-two-factor (6.1.0)
296
+ activesupport (>= 7.0, < 8.1)
297
+ devise (~> 4.0)
298
+ railties (>= 7.0, < 8.1)
299
+ rotp (~> 6.0)
294
300
  diff-lcs (1.5.0)
295
301
  docile (1.4.0)
296
302
  domain_name (0.5.20190701)
@@ -701,6 +707,7 @@ GEM
701
707
  railties (>= 5.2)
702
708
  retriable (3.1.2)
703
709
  rexml (3.2.6)
710
+ rotp (6.3.0)
704
711
  rqrcode (2.2.0)
705
712
  chunky_png (~> 1.0)
706
713
  rqrcode_core (~> 1.0)
@@ -0,0 +1,25 @@
1
+ module Spree
2
+ module Admin
3
+ class UserSecurityController < Spree::Admin::BaseController
4
+ before_action :load_user
5
+
6
+ def disable_authenticator
7
+ @user.otp_secret = nil
8
+ @user.otp_required_for_login = false
9
+ begin
10
+ @user.save!
11
+ flash[:success] = I18n.t('authenticator.success_disabled_2fa')
12
+ rescue StandardError => e
13
+ flash[:error] = "Failed to disable 2FA: #{e.message}"
14
+ end
15
+ redirect_to admin_user_security_path(@user)
16
+ end
17
+
18
+ private
19
+
20
+ def load_user
21
+ @user = Spree::User.find(params[:user_id])
22
+ end
23
+ end
24
+ end
25
+ end
@@ -46,6 +46,10 @@ module SpreeCmCommissioner
46
46
  # Store has_incomplete_guest_info in public_metadata for easy frontend access
47
47
  base.store :public_metadata, accessors: [:has_incomplete_guest_info], coder: JSON
48
48
 
49
+ base.devise :two_factor_authenticatable
50
+
51
+ base.store :private_metadata, accessors: %i[otp_secret otp_required_for_login consumed_timestep], coder: JSON
52
+
49
53
  define_user_places(base)
50
54
 
51
55
  def base.end_users
@@ -63,6 +67,18 @@ module SpreeCmCommissioner
63
67
  end
64
68
  end
65
69
 
70
+ def otp_secret
71
+ private_metadata['otp_secret']
72
+ end
73
+
74
+ def otp_required_for_login
75
+ private_metadata['otp_required_for_login']
76
+ end
77
+
78
+ def consumed_timestep
79
+ private_metadata['consumed_timestep']
80
+ end
81
+
66
82
  def self.define_user_places(base)
67
83
  base.has_many :user_places, class_name: 'SpreeCmCommissioner::UserPlace'
68
84
  base.has_many :places, through: :user_places, class_name: 'SpreeCmCommissioner::Place'
@@ -49,4 +49,10 @@
49
49
  admin_user_events_path(user_id: @user.id),
50
50
  class: "nav-link #{'active' if current == :user_events }" %>
51
51
  </li>
52
+ <li class="nav-item">
53
+ <%= link_to_with_icon 'shield-check.svg',
54
+ Spree.t(:security),
55
+ admin_user_security_path(@user),
56
+ class: "nav-link #{'active' if current == :security }" %>
57
+ </li>
52
58
  <% end %>
@@ -0,0 +1,25 @@
1
+ <%= render partial: 'spree/admin/users/tabs', locals: { current: :security } %>
2
+
3
+ <div class="card shadow-sm">
4
+ <div class="card-header bg-light">
5
+ <h5 class="card-title mb-0 h6">
6
+ <%= Spree.t(:two_factor_authentication) %>
7
+ </h5>
8
+ </div>
9
+
10
+ <div class="card-body text-center">
11
+ <% if @user.otp_secret.present? && @user.otp_required_for_login == true %>
12
+ <p class="text-muted mb-3">
13
+ Two-factor authentication is currently active for this user.
14
+ </p>
15
+ <%= button_to disable_authenticator_admin_user_security_path, method: :delete, class: "btn btn-danger btn-md",
16
+ data: { confirm: "Are you sure?" } do %>
17
+ Disable 2FA
18
+ <% end %>
19
+ <% else %>
20
+ <p class="text-muted mb-0">
21
+ Two-factor authentication is <strong>not enabled</strong> for this user.
22
+ </p>
23
+ <% end %>
24
+ </div>
25
+ </div>
@@ -30,6 +30,7 @@ en:
30
30
  incorrect_password: "Incorrect password"
31
31
  invalid_or_missing_params: "Invalid or missing params"
32
32
  invalid_client_credentials: "Invalid client credentials"
33
+ success_disabled_2fa: "Successfully disabled 2FA"
33
34
 
34
35
  hello: "Hello world"
35
36
 
data/config/routes.rb CHANGED
@@ -91,6 +91,11 @@ Spree::Core::Engine.add_routes do
91
91
  resources :users do
92
92
  resources :device_tokens
93
93
  resources :user_identity_providers
94
+ resource :security, controller: :user_security, only: %i[show] do
95
+ member do
96
+ delete :disable_authenticator
97
+ end
98
+ end
94
99
  end
95
100
 
96
101
  resources :s3_presigned_urls, only: %i[create new]
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.1.7'.freeze
2
+ VERSION = '2.1.8'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -46,6 +46,7 @@ require 'premailer/rails'
46
46
  require 'cm_app_logger'
47
47
  require 'counter_culture'
48
48
  require 'paper_trail'
49
+ require 'devise-two-factor'
49
50
 
50
51
  require 'byebug' if Rails.env.development? || Rails.env.test?
51
52
 
@@ -55,6 +55,7 @@ Gem::Specification.new do |s|
55
55
  s.add_dependency "premailer-rails"
56
56
  s.add_dependency 'counter_culture', '~> 3.2'
57
57
  s.add_dependency 'paper_trail', '~> 16.0'
58
+ s.add_dependency 'devise-two-factor'
58
59
 
59
60
  # Redis
60
61
  s.add_dependency 'redis'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 2.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
@@ -478,6 +478,20 @@ dependencies:
478
478
  - - "~>"
479
479
  - !ruby/object:Gem::Version
480
480
  version: '16.0'
481
+ - !ruby/object:Gem::Dependency
482
+ name: devise-two-factor
483
+ requirement: !ruby/object:Gem::Requirement
484
+ requirements:
485
+ - - ">="
486
+ - !ruby/object:Gem::Version
487
+ version: '0'
488
+ type: :runtime
489
+ prerelease: false
490
+ version_requirements: !ruby/object:Gem::Requirement
491
+ requirements:
492
+ - - ">="
493
+ - !ruby/object:Gem::Version
494
+ version: '0'
481
495
  - !ruby/object:Gem::Dependency
482
496
  name: redis
483
497
  requirement: !ruby/object:Gem::Requirement
@@ -851,6 +865,7 @@ files:
851
865
  - app/controllers/spree/admin/trip_blazer_queries_controller.rb
852
866
  - app/controllers/spree/admin/user_events_controller.rb
853
867
  - app/controllers/spree/admin/user_identity_providers_controller.rb
868
+ - app/controllers/spree/admin/user_security_controller.rb
854
869
  - app/controllers/spree/admin/users_controller_decorator.rb
855
870
  - app/controllers/spree/admin/variant_guest_card_classes_controller.rb
856
871
  - app/controllers/spree/admin/vectors/icons_controller.rb
@@ -2085,6 +2100,7 @@ files:
2085
2100
  - app/views/spree/admin/user_identity_providers/edit.html.erb
2086
2101
  - app/views/spree/admin/user_identity_providers/index.html.erb
2087
2102
  - app/views/spree/admin/user_identity_providers/new.html.erb
2103
+ - app/views/spree/admin/user_security/show.html.erb
2088
2104
  - app/views/spree/admin/variant_guest_card_classes/_variant_guest_card_class.html.erb
2089
2105
  - app/views/spree/admin/variant_guest_card_classes/index.html.erb
2090
2106
  - app/views/spree/admin/variants/_date_field.html.erb