spree_auth_devise 4.4.2 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +14 -73
  3. data/Gemfile +8 -1
  4. data/README.md +5 -11
  5. data/config/initializers/devise.rb +1 -1
  6. data/config/routes.rb +47 -45
  7. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +1 -1
  8. data/lib/controllers/backend/spree/{admin → auth/admin}/base_controller_decorator.rb +2 -2
  9. data/lib/controllers/backend/spree/{admin → auth/admin}/orders/customer_details_controller_decorator.rb +2 -2
  10. data/lib/controllers/backend/spree/{admin → auth/admin}/orders_controller_decorator.rb +2 -2
  11. data/lib/controllers/backend/spree/auth/admin/resource_controller_decorator.rb +6 -0
  12. data/lib/controllers/frontend/spree/{checkout_controller_decorator.rb → auth/checkout_controller_decorator.rb} +4 -4
  13. data/lib/controllers/frontend/spree/user_passwords_controller.rb +2 -2
  14. data/lib/controllers/frontend/spree/user_registrations_controller.rb +5 -3
  15. data/lib/controllers/frontend/spree/user_sessions_controller.rb +2 -2
  16. data/lib/controllers/frontend/spree/users_controller.rb +2 -2
  17. data/lib/mailers/spree/user_mailer.rb +38 -0
  18. data/lib/spree/auth/configuration.rb +33 -0
  19. data/lib/spree/auth/engine.rb +14 -3
  20. data/lib/spree/auth/version.rb +1 -1
  21. data/lib/spree/authentication_helpers.rb +6 -6
  22. data/lib/spree/testing_support/auth_helpers.rb +8 -0
  23. data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +17 -15
  24. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +13 -13
  25. data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +1 -1
  26. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +8 -9
  27. data/lib/views/backend/spree/layouts/login.html.erb +1 -1
  28. data/lib/views/frontend/spree/user_registrations/new.html.erb +1 -1
  29. data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +2 -2
  30. data/spec/controllers/spree/checkout_controller_spec.rb +34 -2
  31. data/spec/controllers/spree/products_controller_spec.rb +1 -0
  32. data/spec/controllers/spree/user_registrations_controller_spec.rb +44 -0
  33. data/spec/controllers/spree/user_sessions_controller_spec.rb +18 -0
  34. data/spec/controllers/spree/users_controller_spec.rb +39 -5
  35. data/spec/features/account_spec.rb +1 -0
  36. data/spec/features/admin/sign_in_spec.rb +20 -1
  37. data/spec/features/checkout_spec.rb +5 -4
  38. data/spec/features/confirmation_spec.rb +1 -1
  39. data/spec/features/sign_in_spec.rb +2 -2
  40. data/spec/mailers/user_mailer_spec.rb +3 -3
  41. data/spec/models/user_spec.rb +3 -3
  42. data/spec/support/configuration_helpers.rb +1 -1
  43. data/spec/support/confirm_helpers.rb +3 -1
  44. data/spree_auth_devise.gemspec +1 -1
  45. metadata +18 -18
  46. data/app/mailers/spree/user_mailer.rb +0 -23
  47. data/app/models/spree/auth_configuration.rb +0 -8
  48. data/lib/controllers/backend/spree/admin/resource_controller_decorator.rb +0 -6
  49. /data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.html.erb +0 -0
  50. /data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.text.erb +0 -0
  51. /data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.html.erb +0 -0
  52. /data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.text.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fb338dbef2e181d223f6e14b1a8d56bd70e583bb236ecad2e8dd789831961da
4
- data.tar.gz: bb1d7586b41087b8aea34ec13f1bad8be7474b4cd86595b66cab11c4debd0ff5
3
+ metadata.gz: be1bc8fb18988dfe1cc0e8f65220f824ce8553236a265add61e9530d11fe6c7c
4
+ data.tar.gz: 369edc99327bb03195a2c07007c9817c47036033db071b4c65da4567fa212505
5
5
  SHA512:
6
- metadata.gz: 2c787c99ace2df8fc064fcf729f00aee7443e3bace6633a9a105c68378cd672eee15fab48230318ce9af3c43b15e763eca90fe16287f114515d7a2f0922bf7a1
7
- data.tar.gz: e0ee63fa233a7e7e1b9300e5c283ee786127fbca22bfbfd352377b0d73b75a054008113cdeb90ceae4e9727cbc7b1007db4257fa2d2fa1f0f14a9c981b7f8fbe
6
+ metadata.gz: e8a5ab6f8ccc9d79f8a7767d213f08ef5e60fdb7c6b77640f2ef2719432a695de5bd64e480e818f444a16ca480d1daf45d524dbe1521405e7eab67e97e948791
7
+ data.tar.gz: 0ed79a471adfb6ff76d1d12a5302a6355e14362dd9318278c0810e2b7ddfc3e102b31c17f22b0d227ada3c9affdc7b8dbac264a52a295e158b1f15594f862b68
data/.circleci/config.yml CHANGED
@@ -9,55 +9,23 @@ defaults: &defaults
9
9
  BUNDLE_PATH: ~/spree/vendor/bundle
10
10
  working_directory: ~/spree
11
11
  docker:
12
- - image: &ruby_image circleci/ruby:2.7-node-browsers
12
+ - image: &ruby_image circleci/ruby:3.0-node-browsers
13
13
  - image: &redis_image circleci/redis:6.2-alpine
14
14
 
15
- defaults_3_0: &defaults_3_0
16
- <<: *defaults
17
- docker:
18
- - image: &ruby_3_0_image circleci/ruby:3.0-node-browsers
19
- - image: *redis_image
20
-
21
15
  run_tests: &run_tests
22
16
  <<: *defaults
23
- steps:
24
- - checkout
25
- - restore_cache:
26
- keys:
27
- - spree-auth-devise-bundle-v9-ruby-2-7-{{ .Branch }}
28
- - spree-auth-devise-bundle-v9-ruby-2-7
29
- - run:
30
- name: Set bundle path
31
- command: bundle config --local path vendor/bundle
32
- - run:
33
- name: Ensure bundle Install
34
- command: |
35
- bundle check || bundle install
36
- - run:
37
- name: Create test app
38
- command: |
39
- bundle exec rake test_app
40
- - run:
41
- name: Run Rspec
42
- command: |
43
- TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
44
- bundle exec rspec --format documentation \
45
- --format RspecJunitFormatter \
46
- -o ~/rspec/rspec.xml \
47
- -- ${TESTFILES}
48
- - store_test_results:
49
- path: ~/rspec
50
- - store_artifacts:
51
- path: tmp/capybara
52
-
53
- run_tests_3_0: &run_tests_3_0
54
- <<: *defaults_3_0
55
17
  steps:
56
18
  - checkout
57
19
  - restore_cache:
58
20
  keys:
59
21
  - spree-auth-devise-bundle-v9-ruby-3-0-{{ .Branch }}
60
22
  - spree-auth-devise-bundle-v9-ruby-3-0
23
+ - run:
24
+ name: Add keyserver
25
+ command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B
26
+ - run:
27
+ name: Install libvips
28
+ command: sudo apt-get update && sudo apt-get install libvips
61
29
  - run:
62
30
  name: Set bundle path
63
31
  command: bundle config --local path vendor/bundle
@@ -85,32 +53,18 @@ run_tests_3_0: &run_tests_3_0
85
53
  jobs:
86
54
  bundle:
87
55
  <<: *defaults
88
- steps:
89
- - checkout
90
- - restore_cache:
91
- keys:
92
- - spree-auth-devise-bundle-v9-ruby-2-7-{{ .Branch }}
93
- - spree-auth-devise-bundle-v9-ruby-2-7
94
- - run:
95
- name: Set bundle path
96
- command: bundle config --local path vendor/bundle
97
- - run:
98
- name: Bundle Install
99
- command: |
100
- bundle check || bundle install
101
- - save_cache:
102
- paths:
103
- - vendor/bundle
104
- key: spree-auth-devise-bundle-v9-ruby-2-7-{{ checksum "Gemfile.lock" }}
105
-
106
- bundle_ruby_3_0:
107
- <<: *defaults_3_0
108
56
  steps:
109
57
  - checkout
110
58
  - restore_cache:
111
59
  keys:
112
60
  - spree-auth-devise-bundle-v9-ruby-3-0-{{ .Branch }}
113
61
  - spree-auth-devise-bundle-v9-ruby-3-0
62
+ - run:
63
+ name: Add keyserver
64
+ command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B
65
+ - run:
66
+ name: Install libvips
67
+ command: sudo apt-get update && sudo apt-get install libvips
114
68
  - run:
115
69
  name: Set bundle path
116
70
  command: bundle config --local path vendor/bundle
@@ -137,15 +91,6 @@ jobs:
137
91
  environment:
138
92
  POSTGRES_USER: postgres
139
93
 
140
- tests_postgres_ruby_3_0: &tests_postgres_ruby_3_0
141
- <<: *run_tests_3_0
142
- environment:
143
- <<: *postgres_environment
144
- docker:
145
- - image: *ruby_3_0_image
146
- - image: *postgres_image
147
- - image: *redis_image
148
-
149
94
  tests_mysql: &tests_mysql
150
95
  <<: *run_tests
151
96
  environment: &mysql_environment
@@ -165,13 +110,9 @@ workflows:
165
110
  main:
166
111
  jobs:
167
112
  - bundle
168
- - bundle_ruby_3_0
169
113
  - tests_postgres:
170
114
  requires:
171
115
  - bundle
172
- - tests_postgres_ruby_3_0:
173
- requires:
174
- - bundle_ruby_3_0
175
116
  - tests_mysql:
176
117
  requires:
177
- - bundle
118
+ - 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
data/config/routes.rb CHANGED
@@ -1,52 +1,54 @@
1
1
  Spree::Core::Engine.add_routes do
2
- devise_for :spree_user,
3
- class_name: Spree.user_class.to_s,
4
- controllers: { sessions: 'spree/user_sessions',
5
- registrations: 'spree/user_registrations',
6
- passwords: 'spree/user_passwords',
7
- confirmations: 'spree/user_confirmations' },
8
- skip: [:unlocks, :omniauth_callbacks],
9
- path_names: { sign_out: 'logout' },
10
- path_prefix: :user
2
+ scope '(:locale)', locale: /#{Spree.available_locales.join('|')}/, defaults: { locale: nil } do
3
+ devise_for :spree_user,
4
+ class_name: Spree.user_class.to_s,
5
+ controllers: { sessions: 'spree/user_sessions',
6
+ registrations: 'spree/user_registrations',
7
+ passwords: 'spree/user_passwords',
8
+ confirmations: 'spree/user_confirmations' },
9
+ skip: [:unlocks, :omniauth_callbacks],
10
+ path_names: { sign_out: 'logout' },
11
+ path_prefix: :user
11
12
 
12
- devise_scope :spree_user do
13
- get '/login' => 'user_sessions#new', :as => :login
14
- post '/login' => 'user_sessions#create', :as => :create_new_session
15
- get '/logout' => 'user_sessions#destroy', :as => :logout
16
- get '/signup' => 'user_registrations#new', :as => :signup
17
- post '/signup' => 'user_registrations#create', :as => :registration
18
- get '/password/recover' => 'user_passwords#new', :as => :recover_password
19
- post '/password/recover' => 'user_passwords#create', :as => :reset_password
20
- get '/password/change' => 'user_passwords#edit', :as => :edit_password
21
- put '/password/change' => 'user_passwords#update', :as => :update_password
22
- get '/confirm' => 'user_confirmations#show', :as => :confirmation
23
- end
13
+ devise_scope :spree_user do
14
+ get '/login' => 'user_sessions#new', :as => :login
15
+ post '/login' => 'user_sessions#create', :as => :create_new_session
16
+ get '/logout' => 'user_sessions#destroy', :as => :logout
17
+ get '/signup' => 'user_registrations#new', :as => :signup
18
+ post '/signup' => 'user_registrations#create', :as => :registration
19
+ get '/password/recover' => 'user_passwords#new', :as => :recover_password
20
+ post '/password/recover' => 'user_passwords#create', :as => :reset_password
21
+ get '/password/change' => 'user_passwords#edit', :as => :edit_password
22
+ put '/password/change' => 'user_passwords#update', :as => :update_password
23
+ get '/confirm' => 'user_confirmations#show', :as => :confirmation
24
+ end
24
25
 
25
- if Spree::Core::Engine.frontend_available?
26
- resources :users, only: [:edit, :update]
27
- get '/checkout/registration' => 'checkout#registration', :as => :checkout_registration
28
- put '/checkout/registration' => 'checkout#update_registration', :as => :update_checkout_registration
29
- resource :account, controller: 'users'
30
- end
26
+ if Spree::Core::Engine.frontend_available?
27
+ resources :users, only: [:edit, :update]
28
+ get '/checkout/registration' => 'checkout#registration', :as => :checkout_registration
29
+ put '/checkout/registration' => 'checkout#update_registration', :as => :update_checkout_registration
30
+ resource :account, controller: 'users'
31
+ end
31
32
 
32
- if Spree.respond_to?(:admin_path) && Spree::Core::Engine.backend_available?
33
- namespace :admin, path: Spree.admin_path do
34
- devise_for :spree_user,
35
- class_name: Spree.user_class.to_s,
36
- controllers: { sessions: 'spree/admin/user_sessions',
37
- passwords: 'spree/admin/user_passwords' },
38
- skip: [:unlocks, :omniauth_callbacks, :registrations],
39
- path_names: { sign_out: 'logout' },
40
- path_prefix: :user
41
- devise_scope :spree_user do
42
- get '/authorization_failure', to: 'user_sessions#authorization_failure', as: :unauthorized
43
- get '/login' => 'user_sessions#new', :as => :login
44
- post '/login' => 'user_sessions#create', :as => :create_new_session
45
- get '/logout' => 'user_sessions#destroy', :as => :logout
46
- get '/password/recover' => 'user_passwords#new', :as => :recover_password
47
- post '/password/recover' => 'user_passwords#create', :as => :reset_password
48
- get '/password/change' => 'user_passwords#edit', :as => :edit_password
49
- put '/password/change' => 'user_passwords#update', :as => :update_password
33
+ if Spree.respond_to?(:admin_path) && Spree::Core::Engine.backend_available?
34
+ namespace :admin, path: Spree.admin_path do
35
+ devise_for :spree_user,
36
+ class_name: Spree.user_class.to_s,
37
+ controllers: { sessions: 'spree/admin/user_sessions',
38
+ passwords: 'spree/admin/user_passwords' },
39
+ skip: [:unlocks, :omniauth_callbacks, :registrations],
40
+ path_names: { sign_out: 'logout' },
41
+ path_prefix: :user
42
+ devise_scope :spree_user do
43
+ get '/authorization_failure', to: 'user_sessions#authorization_failure', as: :unauthorized
44
+ get '/login' => 'user_sessions#new', :as => :login
45
+ post '/login' => 'user_sessions#create', :as => :create_new_session
46
+ get '/logout' => 'user_sessions#destroy', :as => :logout
47
+ get '/password/recover' => 'user_passwords#new', :as => :recover_password
48
+ post '/password/recover' => 'user_passwords#create', :as => :reset_password
49
+ get '/password/change' => 'user_passwords#edit', :as => :edit_password
50
+ put '/password/change' => 'user_passwords#update', :as => :update_password
51
+ end
50
52
  end
51
53
  end
52
54
  end
@@ -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/admin'
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)
@@ -0,0 +1,6 @@
1
+ module Spree::Auth::Admin::ResourceControllerDecorator
2
+ def self.prepended(base)
3
+ base.rescue_from CanCan::AccessDenied, with: :unauthorized
4
+ end
5
+ end
6
+ Spree::Admin::ResourceController.prepend(Spree::Auth::Admin::ResourceControllerDecorator)
@@ -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
@@ -48,7 +48,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
48
48
  end
49
49
  else
50
50
  clean_up_passwords(resource)
51
- render :new
51
+ render :new, status: :unprocessable_entity
52
52
  end
53
53
  end
54
54
 
@@ -94,7 +94,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
94
94
  scope = Devise::Mapping.find_scope!(resource)
95
95
  router_name = Devise.mappings[scope].router_name
96
96
  context = router_name ? send(router_name) : self
97
- context.respond_to?(:login_path) ? context.login_path : "/login"
97
+ context.respond_to?(:login_path) ? context.login_path(locale_param) : spree.root_path
98
98
  end
99
99
 
100
100
  private
@@ -104,7 +104,9 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
104
104
  end
105
105
 
106
106
  def spree_user_params
107
- params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes)
107
+ user_params = params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes)
108
+ user_params[:selected_locale] = current_locale
109
+ user_params
108
110
  end
109
111
 
110
112
  def after_sign_in_redirect(resource_or_scope)
@@ -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
@@ -81,6 +81,6 @@ class Spree::UserSessionsController < Devise::SessionsController
81
81
  scope = Devise::Mapping.find_scope!(resource_or_scope)
82
82
  router_name = Devise.mappings[scope].router_name
83
83
  context = router_name ? send(router_name) : self
84
- context.respond_to?(:login_path) ? context.login_path : spree.root_path
84
+ context.respond_to?(:login_path) ? context.login_path(locale_param) : spree.root_path
85
85
  end
86
86
  end
@@ -23,7 +23,7 @@ class Spree::UsersController < Spree::StoreController
23
23
 
24
24
  redirect_back_or_default(root_url)
25
25
  else
26
- render :new
26
+ render :new, status: :unprocessable_entity
27
27
  end
28
28
  end
29
29
 
@@ -41,7 +41,7 @@ class Spree::UsersController < Spree::StoreController
41
41
  end
42
42
  redirect_to spree.account_path, notice: Spree.t(:account_updated)
43
43
  else
44
- render :edit
44
+ render :edit, status: :unprocessable_entity
45
45
  end
46
46
  end
47
47
 
@@ -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,33 @@
1
+ module Spree
2
+ module Auth
3
+ class Configuration
4
+ attr_accessor :registration_step,
5
+ :signout_after_password_change,
6
+ :confirmable,
7
+ :validatable
8
+
9
+ def initialize
10
+ self.registration_step = true
11
+ self.signout_after_password_change = true
12
+ self.confirmable = false
13
+ self.validatable = true
14
+ end
15
+
16
+ def configure
17
+ yield(self) if block_given?
18
+ end
19
+
20
+ def get(preference)
21
+ send(preference)
22
+ end
23
+
24
+ alias [] get
25
+
26
+ def set(preference, value)
27
+ send("#{preference}=", value)
28
+ end
29
+
30
+ alias []= set
31
+ end
32
+ end
33
+ end
@@ -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::AuthConfiguration.new
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' if Spree.user_class.blank? || Spree.user_class.to_s == 'Spree::LegacyUser'
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 ||= ::Rails::Engine.subclasses.map(&:instance).map{ |e| e.class.to_s }.include?('Spree::Frontend::Engine')
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
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  module Auth
3
- VERSION = '4.4.2'.freeze
3
+ VERSION = '4.6.0'.freeze
4
4
 
5
5
  def gem_version
6
6
  Gem::Version.new(VERSION)
@@ -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