spree_auth_devise 4.0.0 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +41 -0
  3. data/.gitignore +1 -0
  4. data/.travis.yml +30 -37
  5. data/Appraisals +3 -14
  6. data/Gemfile +2 -2
  7. data/README.md +3 -12
  8. data/Rakefile +9 -3
  9. data/app/controllers/spree/api/v2/storefront/account_confirmations_controller.rb +20 -0
  10. data/app/controllers/spree/api/v2/storefront/passwords_controller.rb +35 -0
  11. data/app/controllers/spree/user_confirmations_controller.rb +33 -0
  12. data/app/controllers/spree/user_passwords_controller.rb +13 -4
  13. data/app/controllers/spree/user_registrations_controller.rb +37 -4
  14. data/app/controllers/spree/user_sessions_controller.rb +33 -4
  15. data/app/mailers/spree/user_mailer.rb +6 -2
  16. data/app/models/spree/user.rb +17 -0
  17. data/app/services/spree/account/create.rb +19 -0
  18. data/app/services/spree/account/update.rb +17 -0
  19. data/app/views/spree/user_mailer/confirmation_instructions.text.erb +3 -3
  20. data/app/views/spree/user_mailer/reset_password_instructions.text.erb +2 -7
  21. data/app/views/spree/user_passwords/edit.html.erb +20 -17
  22. data/app/views/spree/user_passwords/new.html.erb +17 -15
  23. data/app/views/spree/user_registrations/new.html.erb +12 -17
  24. data/app/views/spree/user_sessions/new.html.erb +11 -12
  25. data/config/locales/de.yml +18 -0
  26. data/config/locales/en.yml +10 -3
  27. data/config/locales/zh-TW.yml +60 -0
  28. data/config/routes.rb +12 -3
  29. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -2
  30. data/gemfiles/{spree_3_5.gemfile → spree_4_1.gemfile} +1 -1
  31. data/lib/controllers/api/spree/api/v2/storefront/account_controller_decorator.rb +41 -0
  32. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +2 -2
  33. data/lib/controllers/frontend/spree/users_controller.rb +10 -5
  34. data/lib/generators/spree/auth/install/install_generator.rb +0 -4
  35. data/lib/spree/auth/engine.rb +14 -1
  36. data/lib/spree/testing_support/auth_helpers.rb +36 -0
  37. data/lib/spree/testing_support/checkout_helpers.rb +24 -0
  38. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +1 -1
  39. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +1 -1
  40. data/spec/controllers/spree/admin/orders_controller_spec.rb +1 -1
  41. data/spec/controllers/spree/admin/user_sessions_controller_spec.rb +1 -1
  42. data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +63 -0
  43. data/spec/controllers/spree/checkout_controller_spec.rb +12 -13
  44. data/spec/controllers/spree/products_controller_spec.rb +1 -1
  45. data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -4
  46. data/spec/controllers/spree/user_registrations_controller_spec.rb +8 -8
  47. data/spec/controllers/spree/user_sessions_controller_spec.rb +17 -17
  48. data/spec/controllers/spree/users_controller_spec.rb +4 -4
  49. data/spec/features/account_spec.rb +10 -8
  50. data/spec/features/admin/password_reset_spec.rb +2 -4
  51. data/spec/features/admin/sign_in_spec.rb +13 -9
  52. data/spec/features/admin/sign_out_spec.rb +1 -1
  53. data/spec/features/admin_permissions_spec.rb +1 -1
  54. data/spec/features/change_email_spec.rb +1 -7
  55. data/spec/features/checkout_spec.rb +38 -63
  56. data/spec/features/confirmation_spec.rb +3 -5
  57. data/spec/features/order_spec.rb +9 -15
  58. data/spec/features/password_reset_spec.rb +2 -4
  59. data/spec/features/sign_in_spec.rb +21 -17
  60. data/spec/features/sign_out_spec.rb +14 -23
  61. data/spec/features/sign_up_spec.rb +6 -4
  62. data/spec/mailers/user_mailer_spec.rb +3 -3
  63. data/spec/models/user_spec.rb +9 -7
  64. data/spec/requests/spree/api/v2/storefront/account_confirmation_spec.rb +48 -0
  65. data/spec/requests/spree/api/v2/storefront/account_spec.rb +101 -0
  66. data/spec/requests/spree/frontend/user_update_spec.rb +42 -0
  67. data/spec/spec_helper.rb +7 -22
  68. data/spree_auth_devise.gemspec +6 -24
  69. metadata +42 -334
  70. data/app/overrides/auth_shared_login_bar.rb +0 -6
  71. data/app/views/spree/shared/_login.html.erb +0 -18
  72. data/app/views/spree/shared/_user_form.html.erb +0 -17
  73. data/gemfiles/spree_3_2.gemfile +0 -8
  74. data/gemfiles/spree_3_7.gemfile +0 -9
  75. data/gemfiles/spree_4_0.gemfile +0 -8
  76. data/lib/assets/javascripts/spree/backend/spree_auth.js.erb +0 -1
  77. data/lib/assets/javascripts/spree/frontend/account.js +0 -8
  78. data/lib/assets/javascripts/spree/frontend/spree_auth.js.erb +0 -2
  79. data/lib/assets/stylesheets/spree/backend/spree_auth.css.erb +0 -3
  80. data/lib/assets/stylesheets/spree/frontend/spree_auth.css.erb +0 -3
  81. data/lib/controllers/frontend/spree/store_controller_decorator.rb +0 -7
  82. data/lib/views/frontend/spree/checkout/_new_user.html.erb +0 -20
  83. data/lib/views/frontend/spree/checkout/registration.html.erb +0 -25
  84. data/lib/views/frontend/spree/shared/_link_to_account.html.erb +0 -6
  85. data/lib/views/frontend/spree/users/edit.html.erb +0 -17
  86. data/lib/views/frontend/spree/users/show.html.erb +0 -48
  87. data/spec/support/add_to_cart.rb +0 -15
  88. data/spec/support/authentication_helpers.rb +0 -14
  89. data/spec/support/cache_helpers.rb +0 -5
  90. data/spec/support/capybara.rb +0 -16
  91. data/spec/support/database_cleaner.rb +0 -17
  92. data/spec/support/factory_girl.rb +0 -5
  93. data/spec/support/spree.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa05d3638b5f55b4d34d7fac9d9eb3cddf96eeb473f1d08fb6fc8ca479095e93
4
- data.tar.gz: 5199a26bce744922a94d8364061020c9a7e7d45c7631398a19879a780b619ed5
3
+ metadata.gz: 7cd5aef076f37e51acf8e77f9dc7aa8c14b3c38d38bb58c689fca12e59d6fc82
4
+ data.tar.gz: df4827dc1c68ed09ad300257ae97c9a10ad88e564a629bff09cd9b8568df9c6f
5
5
  SHA512:
6
- metadata.gz: b773b386f23743e4097751f8e471f34f984a4e34c6f20638ae6e011605c11dbb459d56c898c7b729053b59eafb30fd8aff3f481cd6dc8dda674c71cd668ba406
7
- data.tar.gz: dbf83d876e7b4a8c86b8776e56462ab4c7cc33105db55d944d920cbbc96415ce4516fb981e9105650096591b400e38f4a00fd5a9da11518b710dc04d6d8636b0
6
+ metadata.gz: 4a07f459d80a0260fd2a19a875d0ea6f392768c7d4a33db41574a238231e5a68234dc1e73c35d2287fb4eb73d9f30f9ac0ea1cbfb86af35fe5418fb061daf116
7
+ data.tar.gz: b14f4d2f862e49522de9f4704baa56bb81f876185ee693e27171a5ba68eb1abe5cc2c527a2fe8e4c1dfc01620765093d4edd8d62ca98471633f9163af2fd4eda
@@ -0,0 +1,41 @@
1
+ version: 2
2
+
3
+ jobs:
4
+ update_staging_repository:
5
+ docker:
6
+ - image: circleci/ruby:2.6.3
7
+ steps:
8
+ - add_ssh_keys:
9
+ fingerprints:
10
+ - 54:50:5e:4e:80:6d:2e:26:43:c6:99:bd:39:b2:71:dc
11
+ - run: mkdir -p ~/.ssh
12
+ - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts
13
+ - run: ssh-add -D
14
+ - run: ssh-add ~/.ssh/id_rsa_54505e4e806d2e2643c699bd39b271dc
15
+ - run: git clone -b master git@github.com:spark-solutions/spree-designs.git
16
+ - run: gem install bundler -v 1.17.3
17
+ - run:
18
+ command: bundle update spree_auth_devise
19
+ working_directory: ~/project/spree-designs
20
+ - run:
21
+ command: |
22
+ git config user.name 'AutoDeploy'
23
+ git config user.email 'autodeploy@sparksolutions.co'
24
+ working_directory: ~/project/spree-designs
25
+ - run:
26
+ command: |
27
+ git add -A
28
+ git commit -m "Auto-commit v#${CIRCLE_BUILD_NUM}"
29
+ working_directory: ~/project/spree-designs
30
+ - run:
31
+ command: git push origin master
32
+ working_directory: ~/project/spree-designs
33
+
34
+ workflows:
35
+ version: 2
36
+ update_staging_repository:
37
+ jobs:
38
+ - update_staging_repository:
39
+ filters:
40
+ branches:
41
+ only: master
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ public/spree
20
20
  .ruby-gemset
21
21
  gemfiles/*.gemfile.lock
22
22
  *.gem
23
+ .bundle
data/.travis.yml CHANGED
@@ -1,51 +1,44 @@
1
- sudo: required
2
- dist: trusty
3
-
4
- script:
5
- - bundle exec rake test_app
6
- - bundle exec rake spec
1
+ os: linux
2
+ dist: bionic
7
3
 
8
4
  addons:
9
- chrome: stable
10
- postgresql: 9.4
5
+ apt:
6
+ sources:
7
+ - google-chrome
8
+ packages:
9
+ - google-chrome-stable
11
10
 
12
- env:
13
- - DB=mysql
14
- - DB=postgres
11
+ services:
12
+ - mysql
13
+ - postgresql
15
14
 
16
15
  language: ruby
17
16
 
18
17
  rvm:
19
- - 2.5.1
20
- - 2.4.4
21
- - 2.3.8
18
+ - 2.5
19
+ - 2.6
20
+
21
+ env:
22
+ - DB=mysql
23
+ - DB=postgres
22
24
 
23
25
  gemfile:
24
- - gemfiles/spree_3_5.gemfile
25
- - gemfiles/spree_3_7.gemfile
26
- - gemfiles/spree_4_0.gemfile
26
+ - gemfiles/spree_4_1.gemfile
27
27
  - gemfiles/spree_master.gemfile
28
28
 
29
- matrix:
30
- allow_failures:
31
- - gemfile: gemfiles/spree_master.gemfile
32
- exclude:
33
- - rvm: 2.3.8
34
- gemfile: gemfiles/spree_4_0.gemfile
35
- - rvm: 2.4.4
36
- gemfile: gemfiles/spree_4_0.gemfile
37
- - rvm: 2.3.8
38
- gemfile: gemfiles/spree_master.gemfile
39
- - rvm: 2.4.4
40
- gemfile: gemfiles/spree_master.gemfile
41
- - rvm: 2.5.1
42
- gemfile: gemfiles/spree_3_5.gemfile
29
+ jobs:
30
+ allow_failures:
31
+ - gemfile: gemfiles/spree_master.gemfile
43
32
 
44
33
  before_install:
45
34
  - mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
46
- - wget -N https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip -P ~/
47
- - unzip ~/chromedriver_linux64.zip -d ~/
48
- - rm ~/chromedriver_linux64.zip
49
- - sudo mv -f ~/chromedriver /usr/local/share/
50
- - sudo chmod +x /usr/local/share/chromedriver
51
- - sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
35
+
36
+ before_script:
37
+ - CHROME_MAIN_VERSION=`google-chrome-stable --version | sed -E 's/(^Google Chrome |\.[0-9]+ )//g'`
38
+ - CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_MAIN_VERSION"`
39
+ - curl "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
40
+ - unzip chromedriver_linux64.zip -d ~/bin
41
+
42
+ script:
43
+ - bundle exec rake test_app
44
+ - bundle exec rake spec
data/Appraisals CHANGED
@@ -1,20 +1,9 @@
1
- appraise 'spree-3-5' do
2
- gem 'spree', '~> 3.5.0'
3
- gem 'rails-controller-testing'
4
- end
5
-
6
- appraise 'spree-3-7' do
7
- gem 'sass-rails'
8
- gem 'spree', '~> 3.7.0'
9
- gem 'rails-controller-testing'
10
- end
11
-
12
- appraise 'spree-4-0' do
13
- gem 'spree', '~> 4.0.0.rc2'
1
+ appraise 'spree-4-1' do
14
2
  gem 'rails-controller-testing'
3
+ gem 'spree', '~> 4.1'
15
4
  end
16
5
 
17
6
  appraise 'spree-master' do
18
- gem 'spree', github: 'spree/spree', branch: 'master'
19
7
  gem 'rails-controller-testing'
8
+ gem 'spree', github: 'spree/spree', branch: 'master'
20
9
  end
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "rails-controller-testing"
4
- gem 'spree', github: 'spree/spree', branch: 'master'
3
+ gem 'rails-controller-testing'
4
+ gem 'spree', '~> 4.2.0'
5
5
 
6
6
  gemspec
data/README.md CHANGED
@@ -10,20 +10,11 @@ Provides authentication services for [Spree](https://spreecommerce.org), using t
10
10
 
11
11
  1. Add this extension to your Gemfile with this line:
12
12
 
13
- #### Spree >= 3.1
14
-
15
- ```ruby
16
- gem 'spree_auth_devise', '~> 3.3'
17
- ```
18
-
19
- #### Spree 3.0 and Spree 2.x
20
-
21
13
  ```ruby
22
- gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'X-X-stable'
14
+ gem 'spree_auth_devise'
23
15
  ```
24
-
25
- The `branch` option is important: it must match the version of Spree you're using.
26
- For example, use `3-0-stable` if you're using Spree `3-0-stable` or any `3.0.x` version.
16
+
17
+ if you run into any version-mismatch problems please run `bundle update`
27
18
 
28
19
  2. Install the gem using Bundler:
29
20
  ```ruby
data/Rakefile CHANGED
@@ -2,14 +2,20 @@ require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
- require 'spree/testing_support/common_rake'
5
+ require 'spree/testing_support/extension_rake'
6
6
 
7
7
  RSpec::Core::RakeTask.new
8
8
 
9
- task default: :spec
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
10
16
 
11
17
  desc 'Generates a dummy app for testing'
12
18
  task :test_app do
13
19
  ENV['LIB_NAME'] = 'spree/auth'
14
- Rake::Task['common:test_app'].invoke("Spree::User")
20
+ Rake::Task['extension:test_app'].invoke
15
21
  end
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class AccountConfirmationsController < ::Spree::Api::V2::BaseController
6
+
7
+ def show
8
+ user = Spree.user_class.confirm_by_token(params[:id])
9
+
10
+ if user.errors.empty?
11
+ render json: { data: { state: user.respond_to?(:state) ? user.state : '' } }, status: :ok
12
+ else
13
+ render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class PasswordsController < ::Spree::Api::V2::BaseController
6
+ include Spree::Core::ControllerHelpers::Store
7
+
8
+ def create
9
+ user = Spree.user_class.find_by(email: params[:user][:email])
10
+
11
+ if user&.send_reset_password_instructions(current_store)
12
+ head :ok
13
+ else
14
+ head :not_found
15
+ end
16
+ end
17
+
18
+ def update
19
+ user = Spree.user_class.reset_password_by_token(
20
+ password: params[:user][:password],
21
+ password_confirmation: params[:user][:password_confirmation],
22
+ reset_password_token: params[:id]
23
+ )
24
+
25
+ if user.errors.empty?
26
+ head :ok
27
+ else
28
+ render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -6,6 +6,39 @@ class Spree::UserConfirmationsController < Devise::ConfirmationsController
6
6
  include Spree::Core::ControllerHelpers::Order
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
 
9
+ include SpreeI18n::ControllerLocaleHelper if defined?(SpreeI18n::ControllerLocaleHelper)
10
+
11
+ include Spree::Core::ControllerHelpers::Currency if defined?(Spree::Core::ControllerHelpers::Currency)
12
+ include Spree::Core::ControllerHelpers::Locale if defined?(Spree::Core::ControllerHelpers::Locale)
13
+
14
+ include Spree::LocaleUrls if defined?(Spree::LocaleUrls)
15
+
16
+ helper 'spree/locale' if defined?(Spree::LocaleHelper)
17
+ helper 'spree/currency' if defined?(Spree::CurrencyHelper)
18
+ helper 'spree/store' if defined?(Spree::StoreHelper)
19
+
20
+ # GET /resource/confirmation?confirmation_token=abcdef
21
+ def show
22
+ self.resource = resource_class.confirm_by_token(params[:confirmation_token])
23
+ yield resource if block_given?
24
+
25
+ if resource.errors.empty?
26
+ set_flash_message!(:notice, :confirmed)
27
+ respond_with_navigational(resource) do
28
+ redirect_to after_confirmation_path_for(resource_name, resource)
29
+ end
30
+ elsif resource.confirmed?
31
+ set_flash_message(:error, :already_confirmed)
32
+ respond_with_navigational(resource) do
33
+ redirect_to after_confirmation_path_for(resource_name, resource)
34
+ end
35
+ else
36
+ respond_with_navigational(resource.errors, status: :unprocessable_entity) do
37
+ render :new
38
+ end
39
+ end
40
+ end
41
+
9
42
  protected
10
43
 
11
44
  def after_confirmation_path_for(resource_name, resource)
@@ -6,9 +6,18 @@ class Spree::UserPasswordsController < Devise::PasswordsController
6
6
  include Spree::Core::ControllerHelpers::Order
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
 
9
- if defined?(SpreeI18n::ControllerLocaleHelper)
10
- include SpreeI18n::ControllerLocaleHelper
11
- end
9
+ include SpreeI18n::ControllerLocaleHelper if defined?(SpreeI18n::ControllerLocaleHelper)
10
+
11
+ include Spree::Core::ControllerHelpers::Currency if defined?(Spree::Core::ControllerHelpers::Currency)
12
+ include Spree::Core::ControllerHelpers::Locale if defined?(Spree::Core::ControllerHelpers::Locale)
13
+
14
+ include Spree::LocaleUrls if defined?(Spree::LocaleUrls)
15
+
16
+ helper 'spree/locale' if defined?(Spree::LocaleHelper)
17
+ helper 'spree/currency' if defined?(Spree::CurrencyHelper)
18
+ helper 'spree/store' if defined?(Spree::StoreHelper)
19
+
20
+ before_action :set_current_order
12
21
 
13
22
  # Overridden due to bug in Devise.
14
23
  # respond_with resource, :location => new_session_path(resource_name)
@@ -18,7 +27,7 @@ class Spree::UserPasswordsController < Devise::PasswordsController
18
27
  # respond_with resource, :location => spree.login_path
19
28
  #
20
29
  def create
21
- self.resource = resource_class.send_reset_password_instructions(params[resource_name])
30
+ self.resource = resource_class.send_reset_password_instructions(params[resource_name], current_store)
22
31
 
23
32
  if resource.errors.empty?
24
33
  set_flash_message(:notice, :send_instructions) if is_navigational_format?
@@ -6,11 +6,19 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
6
6
  include Spree::Core::ControllerHelpers::Order
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
 
9
- if defined?(SpreeI18n::ControllerLocaleHelper)
10
- include SpreeI18n::ControllerLocaleHelper
11
- end
9
+ include SpreeI18n::ControllerLocaleHelper if defined?(SpreeI18n::ControllerLocaleHelper)
10
+
11
+ include Spree::Core::ControllerHelpers::Currency if defined?(Spree::Core::ControllerHelpers::Currency)
12
+ include Spree::Core::ControllerHelpers::Locale if defined?(Spree::Core::ControllerHelpers::Locale)
13
+
14
+ include Spree::LocaleUrls if defined?(Spree::LocaleUrls)
15
+
16
+ helper 'spree/locale' if defined?(Spree::LocaleHelper)
17
+ helper 'spree/currency' if defined?(Spree::CurrencyHelper)
18
+ helper 'spree/store' if defined?(Spree::StoreHelper)
12
19
 
13
20
  before_action :check_permissions, only: [:edit, :update]
21
+ before_action :set_current_order
14
22
  skip_before_action :require_no_authentication
15
23
 
16
24
  # GET /resource/sign_up
@@ -29,7 +37,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
29
37
  set_flash_message :notice, :signed_up
30
38
  sign_up(resource_name, resource)
31
39
  session[:spree_user_signup] = true
32
- respond_with resource, location: after_sign_up_path_for(resource)
40
+ redirect_to_checkout_or_account_path(resource)
33
41
  else
34
42
  set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}"
35
43
  expire_data_after_sign_in!
@@ -75,9 +83,34 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
75
83
  'devise.user_registrations'
76
84
  end
77
85
 
86
+ def after_sign_up_path_for(resource)
87
+ after_sign_in_redirect(resource) if is_navigational_format?
88
+ end
89
+
90
+ def after_inactive_sign_up_path_for(resource)
91
+ scope = Devise::Mapping.find_scope!(resource)
92
+ router_name = Devise.mappings[scope].router_name
93
+ context = router_name ? send(router_name) : self
94
+ context.respond_to?(:login_path) ? context.login_path : "/login"
95
+ end
96
+
78
97
  private
79
98
 
80
99
  def spree_user_params
81
100
  params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes)
82
101
  end
102
+
103
+ def after_sign_in_redirect(resource_or_scope)
104
+ stored_location_for(resource_or_scope) || account_path
105
+ end
106
+
107
+ def redirect_to_checkout_or_account_path(resource)
108
+ resource_path = after_sign_up_path_for(resource)
109
+
110
+ if resource_path == spree.checkout_state_path(:address)
111
+ respond_with resource, location: spree.checkout_state_path(:address)
112
+ else
113
+ respond_with resource, location: spree.account_path
114
+ end
115
+ end
83
116
  end
@@ -6,9 +6,18 @@ class Spree::UserSessionsController < Devise::SessionsController
6
6
  include Spree::Core::ControllerHelpers::Order
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
 
9
- if defined?(SpreeI18n::ControllerLocaleHelper)
10
- include SpreeI18n::ControllerLocaleHelper
11
- end
9
+ include SpreeI18n::ControllerLocaleHelper if defined?(SpreeI18n::ControllerLocaleHelper)
10
+
11
+ include Spree::Core::ControllerHelpers::Currency if defined?(Spree::Core::ControllerHelpers::Currency)
12
+ include Spree::Core::ControllerHelpers::Locale if defined?(Spree::Core::ControllerHelpers::Locale)
13
+
14
+ include Spree::LocaleUrls if defined?(Spree::LocaleUrls)
15
+
16
+ helper 'spree/locale' if defined?(Spree::LocaleHelper)
17
+ helper 'spree/currency' if defined?(Spree::CurrencyHelper)
18
+ helper 'spree/store' if defined?(Spree::StoreHelper)
19
+
20
+ before_action :set_current_order
12
21
 
13
22
  def create
14
23
  authenticate_spree_user!
@@ -17,7 +26,7 @@ class Spree::UserSessionsController < Devise::SessionsController
17
26
  respond_to do |format|
18
27
  format.html {
19
28
  flash[:success] = Spree.t(:logged_in_succesfully)
20
- redirect_back_or_default(after_sign_in_path_for(spree_current_user))
29
+ redirect_back_or_default(after_sign_in_redirect(spree_current_user))
21
30
  }
22
31
  format.js {
23
32
  render json: { user: spree_current_user,
@@ -54,4 +63,24 @@ class Spree::UserSessionsController < Devise::SessionsController
54
63
  redirect_to(session["spree_user_return_to"] || default)
55
64
  session["spree_user_return_to"] = nil
56
65
  end
66
+
67
+ def after_sign_in_redirect(resource_or_scope)
68
+ stored_location_for(resource_or_scope) || account_path
69
+ end
70
+
71
+ def respond_to_on_destroy
72
+ # We actually need to hardcode this as Rails default responder doesn't
73
+ # support returning empty response on GET request
74
+ respond_to do |format|
75
+ format.all { head :no_content }
76
+ format.any(*navigational_formats) { redirect_to after_sign_out_redirect(resource_name) }
77
+ end
78
+ end
79
+
80
+ def after_sign_out_redirect(resource_or_scope)
81
+ scope = Devise::Mapping.find_scope!(resource_or_scope)
82
+ router_name = Devise.mappings[scope].router_name
83
+ context = router_name ? send(router_name) : self
84
+ context.respond_to?(:login_path) ? context.login_path : "/"
85
+ end
57
86
  end
@@ -1,9 +1,13 @@
1
1
  module Spree
2
2
  class UserMailer < BaseMailer
3
3
  def reset_password_instructions(user, token, *_args)
4
- @edit_password_reset_url = spree.edit_spree_user_password_url(reset_password_token: token, host: Spree::Store.current.url)
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)
5
9
 
6
- mail to: user.email, from: from_address, subject: Spree::Store.current.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions])
10
+ mail to: user.email, from: from_address, subject: @current_store.name + ' ' + I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions])
7
11
  end
8
12
 
9
13
  def confirmation_instructions(user, token, _opts = {})
@@ -27,6 +27,23 @@ module Spree
27
27
  has_spree_role?('admin')
28
28
  end
29
29
 
30
+ def self.send_reset_password_instructions(attributes={}, current_store)
31
+ recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
32
+ recoverable.send_reset_password_instructions(current_store) if recoverable.persisted?
33
+ recoverable
34
+ end
35
+
36
+ def send_reset_password_instructions(current_store)
37
+ token = set_reset_password_token
38
+ send_reset_password_instructions_notification(token, current_store.id)
39
+
40
+ token
41
+ end
42
+
43
+ def send_reset_password_instructions_notification(token, current_store_id)
44
+ send_devise_notification(:reset_password_instructions, token, { current_store_id: current_store_id })
45
+ end
46
+
30
47
  protected
31
48
 
32
49
  def password_required?
@@ -0,0 +1,19 @@
1
+ module Spree
2
+ module Account
3
+ class Create
4
+ prepend Spree::ServiceModule::Base
5
+
6
+ def call(user_params: nil)
7
+ user_params ||= {}
8
+
9
+ user = Spree.user_class.new(user_params)
10
+
11
+ if user.save
12
+ success(user)
13
+ else
14
+ failure(user)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module Account
3
+ class Update
4
+ prepend Spree::ServiceModule::Base
5
+
6
+ def call(user:, user_params: nil)
7
+ user_params ||= {}
8
+
9
+ if user.update(user_params)
10
+ success(user)
11
+ else
12
+ failure(user)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
- Welcome <%= @email %>!
1
+ <%= Spree.t('confirmation_instructions.welcome', email: @email) %>
2
2
 
3
- You can confirm your account email through the url below:
3
+ <%= Spree.t('confirmation_instructions.confirm') %>
4
4
 
5
- <%= @confirmation_url %>
5
+ <%= @confirmation_url %>
@@ -1,10 +1,5 @@
1
- A request to reset your password has been made.
2
- If you did not make this request, simply ignore this email.
3
-
4
- If you did make this request just click the link below:
1
+ <%= Spree.t('user_mailer.reset_password_instructions.instructions_1') %>
5
2
 
6
3
  <%= @edit_password_reset_url %>
7
4
 
8
- If the above URL does not work try copying and pasting it into your browser.
9
- If you continue to have problems please feel free to contact us.
10
-
5
+ <%= Spree.t('user_mailer.reset_password_instructions.instructions_2') %>
@@ -1,22 +1,25 @@
1
1
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @spree_user } %>
2
- <div class="col-lg-6 offset-lg-3">
3
- <div class="card mb-3">
4
- <div class="card-header">
5
- <h3 class="card-title mb-0 h6"><%= Spree.t(:change_your_password) %></h3>
6
- </div>
7
- <div class="card-body">
8
- <%= form_for @spree_user, :as => :spree_user, :url => spree.update_password_path, :method => :put do |f| %>
9
- <div class="form-group">
10
- <%= f.label :password, Spree.t(:password) %>
11
- <%= f.password_field :password, :class => "form-control" %>
12
- </div>
13
- <div class="form-group">
14
- <%= f.label :password_confirmation, Spree.t(:confirm_password) %>
15
- <%= f.password_field :password_confirmation, :class => "form-control" %>
2
+
3
+ <div class="container user-passwords">
4
+ <div class="row">
5
+ <div class="col-lg-6 offset-lg-3">
6
+ <div class="card mb-3 user-passwords-no-border">
7
+ <h3 class="spree-mb-large spree-mt-large spree-header"><%= Spree.t(:change_your_password) %></h3>
8
+ <div class="card-body">
9
+ <%= form_for @spree_user, as: :spree_user, url: spree.update_password_path, method: :put do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :password, Spree.t(:password), class: 'spree-flat-label' %>
12
+ <%= f.password_field :password, class: "spree-flat-input" %>
13
+ </div>
14
+ <div class="form-group">
15
+ <%= f.label :password_confirmation, Spree.t(:confirm_password), class: 'spree-flat-label' %>
16
+ <%= f.password_field :password_confirmation, class: "spree-flat-input" %>
17
+ </div>
18
+ <%= f.hidden_field :reset_password_token %>
19
+ <%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block spree-btn mt-2' %>
20
+ <% end %>
16
21
  </div>
17
- <%= f.hidden_field :reset_password_token %>
18
- <%= f.submit Spree.t(:update), :class => 'btn btn-lg btn-success btn-block' %>
19
- <% end %>
22
+ </div>
20
23
  </div>
21
24
  </div>
22
25
  </div>