spree_auth_devise 4.4.2 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +13 -1
- data/Gemfile +8 -1
- data/README.md +5 -11
- data/config/initializers/devise.rb +1 -1
- data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +1 -1
- data/lib/controllers/backend/spree/{admin → auth/admin}/base_controller_decorator.rb +2 -2
- data/lib/controllers/backend/spree/{admin → auth/admin}/orders/customer_details_controller_decorator.rb +2 -2
- data/lib/controllers/backend/spree/{admin → auth/admin}/orders_controller_decorator.rb +2 -2
- data/lib/controllers/backend/spree/auth/admin/resource_controller_decorator.rb +6 -0
- data/lib/controllers/frontend/spree/{checkout_controller_decorator.rb → auth/checkout_controller_decorator.rb} +4 -4
- data/lib/controllers/frontend/spree/user_passwords_controller.rb +2 -2
- data/lib/controllers/frontend/spree/user_registrations_controller.rb +1 -1
- data/lib/controllers/frontend/spree/user_sessions_controller.rb +1 -1
- data/lib/mailers/spree/user_mailer.rb +38 -0
- data/lib/spree/auth/configuration.rb +10 -0
- data/lib/spree/auth/engine.rb +14 -3
- data/lib/spree/auth/version.rb +1 -1
- data/lib/spree/authentication_helpers.rb +6 -6
- data/lib/spree/testing_support/auth_helpers.rb +8 -0
- data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +17 -15
- data/lib/views/backend/spree/admin/user_passwords/new.html.erb +13 -13
- data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +1 -1
- data/lib/views/backend/spree/admin/user_sessions/new.html.erb +8 -9
- data/lib/views/backend/spree/layouts/login.html.erb +1 -1
- data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.html.erb +0 -0
- data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.text.erb +0 -0
- data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.html.erb +0 -0
- data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.text.erb +0 -0
- data/lib/views/frontend/spree/user_registrations/new.html.erb +1 -1
- data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +2 -2
- data/spec/controllers/spree/products_controller_spec.rb +1 -0
- data/spec/features/account_spec.rb +1 -0
- data/spec/features/admin/sign_in_spec.rb +1 -1
- data/spec/features/checkout_spec.rb +4 -3
- data/spec/features/confirmation_spec.rb +1 -1
- data/spec/features/sign_in_spec.rb +1 -1
- data/spec/mailers/user_mailer_spec.rb +3 -3
- data/spec/models/user_spec.rb +3 -3
- data/spree_auth_devise.gemspec +1 -1
- metadata +18 -18
- data/app/mailers/spree/user_mailer.rb +0 -23
- data/app/models/spree/auth_configuration.rb +0 -8
- data/lib/controllers/backend/spree/admin/resource_controller_decorator.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a85c3ec56e4d12970bf8abf6f8365a688cea123c9be66d5e7d9581ca51468bbc
|
4
|
+
data.tar.gz: 6cd1ecf12edd93fc0ff505c9d21eadf139f218f1fd2be0870d64d68d833fa712
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b55e45f4cd927c1d3a0509f9c4d04ff60d03f1453cb2878911ddd4137834d338cf506db686572ab17e5bc99534dffbc822b36201c92bc6f6a58b1480d8a0041
|
7
|
+
data.tar.gz: 1edd8464cdef3be084845fb5eef65e33b9ac86c82e7fb19c35ab6acd29ad60e4a69114bf3a3917f14e150367b0df426c0a85b8340e5110e0443c3c41520f38d8
|
data/.circleci/config.yml
CHANGED
@@ -26,6 +26,9 @@ run_tests: &run_tests
|
|
26
26
|
keys:
|
27
27
|
- spree-auth-devise-bundle-v9-ruby-2-7-{{ .Branch }}
|
28
28
|
- spree-auth-devise-bundle-v9-ruby-2-7
|
29
|
+
- run:
|
30
|
+
name: Install libvips
|
31
|
+
command: sudo apt-get install libvips
|
29
32
|
- run:
|
30
33
|
name: Set bundle path
|
31
34
|
command: bundle config --local path vendor/bundle
|
@@ -58,6 +61,9 @@ run_tests_3_0: &run_tests_3_0
|
|
58
61
|
keys:
|
59
62
|
- spree-auth-devise-bundle-v9-ruby-3-0-{{ .Branch }}
|
60
63
|
- spree-auth-devise-bundle-v9-ruby-3-0
|
64
|
+
- run:
|
65
|
+
name: Install libvips
|
66
|
+
command: sudo apt-get install libvips
|
61
67
|
- run:
|
62
68
|
name: Set bundle path
|
63
69
|
command: bundle config --local path vendor/bundle
|
@@ -91,6 +97,9 @@ jobs:
|
|
91
97
|
keys:
|
92
98
|
- spree-auth-devise-bundle-v9-ruby-2-7-{{ .Branch }}
|
93
99
|
- spree-auth-devise-bundle-v9-ruby-2-7
|
100
|
+
- run:
|
101
|
+
name: Install libvips
|
102
|
+
command: sudo apt-get install libvips
|
94
103
|
- run:
|
95
104
|
name: Set bundle path
|
96
105
|
command: bundle config --local path vendor/bundle
|
@@ -111,6 +120,9 @@ jobs:
|
|
111
120
|
keys:
|
112
121
|
- spree-auth-devise-bundle-v9-ruby-3-0-{{ .Branch }}
|
113
122
|
- spree-auth-devise-bundle-v9-ruby-3-0
|
123
|
+
- run:
|
124
|
+
name: Install libvips
|
125
|
+
command: sudo apt-get install libvips
|
114
126
|
- run:
|
115
127
|
name: Set bundle path
|
116
128
|
command: bundle config --local path vendor/bundle
|
@@ -174,4 +186,4 @@ workflows:
|
|
174
186
|
- bundle_ruby_3_0
|
175
187
|
- tests_mysql:
|
176
188
|
requires:
|
177
|
-
- bundle
|
189
|
+
- bundle
|
data/Gemfile
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gem 'rails-controller-testing'
|
4
|
+
gem 'devise', github: 'heartcombo/devise', branch: 'main'
|
4
5
|
gem 'spree', github: 'spree/spree', branch: 'main'
|
5
6
|
gem 'spree_backend', github: 'spree/spree_backend', branch: 'main'
|
6
|
-
gem 'spree_frontend', github: 'spree/spree_legacy_frontend', branch: 'main'
|
7
7
|
gem 'spree_emails', github: 'spree/spree', branch: 'main'
|
8
|
+
gem 'spree_frontend', github: 'spree/spree_legacy_frontend', branch: 'main'
|
8
9
|
gem 'rspec_junit_formatter', '~> 0.4.1'
|
9
10
|
|
11
|
+
if ENV['DB'] == 'mysql'
|
12
|
+
gem 'mysql2'
|
13
|
+
else
|
14
|
+
gem 'pg', '~> 1.1'
|
15
|
+
end
|
16
|
+
|
10
17
|
gem 'pry', '~> 0.14.1'
|
11
18
|
gemspec
|
data/README.md
CHANGED
@@ -4,6 +4,11 @@
|
|
4
4
|
|
5
5
|
Provides authentication services for [Spree](https://spreecommerce.org), using the [Devise](https://github.com/plataformatec/devise) gem.
|
6
6
|
|
7
|
+
## Developed by
|
8
|
+
|
9
|
+
[![Vendo](https://assets-global.website-files.com/6230c485f2c32ea1b0daa438/623372f40a8c54ca9aea34e8_vendo%202.svg)](https://getvendo.com?utm_source=spree_auth_github)
|
10
|
+
|
11
|
+
> All-in-one platform for all your Marketplace and B2B eCommerce needs. [Start your 30-day free trial](https://e98esoirr8c.typeform.com/contactvendo?typeform-source=spree_auth_github)
|
7
12
|
|
8
13
|
## Installation
|
9
14
|
|
@@ -130,14 +135,3 @@ You need to do a quick one-time creation of a test application and then you can
|
|
130
135
|
Then run the rspec tests.
|
131
136
|
|
132
137
|
bundle exec rspec
|
133
|
-
|
134
|
-
About Spark Solutions
|
135
|
-
----------------------
|
136
|
-
[![Spark Solutions](http://sparksolutions.co/wp-content/uploads/2015/01/logo-ss-tr-221x100.png)][spark]
|
137
|
-
|
138
|
-
Spree Auth Devise is maintained by [Spark Solutions Sp. z o.o.][spark].
|
139
|
-
|
140
|
-
We are passionate about open source software.
|
141
|
-
We are [available for hire][spark].
|
142
|
-
|
143
|
-
[spark]:http://sparksolutions.co?utm_source=github
|
@@ -6,7 +6,7 @@ Devise.setup do |config|
|
|
6
6
|
config.mailer_sender = 'please-change-me@config-initializers-devise.com'
|
7
7
|
|
8
8
|
# Configure the class responsible to send e-mails.
|
9
|
-
config.mailer = 'Spree::UserMailer'
|
9
|
+
config.mailer = 'Spree::UserMailer' if defined?(Spree::Emails)
|
10
10
|
|
11
11
|
# ==> ORM configuration
|
12
12
|
# Load and configure the ORM. Supports :active_record (default) and
|
@@ -5,7 +5,7 @@ class Spree::Admin::UserPasswordsController < Devise::PasswordsController
|
|
5
5
|
include Spree::Core::ControllerHelpers::Store
|
6
6
|
|
7
7
|
helper 'spree/admin/navigation'
|
8
|
-
layout 'spree/layouts/
|
8
|
+
layout 'spree/layouts/login'
|
9
9
|
|
10
10
|
# Overridden due to bug in Devise.
|
11
11
|
# respond_with resource, :location => new_session_path(resource_name)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Spree::Admin::BaseControllerDecorator
|
1
|
+
module Spree::Auth::Admin::BaseControllerDecorator
|
2
2
|
# Redirect as appropriate when an access request fails. The default action is to redirect to the login screen.
|
3
3
|
# Override this method in your controllers if you want to have special behavior in case the user is not authorized
|
4
4
|
# to access the requested action. For example, a popup window might simply close itself.
|
@@ -22,4 +22,4 @@ module Spree::Admin::BaseControllerDecorator
|
|
22
22
|
nil
|
23
23
|
end
|
24
24
|
end
|
25
|
-
Spree::Admin::BaseController.prepend(Spree::Admin::BaseControllerDecorator)
|
25
|
+
::Spree::Admin::BaseController.prepend(Spree::Auth::Admin::BaseControllerDecorator)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Spree::Admin::Orders::CustomerDetailsControllerDecorator
|
1
|
+
module Spree::Auth::Admin::Orders::CustomerDetailsControllerDecorator
|
2
2
|
|
3
3
|
def self.prepended(base)
|
4
4
|
base.before_action :check_authorization
|
@@ -17,4 +17,4 @@ module Spree::Admin::Orders::CustomerDetailsControllerDecorator
|
|
17
17
|
authorize! action, resource, session[:access_token]
|
18
18
|
end
|
19
19
|
end
|
20
|
-
Spree::Admin::Orders::CustomerDetailsController.prepend(Spree::Admin::Orders::CustomerDetailsControllerDecorator)
|
20
|
+
Spree::Admin::Orders::CustomerDetailsController.prepend(Spree::Auth::Admin::Orders::CustomerDetailsControllerDecorator)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Spree::Admin::OrdersControllerDecorator
|
1
|
+
module Spree::Auth::Admin::OrdersControllerDecorator
|
2
2
|
|
3
3
|
def self.prepended(base)
|
4
4
|
base.before_action :check_authorization
|
@@ -22,4 +22,4 @@ module Spree::Admin::OrdersControllerDecorator
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
-
Spree::Admin::OrdersController.prepend(Spree::Admin::OrdersControllerDecorator)
|
25
|
+
Spree::Admin::OrdersController.prepend(Spree::Auth::Admin::OrdersControllerDecorator)
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spree/core/validators/email' if Spree.version.to_f < 3.5
|
2
|
-
module Spree::CheckoutControllerDecorator
|
2
|
+
module Spree::Auth::CheckoutControllerDecorator
|
3
3
|
def self.prepended(base)
|
4
4
|
base.before_action :check_authorization
|
5
5
|
base.before_action :check_registration, except: [:registration, :update_registration]
|
6
6
|
end
|
7
7
|
|
8
8
|
def registration
|
9
|
-
@user = Spree.user_class.new
|
9
|
+
@user = Spree.user_class.new
|
10
10
|
@title = Spree.t(:registration)
|
11
11
|
end
|
12
12
|
|
@@ -16,7 +16,7 @@ module Spree::CheckoutControllerDecorator
|
|
16
16
|
else
|
17
17
|
flash[:error] = t(:email_is_invalid, scope: [:errors, :messages])
|
18
18
|
@user = Spree.user_class.new
|
19
|
-
render 'registration'
|
19
|
+
render 'registration', status: :unprocessable_entity
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -42,4 +42,4 @@ module Spree::CheckoutControllerDecorator
|
|
42
42
|
redirect_to spree.checkout_registration_path
|
43
43
|
end
|
44
44
|
end
|
45
|
-
Spree::CheckoutController.prepend(Spree::CheckoutControllerDecorator)
|
45
|
+
Spree::CheckoutController.prepend(Spree::Auth::CheckoutControllerDecorator)
|
@@ -33,7 +33,7 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
33
33
|
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
34
34
|
respond_with resource, location: spree.login_path
|
35
35
|
else
|
36
|
-
respond_with_navigational(resource) { render :new }
|
36
|
+
respond_with_navigational(resource) { render :new, status: :unprocessable_entity }
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -45,7 +45,7 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
45
45
|
self.resource = resource_class.new
|
46
46
|
resource.reset_password_token = params[:spree_user][:reset_password_token]
|
47
47
|
set_flash_message(:error, :cannot_be_blank)
|
48
|
-
render :edit
|
48
|
+
render :edit, status: :unprocessable_entity
|
49
49
|
else
|
50
50
|
super
|
51
51
|
end
|
@@ -38,7 +38,7 @@ class Spree::UserSessionsController < Devise::SessionsController
|
|
38
38
|
respond_to do |format|
|
39
39
|
format.html {
|
40
40
|
flash.now[:error] = t('devise.failure.invalid')
|
41
|
-
render :new
|
41
|
+
render :new, status: :unprocessable_entity
|
42
42
|
}
|
43
43
|
format.js {
|
44
44
|
render json: { error: t('devise.failure.invalid') }, status: :unprocessable_entity
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Spree
|
2
|
+
class UserMailer < BaseMailer
|
3
|
+
def reset_password_instructions(user, token, opts = {})
|
4
|
+
@user = user
|
5
|
+
@current_store = current_store(opts)
|
6
|
+
@edit_password_reset_url = edit_password_url(token, @current_store)
|
7
|
+
|
8
|
+
mail to: user.email, from: from_address, reply_to: reply_to_address,
|
9
|
+
subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions]),
|
10
|
+
store_url: @current_store.url
|
11
|
+
end
|
12
|
+
|
13
|
+
def confirmation_instructions(user, token, opts = {})
|
14
|
+
@user = user
|
15
|
+
@current_store = current_store(opts)
|
16
|
+
@confirmation_url = spree.confirmation_url(confirmation_token: token, host: @current_store.url)
|
17
|
+
@email = user.email
|
18
|
+
|
19
|
+
mail to: user.email, from: from_address, reply_to: reply_to_address,
|
20
|
+
subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :confirmation_instructions]),
|
21
|
+
store_url: @current_store.url
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def edit_password_url(token, store)
|
27
|
+
if frontend_available?
|
28
|
+
spree.edit_password_url(reset_password_token: token, host: store.url)
|
29
|
+
else
|
30
|
+
spree.admin_edit_password_url(reset_password_token: token, host: store.url)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def current_store(opts = {})
|
35
|
+
@current_store = Spree::Store.find_by(id: opts[:current_store_id]) || Spree::Store.default
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spree
|
2
|
+
module Auth
|
3
|
+
class Configuration < Preferences::Configuration
|
4
|
+
preference :registration_step, :boolean, default: true
|
5
|
+
preference :signout_after_password_change, :boolean, default: true
|
6
|
+
preference :confirmable, :boolean, default: false
|
7
|
+
preference :validatable, :boolean, default: true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/lib/spree/auth/engine.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'devise'
|
2
2
|
require 'devise-encryptable'
|
3
3
|
|
4
|
+
require_relative 'configuration'
|
5
|
+
|
4
6
|
module Spree
|
5
7
|
module Auth
|
6
8
|
class Engine < Rails::Engine
|
@@ -8,11 +10,11 @@ module Spree
|
|
8
10
|
engine_name 'spree_auth'
|
9
11
|
|
10
12
|
initializer "spree.auth.environment", before: :load_config_initializers do |_app|
|
11
|
-
Spree::Auth::Config = Spree::
|
13
|
+
Spree::Auth::Config = Spree::Auth::Configuration.new
|
12
14
|
end
|
13
15
|
|
14
16
|
initializer "spree_auth_devise.set_user_class", after: :load_config_initializers do
|
15
|
-
Spree.user_class = 'Spree::User'
|
17
|
+
Spree.user_class = 'Spree::User'
|
16
18
|
end
|
17
19
|
|
18
20
|
initializer "spree_auth_devise.check_secret_token" do
|
@@ -55,13 +57,17 @@ module Spree
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def self.frontend_available?
|
58
|
-
@@frontend_available ||= ::
|
60
|
+
@@frontend_available ||= Gem::Specification.find_all_by_name('spree_frontend').any?
|
59
61
|
end
|
60
62
|
|
61
63
|
def self.api_available?
|
62
64
|
@@api_available ||= ::Rails::Engine.subclasses.map(&:instance).map{ |e| e.class.to_s }.include?('Spree::Api::Engine')
|
63
65
|
end
|
64
66
|
|
67
|
+
def self.emails_available?
|
68
|
+
@@emails_available ||= ::Rails::Engine.subclasses.map(&:instance).map{ |e| e.class.to_s }.include?('Spree::Emails::Engine')
|
69
|
+
end
|
70
|
+
|
65
71
|
if backend_available?
|
66
72
|
paths["app/controllers"] << "lib/controllers/backend"
|
67
73
|
paths["app/views"] << "lib/views/backend"
|
@@ -76,6 +82,11 @@ module Spree
|
|
76
82
|
paths["app/controllers"] << "lib/controllers/api"
|
77
83
|
end
|
78
84
|
|
85
|
+
if emails_available?
|
86
|
+
paths["app/views"] << "lib/views/emails"
|
87
|
+
paths["app/mailers"] << "lib/mailers"
|
88
|
+
end
|
89
|
+
|
79
90
|
config.to_prepare &method(:activate).to_proc
|
80
91
|
end
|
81
92
|
end
|
data/lib/spree/auth/version.rb
CHANGED
@@ -11,16 +11,16 @@ module Spree
|
|
11
11
|
current_spree_user
|
12
12
|
end
|
13
13
|
|
14
|
-
def spree_login_path
|
15
|
-
spree.login_path
|
14
|
+
def spree_login_path(opts = {})
|
15
|
+
spree.login_path(opts)
|
16
16
|
end
|
17
17
|
|
18
|
-
def spree_signup_path
|
19
|
-
spree.signup_path
|
18
|
+
def spree_signup_path(opts = {})
|
19
|
+
spree.signup_path(opts)
|
20
20
|
end
|
21
21
|
|
22
|
-
def spree_logout_path
|
23
|
-
spree.logout_path
|
22
|
+
def spree_logout_path(opts = {})
|
23
|
+
spree.logout_path(opts)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -39,6 +39,14 @@ module Spree
|
|
39
39
|
click_link Spree.t(:my_account).upcase
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
def wait_for_turbo
|
44
|
+
if Spree.version.to_f < 4.5
|
45
|
+
expect(page).to have_no_css '.turbolinks-progress-bar'
|
46
|
+
else
|
47
|
+
expect(page).to have_no_css '.turbo-progress-bar'
|
48
|
+
end
|
49
|
+
end
|
42
50
|
end
|
43
51
|
end
|
44
52
|
end
|
@@ -1,16 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
<%= form_for @spree_user, as: :spree_user, url: spree.admin_update_password_path, method: :put do |f| %>
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
<div id="forgot-password" class="card mt-5 shadow-sm">
|
2
|
+
<div class="card-body">
|
3
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
|
4
|
+
<h5 class="card-title"><%= Spree.t(:change_my_password) %></h5>
|
5
|
+
<%= form_for @spree_user, as: :spree_user, url: spree.admin_update_password_path, method: :put do |f| %>
|
6
|
+
<div class="form-group">
|
7
|
+
<%= f.label :password, Spree.t(:password) %>
|
8
|
+
<%= f.password_field :password, class: 'form-control', required: true %>
|
9
|
+
</div>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= f.label :password_confirmation, Spree.t(:confirm_password) %>
|
12
|
+
<%= f.password_field :password_confirmation, class: 'form-control', required: true %>
|
13
|
+
</div>
|
14
|
+
<%= f.hidden_field :reset_password_token %>
|
15
|
+
<%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block' %>
|
16
|
+
<% end %>
|
9
17
|
</div>
|
10
|
-
|
11
|
-
<%= f.label :password_confirmation, Spree.t(:confirm_password) %>
|
12
|
-
<%= f.password_field :password_confirmation, class: 'form-control', required: true %>
|
13
|
-
</div>
|
14
|
-
<%= f.hidden_field :reset_password_token %>
|
15
|
-
<%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block' %>
|
16
|
-
<% end %>
|
18
|
+
</div>
|
@@ -1,15 +1,15 @@
|
|
1
|
-
|
1
|
+
<div id="forgot-password" class="card mt-5 shadow-sm">
|
2
|
+
<div class="card-body">
|
3
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
|
2
4
|
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<%= f.
|
11
|
-
|
12
|
-
|
13
|
-
<%= f.submit Spree.t(:reset_password), class: 'btn btn-primary' %>
|
14
|
-
<% end %>
|
5
|
+
<h5 class="card-title"><%= Spree.t(:forgot_password) %></h5>
|
6
|
+
<p><%= Spree.t(:instructions_to_reset_password) %></p>
|
7
|
+
<%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.admin_reset_password_path, data: { turbo: false } do |f| %>
|
8
|
+
<div class="form-group">
|
9
|
+
<%= f.label :email, Spree.t(:email) %>
|
10
|
+
<%= f.email_field :email, class: 'form-control', required: true %>
|
11
|
+
</div>
|
12
|
+
<%= f.submit Spree.t(:reset_password), class: 'btn btn-primary' %>
|
13
|
+
<% end %>
|
14
|
+
</div>
|
15
15
|
</div>
|
@@ -1,17 +1,16 @@
|
|
1
|
-
|
2
|
-
<div class="alert alert-danger"><%= flash[:alert] %></div>
|
3
|
-
<% end %>
|
4
|
-
|
5
|
-
<div data-hook="login" class="card border-0">
|
1
|
+
<div data-hook="login" class="card mt-5 shadow-sm">
|
6
2
|
<div class="card-body">
|
3
|
+
<% if flash[:error] %>
|
4
|
+
<div class="alert alert-danger"><%= flash[:error] %></div>
|
5
|
+
<% end %>
|
6
|
+
<h5 class="card-title"><%= Spree.t(:login) %></h5>
|
7
|
+
|
7
8
|
<%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.admin_create_new_session_path do |f| %>
|
8
9
|
<div id="password-credentials">
|
9
|
-
<div class="form-group
|
10
|
-
<%= f.label :email, Spree.t(:email) %>
|
10
|
+
<div class="form-group">
|
11
11
|
<%= f.email_field :email, class: 'form-control', tabindex: 1, placeholder: Spree.t(:email) %>
|
12
12
|
</div>
|
13
|
-
<div class="form-group
|
14
|
-
<%= f.label :password, Spree.t(:password) %>
|
13
|
+
<div class="form-group">
|
15
14
|
<%= f.password_field :password, :class => 'form-control', :tabindex => 2, placeholder: Spree.t(:password) %>
|
16
15
|
</div>
|
17
16
|
</div>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<div class="col-lg-6 offset-lg-3">
|
4
4
|
<h3 class="spree-header spree-mb-large spree-mt-large"><%= Spree.t(:new_customer) %></h3>
|
5
5
|
<div id="new-customer" data-hook="login">
|
6
|
-
<%= form_for resource, as: :spree_user, url: spree.registration_path do |f| %>
|
6
|
+
<%= form_for resource, as: :spree_user, url: spree.registration_path, data: { turbo: false } do |f| %>
|
7
7
|
<div data-hook="signup_inside_form">
|
8
8
|
<%= render partial: 'spree/shared/user_form', locals: { f: f, remember_me_field: true } %>
|
9
9
|
<div><%= f.submit Spree.t(:sign_up), class: 'btn btn-primary btn-block spree-btn mb-5' %></div>
|
@@ -32,7 +32,7 @@ RSpec.describe Spree::Api::V2::Storefront::PasswordsController, type: :controlle
|
|
32
32
|
context 'when updating password with blank password' do
|
33
33
|
let(:params) {
|
34
34
|
{
|
35
|
-
id: user.send_reset_password_instructions(Spree::Store.
|
35
|
+
id: user.send_reset_password_instructions(Spree::Store.default),
|
36
36
|
user: {
|
37
37
|
password: '',
|
38
38
|
password_confirmation: ''
|
@@ -49,7 +49,7 @@ RSpec.describe Spree::Api::V2::Storefront::PasswordsController, type: :controlle
|
|
49
49
|
context 'when updating password with specified password' do
|
50
50
|
let(:params) {
|
51
51
|
{
|
52
|
-
id: user.send_reset_password_instructions(Spree::Store.
|
52
|
+
id: user.send_reset_password_instructions(Spree::Store.default),
|
53
53
|
user: {
|
54
54
|
password: password,
|
55
55
|
password_confirmation: password
|
@@ -17,6 +17,7 @@ RSpec.describe Spree::ProductsController, type: :controller do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'cannot view non-active products' do
|
20
|
+
skip if Spree.version.to_f > 4.0
|
20
21
|
allow(user).to receive(:has_spree_role?) { false }
|
21
22
|
|
22
23
|
# this behaviour was introduced in rails 5.1 & Spree 3.5
|
@@ -28,6 +28,7 @@ RSpec.feature 'Accounts', type: :feature do
|
|
28
28
|
expect(page).to have_text 'email@person.com'
|
29
29
|
|
30
30
|
find('a.account-page-user-info-item-title-edit').click
|
31
|
+
wait_for_turbo
|
31
32
|
|
32
33
|
fill_in 'Password', with: 'foobar'
|
33
34
|
fill_in 'Password Confirmation', with: 'foobar'
|
@@ -73,7 +73,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
# Regression test for #890
|
76
|
-
|
76
|
+
xscenario 'associate an incomplete guest order with user after successful password reset' do
|
77
77
|
add_to_cart(mug)
|
78
78
|
|
79
79
|
visit spree.login_path
|
@@ -81,12 +81,12 @@ RSpec.feature 'Checkout', :js, type: :feature do
|
|
81
81
|
fill_in('Email', with: 'email@person.com')
|
82
82
|
find('#spree_user_email').set('email@person.com')
|
83
83
|
|
84
|
-
click_button 'Reset my password'
|
84
|
+
expect { click_button 'Reset my password' }.to change { ActionMailer::Base.deliveries.size }.by(1)
|
85
85
|
|
86
86
|
# Need to do this now because the token stored in the DB is the encrypted version
|
87
87
|
# The 'plain-text' version is sent in the email and there's one way to get that!
|
88
88
|
reset_password_email = ActionMailer::Base.deliveries.first
|
89
|
-
token_url_regex = /^http:\/\/www.example.com\/
|
89
|
+
token_url_regex = /^http:\/\/www.example.com\/password\/change\?reset_password_token=(.*)$/
|
90
90
|
token = token_url_regex.match(reset_password_email.body.encoded)[1]
|
91
91
|
|
92
92
|
visit spree.edit_spree_user_password_path(reset_password_token: token.strip).tr("%0D","")
|
@@ -103,6 +103,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
|
|
103
103
|
click_button 'Save and Continue'
|
104
104
|
|
105
105
|
expect(page).not_to have_text 'Email is invalid'
|
106
|
+
ActiveJob::Base.queue_adapter = :test
|
106
107
|
end
|
107
108
|
|
108
109
|
scenario 'allow a user to register during checkout' do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.feature 'Confirmation', type: :feature, confirmable: true do
|
4
4
|
before do
|
5
|
-
expect(Spree::UserMailer).to receive(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.
|
5
|
+
expect(Spree::UserMailer).to receive(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.default.id }).and_return(double(deliver: true))
|
6
6
|
end
|
7
7
|
|
8
8
|
background do
|
@@ -5,7 +5,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
|
|
5
5
|
describe '#reset_password_instructions' do
|
6
6
|
describe 'message contents' do
|
7
7
|
before do
|
8
|
-
@message = described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.
|
8
|
+
@message = described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.default.id })
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'subject includes' do
|
@@ -22,7 +22,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
|
|
22
22
|
|
23
23
|
context 'body includes' do
|
24
24
|
it 'password reset url' do
|
25
|
-
expect(@message.body.encoded).to include "http://#{store.url}/
|
25
|
+
expect(@message.body.encoded).to include "http://#{store.url}/password/change"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -30,7 +30,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
|
|
30
30
|
describe 'legacy support for User object' do
|
31
31
|
it 'sends an email' do
|
32
32
|
expect {
|
33
|
-
described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.
|
33
|
+
described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.default.id }).deliver_now
|
34
34
|
}.to change(ActionMailer::Base.deliveries, :size).by(1)
|
35
35
|
end
|
36
36
|
end
|
data/spec/models/user_spec.rb
CHANGED
@@ -9,7 +9,7 @@ RSpec.describe Spree::User, type: :model do
|
|
9
9
|
|
10
10
|
it 'generates the reset password token' do
|
11
11
|
user = build(:user)
|
12
|
-
current_store = Spree::Store.
|
12
|
+
current_store = Spree::Store.default
|
13
13
|
expect(Spree::UserMailer).to receive(:reset_password_instructions).with(user, anything, { current_store_id: current_store.id }).and_return(double(deliver: true))
|
14
14
|
user.send_reset_password_instructions(current_store)
|
15
15
|
expect(user.reset_password_token).not_to be_nil
|
@@ -94,7 +94,7 @@ RSpec.describe Spree::User, type: :model do
|
|
94
94
|
|
95
95
|
describe "confirmable" do
|
96
96
|
it "is confirmable if the confirmable option is enabled", confirmable: true do
|
97
|
-
Spree::UserMailer.stub(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.
|
97
|
+
Spree::UserMailer.stub(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.default.id }).and_return(double(deliver: true))
|
98
98
|
expect(Spree.user_class.devise_modules).to include(:confirmable)
|
99
99
|
end
|
100
100
|
|
@@ -112,7 +112,7 @@ RSpec.describe Spree::User, type: :model do
|
|
112
112
|
user.email = FFaker::Internet.email
|
113
113
|
user.password = user.password_confirmation = 'pass1234'
|
114
114
|
user.save
|
115
|
-
|
115
|
+
|
116
116
|
expect(Spree::UserMailer).to receive(:confirmation_instructions).with(
|
117
117
|
user, anything, { current_store_id: default_store.id }).and_return(double(deliver: true)
|
118
118
|
)
|
data/spree_auth_devise.gemspec
CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
|
|
33
33
|
s.add_dependency 'devise', '~> 4.7'
|
34
34
|
s.add_dependency 'devise-encryptable', '0.2.0'
|
35
35
|
|
36
|
-
spree_version = '>= 4.
|
36
|
+
spree_version = '>= 4.5.0'
|
37
37
|
s.add_dependency 'spree_core', spree_version
|
38
38
|
s.add_dependency 'spree_extension'
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_auth_devise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-12-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: devise
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 4.
|
48
|
+
version: 4.5.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 4.
|
55
|
+
version: 4.5.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: spree_extension
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,13 +102,7 @@ files:
|
|
102
102
|
- app/controllers/metal_decorator.rb
|
103
103
|
- app/controllers/spree/api/v2/storefront/account_confirmations_controller.rb
|
104
104
|
- app/controllers/spree/api/v2/storefront/passwords_controller.rb
|
105
|
-
- app/mailers/spree/user_mailer.rb
|
106
|
-
- app/models/spree/auth_configuration.rb
|
107
105
|
- app/models/spree/user.rb
|
108
|
-
- app/views/spree/user_mailer/confirmation_instructions.html.erb
|
109
|
-
- app/views/spree/user_mailer/confirmation_instructions.text.erb
|
110
|
-
- app/views/spree/user_mailer/reset_password_instructions.html.erb
|
111
|
-
- app/views/spree/user_mailer/reset_password_instructions.text.erb
|
112
106
|
- bin/rails
|
113
107
|
- config.ru
|
114
108
|
- config/initializers/devise.rb
|
@@ -136,13 +130,13 @@ files:
|
|
136
130
|
- db/migrate/20150416152553_add_missing_indices_on_user.rb
|
137
131
|
- db/migrate/20210728103922_change_type_of_ship_address_id_and_bill_address_id_for_spree_users.rb
|
138
132
|
- db/seeds.rb
|
139
|
-
- lib/controllers/backend/spree/admin/base_controller_decorator.rb
|
140
|
-
- lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb
|
141
|
-
- lib/controllers/backend/spree/admin/orders_controller_decorator.rb
|
142
|
-
- lib/controllers/backend/spree/admin/resource_controller_decorator.rb
|
143
133
|
- lib/controllers/backend/spree/admin/user_passwords_controller.rb
|
144
134
|
- lib/controllers/backend/spree/admin/user_sessions_controller.rb
|
145
|
-
- lib/controllers/
|
135
|
+
- lib/controllers/backend/spree/auth/admin/base_controller_decorator.rb
|
136
|
+
- lib/controllers/backend/spree/auth/admin/orders/customer_details_controller_decorator.rb
|
137
|
+
- lib/controllers/backend/spree/auth/admin/orders_controller_decorator.rb
|
138
|
+
- lib/controllers/backend/spree/auth/admin/resource_controller_decorator.rb
|
139
|
+
- lib/controllers/frontend/spree/auth/checkout_controller_decorator.rb
|
146
140
|
- lib/controllers/frontend/spree/user_confirmations_controller.rb
|
147
141
|
- lib/controllers/frontend/spree/user_passwords_controller.rb
|
148
142
|
- lib/controllers/frontend/spree/user_registrations_controller.rb
|
@@ -150,7 +144,9 @@ files:
|
|
150
144
|
- lib/controllers/frontend/spree/users_controller.rb
|
151
145
|
- lib/generators/spree/auth/install/install_generator.rb
|
152
146
|
- lib/generators/spree/auth/install/templates/config/initializers/devise.rb
|
147
|
+
- lib/mailers/spree/user_mailer.rb
|
153
148
|
- lib/spree/auth.rb
|
149
|
+
- lib/spree/auth/configuration.rb
|
154
150
|
- lib/spree/auth/devise.rb
|
155
151
|
- lib/spree/auth/engine.rb
|
156
152
|
- lib/spree/auth/version.rb
|
@@ -165,6 +161,10 @@ files:
|
|
165
161
|
- lib/views/backend/spree/admin/user_sessions/new.html.erb
|
166
162
|
- lib/views/backend/spree/layouts/admin/_login_nav.html.erb
|
167
163
|
- lib/views/backend/spree/layouts/login.html.erb
|
164
|
+
- lib/views/emails/spree/user_mailer/confirmation_instructions.html.erb
|
165
|
+
- lib/views/emails/spree/user_mailer/confirmation_instructions.text.erb
|
166
|
+
- lib/views/emails/spree/user_mailer/reset_password_instructions.html.erb
|
167
|
+
- lib/views/emails/spree/user_mailer/reset_password_instructions.text.erb
|
168
168
|
- lib/views/frontend/spree/shared/_flashes.html.erb
|
169
169
|
- lib/views/frontend/spree/shared/_login_bar.html.erb
|
170
170
|
- lib/views/frontend/spree/user_passwords/edit.html.erb
|
@@ -213,9 +213,9 @@ licenses:
|
|
213
213
|
- BSD-3-Clause
|
214
214
|
metadata:
|
215
215
|
bug_tracker_uri: https://github.com/spree/spree_auth_devise/issues
|
216
|
-
changelog_uri: https://github.com/spree/spree_auth_devise/releases/tag/v4.
|
216
|
+
changelog_uri: https://github.com/spree/spree_auth_devise/releases/tag/v4.5.0
|
217
217
|
documentation_uri: https://guides.spreecommerce.org/
|
218
|
-
source_code_uri: https://github.com/spree/spree_auth_devise/tree/v4.
|
218
|
+
source_code_uri: https://github.com/spree/spree_auth_devise/tree/v4.5.0
|
219
219
|
post_install_message:
|
220
220
|
rdoc_options: []
|
221
221
|
require_paths:
|
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
232
|
version: '0'
|
233
233
|
requirements:
|
234
234
|
- none
|
235
|
-
rubygems_version: 3.
|
235
|
+
rubygems_version: 3.0.9
|
236
236
|
signing_key:
|
237
237
|
specification_version: 4
|
238
238
|
summary: Provides authentication and authorization services for use with Spree by
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class UserMailer < defined?(Spree::BaseMailer) ? Spree::BaseMailer : ActionMailer::Base
|
3
|
-
def reset_password_instructions(user, token, *_args)
|
4
|
-
current_store_id = _args.inject(:merge)[:current_store_id]
|
5
|
-
@current_store = Spree::Store.find(current_store_id) || Spree::Store.current
|
6
|
-
@locale = @current_store.has_attribute?(:default_locale) ? @current_store.default_locale : I18n.default_locale
|
7
|
-
I18n.locale = @locale if @locale.present?
|
8
|
-
@edit_password_reset_url = spree.edit_spree_user_password_url(reset_password_token: token, host: @current_store.url)
|
9
|
-
@user = user
|
10
|
-
|
11
|
-
mail to: user.email, from: @current_store.mail_from_address, subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions]), store_url: @current_store.url
|
12
|
-
end
|
13
|
-
|
14
|
-
def confirmation_instructions(user, token, _opts = {})
|
15
|
-
current_store_id = _opts[:current_store_id]
|
16
|
-
@current_store = Spree::Store.find(current_store_id) || Spree::Store.current
|
17
|
-
@confirmation_url = spree.confirmation_url(confirmation_token: token, host: Spree::Store.current.url)
|
18
|
-
@email = user.email
|
19
|
-
|
20
|
-
mail to: user.email, from: @current_store.mail_from_address, subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :confirmation_instructions]), store_url: @current_store.url
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
class AuthConfiguration < Preferences::Configuration
|
3
|
-
preference :registration_step, :boolean, default: true
|
4
|
-
preference :signout_after_password_change, :boolean, default: true
|
5
|
-
preference :confirmable, :boolean, default: false
|
6
|
-
preference :validatable, :boolean, default: true
|
7
|
-
end
|
8
|
-
end
|