spree_auth_devise 3.5.2 → 4.0.1

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -3
  3. data/Appraisals +7 -6
  4. data/README.md +10 -2
  5. data/app/controllers/metal_decorator.rb +3 -1
  6. data/app/views/spree/shared/_login.html.erb +12 -12
  7. data/app/views/spree/user_passwords/edit.html.erb +5 -5
  8. data/app/views/spree/user_passwords/new.html.erb +5 -5
  9. data/app/views/spree/user_registrations/new.html.erb +6 -6
  10. data/app/views/spree/user_sessions/new.html.erb +6 -6
  11. data/config/initializers/devise.rb +1 -1
  12. data/config/locales/en.yml +1 -0
  13. data/gemfiles/spree_3_7.gemfile +1 -0
  14. data/gemfiles/spree_4_0.gemfile +8 -0
  15. data/lib/controllers/backend/spree/admin/{admin_controller_decorator.rb → base_controller_decorator.rb} +2 -1
  16. data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +6 -2
  17. data/lib/controllers/backend/spree/admin/{admin_orders_controller_decorator.rb → orders_controller_decorator.rb} +6 -2
  18. data/lib/controllers/backend/spree/admin/resource_controller_decorator.rb +6 -0
  19. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +6 -3
  20. data/lib/controllers/frontend/spree/store_controller_decorator.rb +2 -1
  21. data/lib/controllers/frontend/spree/users_controller.rb +8 -3
  22. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +4 -4
  23. data/lib/views/backend/spree/layouts/login.html.erb +2 -2
  24. data/lib/views/frontend/spree/checkout/_new_user.html.erb +5 -5
  25. data/lib/views/frontend/spree/checkout/registration.html.erb +6 -6
  26. data/lib/views/frontend/spree/shared/_link_to_account.html.erb +3 -3
  27. data/lib/views/frontend/spree/users/edit.html.erb +5 -5
  28. data/lib/views/frontend/spree/users/show.html.erb +3 -3
  29. data/spec/controllers/spree/checkout_controller_spec.rb +18 -6
  30. data/spec/controllers/spree/user_registrations_controller_spec.rb +20 -4
  31. data/spec/controllers/spree/user_sessions_controller_spec.rb +34 -8
  32. data/spec/features/checkout_spec.rb +1 -2
  33. data/spec/requests/spree/frontend/user_update_spec.rb +42 -0
  34. data/spec/spec_helper.rb +6 -0
  35. data/spree_auth_devise.gemspec +4 -3
  36. metadata +34 -23
  37. data/lib/controllers/backend/spree/admin/admin_resource_controller_decorator.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45307062e764620c14c90a2e46698079e68fcc2cf4a275c9b68b4dd7c440e235
4
- data.tar.gz: 51a0e596192d24d194635e319ae70894d3d7ff9dcb098c7783c0b70f865f3a53
3
+ metadata.gz: 0a4c46da7628319c592ae1a9675173fd8add8ca34dbb6fd7d5ffdb92345207c2
4
+ data.tar.gz: e6d9d38bc3e2fa09ff21fc024193160d04f2ba89c4439d8703b6a19f058a6fcd
5
5
  SHA512:
6
- metadata.gz: 0467202177d333b27390f4f6fd025e54d8600dfa514419a93d8f9d836740928d7226f8f89a841c215cd5b7e7a83e266bd04f06af4bddd0e961c4faf12d7d944e
7
- data.tar.gz: 9d362bd0a46360b6907526dfb50c193b2399551bcd64e7804a65521cc893fc50e49adaf01a7ac981530677dfab3db5345ae65a8f48eb835bd82d6a54378f9327
6
+ metadata.gz: 7f0c22c01027c613ab423d73af40ce43f02d4a14e26c76865ecd5a381943c2049366c52f2386697c4fa6a394c15d10b91da06b47d563a6f0081e897e948f77a5
7
+ data.tar.gz: 235a7977bb12281f9c3a0f00c0b99b59f7ee63d609b34e413ab530b1e2fde43384bc82e0dce91b784abf8f3518ae72a61d022916ceaa110394466e1aff854f39
data/.travis.yml CHANGED
@@ -7,6 +7,7 @@ script:
7
7
 
8
8
  addons:
9
9
  chrome: stable
10
+ postgresql: 9.4
10
11
 
11
12
  env:
12
13
  - DB=mysql
@@ -17,17 +18,28 @@ language: ruby
17
18
  rvm:
18
19
  - 2.5.1
19
20
  - 2.4.4
20
- - 2.3.7
21
+ - 2.3.8
21
22
 
22
23
  gemfile:
23
- - gemfiles/spree_3_2.gemfile
24
24
  - gemfiles/spree_3_5.gemfile
25
25
  - gemfiles/spree_3_7.gemfile
26
+ - gemfiles/spree_4_0.gemfile
26
27
  - gemfiles/spree_master.gemfile
27
28
 
28
29
  matrix:
29
30
  allow_failures:
30
- - gemfile: gemfiles/spree_master.gemfile
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
31
43
 
32
44
  before_install:
33
45
  - mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
data/Appraisals CHANGED
@@ -1,15 +1,16 @@
1
- appraise 'spree-3-2' do
2
- gem 'spree', '~> 3.2.0'
3
- gem 'rails-controller-testing'
4
- end
5
-
6
1
  appraise 'spree-3-5' do
7
2
  gem 'spree', '~> 3.5.0'
8
3
  gem 'rails-controller-testing'
9
4
  end
10
5
 
11
6
  appraise 'spree-3-7' do
12
- gem 'spree', '~> 3.7.0.rc3'
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'
13
14
  gem 'rails-controller-testing'
14
15
  end
15
16
 
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/spree/spree_auth_devise.svg?branch=master)](https://travis-ci.org/spree/spree_auth_devise)
4
4
  [![Code Climate](https://codeclimate.com/github/spree/spree_auth_devise/badges/gpa.svg)](https://codeclimate.com/github/spree/spree_auth_devise)
5
5
 
6
- Provides authentication services for Spree, using the Devise gem.
6
+ Provides authentication services for [Spree](https://spreecommerce.org), using the [Devise](https://github.com/plataformatec/devise) gem.
7
7
 
8
8
 
9
9
  ## Installation
@@ -119,10 +119,18 @@ This methodology can also be used by gems that extend spree and want/need to add
119
119
 
120
120
  If you encounter issues when using Ruby 2.5, please run:
121
121
 
122
- ```
122
+ ```bash
123
123
  bundle update devise
124
124
  ```
125
125
 
126
+ ### Creating the default Admin user
127
+
128
+ If you didn't created the Admin user from the installer you can run this rake task:
129
+
130
+ ```bash
131
+ bundle exec rake spree_auth:admin:create
132
+ ```
133
+
126
134
  ## Testing
127
135
 
128
136
  You need to do a quick one-time creation of a test application and then you can use it to run the tests.
@@ -1,5 +1,5 @@
1
1
  # For the API
2
- ActionController::Metal.class_eval do
2
+ module MetalDecorator
3
3
  def spree_current_user
4
4
  @spree_current_user ||= if defined? env
5
5
  env['warden'].user
@@ -8,3 +8,5 @@ ActionController::Metal.class_eval do
8
8
  end
9
9
  end
10
10
  end
11
+
12
+ ActionController::Metal.prepend(MetalDecorator)
@@ -1,18 +1,18 @@
1
1
  <%= form_for Spree::User.new, :as => :spree_user, :url => spree.create_new_session_path do |f| %>
2
2
  <div id="password-credentials">
3
- <div class="form-group">
3
+ <p>
4
4
  <%= f.label :email, Spree.t(:email) %>
5
- <%= f.email_field :email, placeholder: "#{Spree.t(:email)}", :class => 'form-control', :tabindex => 1, autofocus: true %>
6
- </div>
7
- <div class="form-group">
5
+ <%= f.email_field :email, :class => 'form-control', :tabindex => 1, autofocus: true %>
6
+ </p>
7
+ <p>
8
8
  <%= f.label :password, Spree.t(:password) %>
9
- <%= f.password_field :password, placeholder: "#{Spree.t(:password)}", :class => 'form-control', :tabindex => 2 %>
10
- </div>
11
- </div>
12
- <div>
13
- <%= f.check_box :remember_me, :tabindex => 3 %>
14
- <%= f.label :remember_me, Spree.t(:remember_me) %>
9
+ <%= f.password_field :password, :class => 'form-control', :tabindex => 2 %>
10
+ </p>
15
11
  </div>
12
+ <p class="form-check">
13
+ <%= f.check_box :remember_me, :tabindex => 3, :class => 'form-check-input' %>
14
+ <%= f.label :remember_me, Spree.t(:remember_me), :class => 'form-check-label' %>
15
+ </p>
16
16
 
17
- <div><%= f.submit Spree.t(:login), :class => 'btn btn-lg btn-success btn-block', :tabindex => 4 %></div>
18
- <% end %>
17
+ <p><%= f.submit Spree.t(:login), :class => 'btn btn-lg btn-success btn-block', :tabindex => 4 %></p>
18
+ <% end %>
@@ -1,10 +1,10 @@
1
1
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @spree_user } %>
2
- <div class="col-md-6 col-md-offset-3">
3
- <div class="panel panel-default">
4
- <div class="panel-heading">
5
- <h3 class="panel-title"><%= Spree.t(:change_your_password) %></h3>
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
6
  </div>
7
- <div class="panel-body">
7
+ <div class="card-body">
8
8
  <%= form_for @spree_user, :as => :spree_user, :url => spree.update_password_path, :method => :put do |f| %>
9
9
  <div class="form-group">
10
10
  <%= f.label :password, Spree.t(:password) %>
@@ -1,10 +1,10 @@
1
1
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @spree_user } %>
2
- <div class="col-md-6 col-md-offset-3" id="forgot-password">
3
- <div class="panel panel-default">
4
- <div class="panel-heading">
5
- <h3 class="panel-title"><%= Spree.t(:forgot_password) %></h3>
2
+ <div class="col-lg-6 offset-lg-3" id="forgot-password">
3
+ <div class="card mb-3">
4
+ <div class="card-header">
5
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:forgot_password) %></h3>
6
6
  </div>
7
- <div class="panel-body">
7
+ <div class="card-body">
8
8
  <p><%= Spree.t(:instructions_to_reset_password) %></p>
9
9
 
10
10
  <%= form_for Spree::User.new, :as => :spree_user, :url => spree.reset_password_path do |f| %>
@@ -1,11 +1,11 @@
1
1
  <% @body_id = 'signup' %>
2
2
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @user } %>
3
- <div class="col-md-6 col-md-offset-3">
4
- <div class="panel panel-default">
5
- <div class="panel-heading">
6
- <h3 class="panel-title"><%= Spree.t(:new_customer) %></h3>
7
- </div>
8
- <div id="new-customer" class="panel-body" data-hook="login">
3
+ <div class="col-lg-6 offset-lg-3">
4
+ <div class="card mb-3">
5
+ <div class="card-header">
6
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:new_customer) %></h3>
7
+ </div>
8
+ <div id="new-customer" class="card-body" data-hook="login">
9
9
  <%= form_for resource, :as => :spree_user, :url => spree.registration_path do |f| %>
10
10
  <div data-hook="signup_inside_form">
11
11
  <%= render :partial => 'spree/shared/user_form', :locals => { :f => f } %>
@@ -1,10 +1,10 @@
1
1
  <% @body_id = 'login' %>
2
- <div class="col-md-6 <%= request.path == spree.login_path ? "col-md-offset-3" : "" %>">
3
- <div class="panel panel-default">
4
- <div class="panel-heading">
5
- <h3 class="panel-title"><%= Spree.t(:login_as_existing) %></h3>
6
- </div>
7
- <div id="existing-customer" class="panel-body" data-hook="login">
2
+ <div class="col-lg-6 <%= request.path == spree.login_path ? "offset-lg-3" : "" %>">
3
+ <div class="card mb-3">
4
+ <div class="card-header">
5
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:login_as_existing) %></h3>
6
+ </div>
7
+ <div id="existing-customer" class="card-body" data-hook="login">
8
8
  <%= render :partial => 'spree/shared/login' %>
9
9
  <div class="text-center">
10
10
  <%= Spree.t(:or) %>
@@ -40,7 +40,7 @@ Devise.setup do |config|
40
40
  config.stretches = 20
41
41
 
42
42
  # Setup a pepper to generate the encrypted password.
43
- config.pepper = Rails.configuration.secret_token
43
+ # config.pepper = '<%= SecureRandom.hex(64) %>'
44
44
 
45
45
  # ==> Configuration for :confirmable
46
46
  # The time you want to give your user to confirm his account. During this time
@@ -41,6 +41,7 @@ en:
41
41
  user_registrations:
42
42
  destroyed: Bye! Your account was successfully cancelled. We hope to see you again soon.
43
43
  inactive_signed_up: 'You have signed up successfully. However, we could not sign you in because your account is %{reason}.'
44
+ signed_up_but_unconfirmed: You have signed up successfully.
44
45
  signed_up: Welcome! You have signed up successfully.
45
46
  updated: You updated your account successfully.
46
47
  user_sessions:
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "rails-controller-testing"
6
6
  gem "spree", "~> 3.7.0.rc3"
7
+ gem "sass-rails"
7
8
 
8
9
  gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails-controller-testing"
6
+ gem "spree", github: "spree/spree", tag: "v4.0.0.beta"
7
+
8
+ gemspec path: "../"
@@ -1,4 +1,4 @@
1
- Spree::Admin::BaseController.class_eval do
1
+ module Spree::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,3 +22,4 @@ Spree::Admin::BaseController.class_eval do
22
22
  nil
23
23
  end
24
24
  end
25
+ Spree::Admin::BaseController.prepend(Spree::Admin::BaseControllerDecorator)
@@ -1,5 +1,8 @@
1
- Spree::Admin::Orders::CustomerDetailsController.class_eval do
2
- before_action :check_authorization
1
+ module Spree::Admin::Orders::CustomerDetailsControllerDecorator
2
+
3
+ def self.prepended(base)
4
+ base.before_action :check_authorization
5
+ end
3
6
 
4
7
  private
5
8
 
@@ -14,3 +17,4 @@ Spree::Admin::Orders::CustomerDetailsController.class_eval do
14
17
  authorize! action, resource, session[:access_token]
15
18
  end
16
19
  end
20
+ Spree::Admin::Orders::CustomerDetailsController.prepend(Spree::Admin::Orders::CustomerDetailsControllerDecorator)
@@ -1,5 +1,8 @@
1
- Spree::Admin::OrdersController.class_eval do
2
- before_action :check_authorization
1
+ module Spree::Admin::OrdersControllerDecorator
2
+
3
+ def self.prepended(base)
4
+ base.before_action :check_authorization
5
+ end
3
6
 
4
7
  private
5
8
 
@@ -19,3 +22,4 @@ Spree::Admin::OrdersController.class_eval do
19
22
  end
20
23
  end
21
24
  end
25
+ Spree::Admin::OrdersController.prepend(Spree::Admin::OrdersControllerDecorator)
@@ -0,0 +1,6 @@
1
+ module Spree::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::Admin::ResourceControllerDecorator)
@@ -1,7 +1,9 @@
1
1
  require 'spree/core/validators/email' if Spree.version.to_f < 3.5
2
- Spree::CheckoutController.class_eval do
3
- before_action :check_authorization
4
- before_action :check_registration, except: [:registration, :update_registration]
2
+ module Spree::CheckoutControllerDecorator
3
+ def self.prepended(base)
4
+ base.before_action :check_authorization
5
+ base.before_action :check_registration, except: [:registration, :update_registration]
6
+ end
5
7
 
6
8
  def registration
7
9
  @user = Spree::User.new
@@ -39,3 +41,4 @@ Spree::CheckoutController.class_eval do
39
41
  redirect_to spree.checkout_registration_path
40
42
  end
41
43
  end
44
+ Spree::CheckoutController.prepend(Spree::CheckoutControllerDecorator)
@@ -1,6 +1,7 @@
1
- Spree::StoreController.class_eval do
1
+ module Spree::StoreControllerDecorator
2
2
  def account_link
3
3
  render partial: 'spree/shared/link_to_account'
4
4
  fresh_when(spree_current_user)
5
5
  end
6
6
  end
7
+ Spree::StoreController.prepend(Spree::StoreControllerDecorator)
@@ -1,11 +1,11 @@
1
1
  class Spree::UsersController < Spree::StoreController
2
- skip_before_action :set_current_order, only: :show
3
- prepend_before_action :load_object, only: [:show, :edit, :update]
2
+ skip_before_action :set_current_order, only: :show
4
3
  prepend_before_action :authorize_actions, only: :new
5
4
 
6
5
  include Spree::Core::ControllerHelpers
7
6
 
8
7
  def show
8
+ load_object
9
9
  @orders = @user.orders.complete.order('completed_at desc')
10
10
  end
11
11
 
@@ -23,8 +23,13 @@ class Spree::UsersController < Spree::StoreController
23
23
  end
24
24
  end
25
25
 
26
+ def edit
27
+ load_object
28
+ end
29
+
26
30
  def update
27
- if @user.update_attributes(user_params)
31
+ load_object
32
+ if @user.update(user_params)
28
33
  if params[:user][:password].present?
29
34
  # this logic needed b/c devise wants to log us out after password changes
30
35
  Spree::User.reset_password_by_token(params[:user])
@@ -2,8 +2,8 @@
2
2
  <div class="alert alert-danger"><%= flash[:alert] %></div>
3
3
  <% end %>
4
4
 
5
- <div data-hook="login" class="panel">
6
- <div class="panel-body">
5
+ <div data-hook="login" class="card border-0">
6
+ <div class="card-body">
7
7
  <%= form_for Spree::User.new, :as => :spree_user, :url => spree.admin_create_new_session_path do |f| %>
8
8
  <div id="password-credentials">
9
9
  <div class="form-group text-center">
@@ -17,13 +17,13 @@
17
17
  </div>
18
18
  <div class="checkbox form-group">
19
19
  <div class="row">
20
- <div class="col-md-6">
20
+ <div class="col-lg-6">
21
21
  <%= f.label :remember_me do %>
22
22
  <%= f.check_box :remember_me, :tabindex => 3 %>
23
23
  <%= Spree.t(:remember_me) %>
24
24
  <% end %>
25
25
  </div>
26
- <div class="col-md-6 text-right">
26
+ <div class="col-lg-6 text-right">
27
27
  <%= link_to Spree.t(:forgot_password), spree.recover_password_path %>
28
28
  </div>
29
29
  </div>
@@ -8,11 +8,11 @@
8
8
  <%= render partial: 'spree/admin/shared/head' %>
9
9
  </head>
10
10
 
11
- <body>
11
+ <body class="pt-5">
12
12
  <div class="container">
13
13
 
14
14
  <div class="row">
15
- <div class="col-md-4 col-md-offset-4">
15
+ <div class="col-lg-6 offset-lg-3">
16
16
  <%= render partial: 'spree/admin/shared/header' %>
17
17
 
18
18
  <%= flash_alert(flash) %>
@@ -1,9 +1,9 @@
1
- <div class="col-md-6">
2
- <div class="panel panel-default">
3
- <div class="panel-heading">
4
- <h3 class="panel-title"><%= Spree.t(:create_a_new_account) %></h3>
1
+ <div>
2
+ <div class="card mb-3">
3
+ <div class="card-header">
4
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:create_a_new_account) %></h3>
5
5
  </div>
6
- <div id="new-customer" class="panel-body" data-hook="login">
6
+ <div id="new-customer" class="card-body" data-hook="login">
7
7
  <%= form_for @user, :as => :spree_user, :url => spree.registration_path(@user) do |f| %>
8
8
  <div data-hook="signup_inside_form">
9
9
  <%= render :partial => 'spree/shared/user_form', :locals => { :f => f } %>
@@ -1,16 +1,16 @@
1
1
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @user } %>
2
2
  <h1><%= Spree.t(:registration) %></h1>
3
3
  <div id="registration" class="row" data-hook>
4
- <div id="account">
4
+ <div id="account" class="col-lg-6">
5
5
  <%= render :partial => 'new_user' %>
6
6
  </div>
7
7
  <% if Spree::Config[:allow_guest_checkout] %>
8
- <div class="col-md-6">
9
- <div class="panel panel-default">
10
- <div class="panel-heading">
11
- <h3 class="panel-title"><%= Spree.t(:guest_user_account) %></h3>
8
+ <div class="col-lg-6">
9
+ <div class="card mb-3">
10
+ <div class="card-header">
11
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:guest_user_account) %></h3>
12
12
  </div>
13
- <div id="guest_checkout" class="panel-body" data-hook>
13
+ <div id="guest_checkout" class="card-body" data-hook>
14
14
  <%= form_for @order, :url => update_checkout_registration_path, :method => :put, :html => { :id => 'checkout_form_registration' } do |f| %>
15
15
  <div class="form-group">
16
16
  <%= f.label :email, Spree.t(:email), class: 'required', title: 'required' %>
@@ -1,6 +1,6 @@
1
1
  <% if spree_current_user %>
2
- <li><%= link_to Spree.t(:my_account), spree.account_path %></li>
3
- <li><%= link_to Spree.t(:logout), spree.logout_path %></li>
2
+ <li class="nav-item"><%= link_to Spree.t(:my_account), spree.account_path, :class => 'nav-link text-white' %></li>
3
+ <li class="nav-item"><%= link_to Spree.t(:logout), spree.logout_path, :class => 'nav-link text-white' %></li>
4
4
  <% else %>
5
- <li id="link-to-login"><%= link_to Spree.t(:login), spree.login_path %></li>
5
+ <li id="link-to-login" class="nav-item"><%= link_to Spree.t(:login), spree.login_path, :class => 'nav-link text-white' %></li>
6
6
  <% end %>
@@ -1,9 +1,9 @@
1
- <div class="col-md-6 col-md-offset-3">
2
- <div class="panel panel-default">
3
- <div class="panel-heading">
4
- <h3 class="panel-title"><%= Spree.t(:editing_user) %></h3>
1
+ <div class="col-lg-6 offset-lg-3">
2
+ <div class="card mb-3">
3
+ <div class="card-header">
4
+ <h3 class="card-title mb-0 h6"><%= Spree.t(:editing_user) %></h3>
5
5
  </div>
6
- <div class="panel-body">
6
+ <div class="card-body">
7
7
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @user } %>
8
8
 
9
9
  <%= form_for Spree::User.new, :as => @user, :url => spree.user_path(@user), :method => :put do |f| %>
@@ -1,7 +1,7 @@
1
1
  <h1><%= accurate_title %></h1>
2
2
 
3
- <div data-hook="account_summary" class="account-summary well">
4
- <dl id="user-info">
3
+ <div data-hook="account_summary" class="account-summary card bg-light mb-3">
4
+ <dl id="user-info" class="card-body">
5
5
  <dt><%= Spree.t(:email) %></dt>
6
6
  <dd><%= @user.email %> (<%= link_to Spree.t(:edit), spree.edit_account_path %>)</dd>
7
7
  <br />
@@ -41,7 +41,7 @@
41
41
  </tbody>
42
42
  </table>
43
43
  <% else %>
44
- <div class="alert alert-info"><%= Spree.t(:you_have_no_orders_yet) %></div>
44
+ <div class="alert alert-info" role="alert"><%= Spree.t(:you_have_no_orders_yet) %></div>
45
45
  <% end %>
46
46
  <br />
47
47
 
@@ -91,7 +91,11 @@ RSpec.describe Spree::CheckoutController, type: :controller do
91
91
  before do
92
92
  allow(controller).to receive(:spree_current_user) { user }
93
93
  allow(order).to receive(:user) { user }
94
- allow(order).to receive(:guest_token) { nil }
94
+ if Spree.version.to_f > 3.6
95
+ allow(order).to receive(:token) { nil }
96
+ else
97
+ allow(order).to receive(:guest_token) { nil }
98
+ end
95
99
  end
96
100
 
97
101
  it 'redirects to the standard order view' do
@@ -111,7 +115,11 @@ RSpec.describe Spree::CheckoutController, type: :controller do
111
115
 
112
116
  it 'checks if the user is authorized for :edit' do
113
117
  expect(controller).to receive(:authorize!).with(:edit, order, token)
114
- request.cookie_jar.signed[:guest_token] = token
118
+ if Spree.version.to_f > 3.6
119
+ request.cookie_jar.signed[:token] = token
120
+ else
121
+ request.cookie_jar.signed[:guest_token] = token
122
+ end
115
123
  spree_get :registration, {}
116
124
  end
117
125
  end
@@ -121,7 +129,7 @@ RSpec.describe Spree::CheckoutController, type: :controller do
121
129
 
122
130
  it 'does not check registration' do
123
131
  controller.stub :check_authorization
124
- order.stub update_attributes: true
132
+ order.stub update: true
125
133
  controller.should_not_receive :check_registration
126
134
  spree_put :update_registration, { order: {} }
127
135
  end
@@ -134,15 +142,19 @@ RSpec.describe Spree::CheckoutController, type: :controller do
134
142
  end
135
143
 
136
144
  it 'redirects to the checkout_path after saving' do
137
- allow(order).to receive(:update_attributes) { true }
145
+ allow(order).to receive(:update) { true }
138
146
  allow(controller).to receive(:check_authorization)
139
147
  spree_put :update_registration, { order: { email: 'jobs@spreecommerce.com' } }
140
148
  expect(response).to redirect_to spree.checkout_state_path(:address)
141
149
  end
142
150
 
143
151
  it 'checks if the user is authorized for :edit' do
144
- request.cookie_jar.signed[:guest_token] = token
145
- allow(order).to receive(:update_attributes) { true }
152
+ if Spree.version.to_f > 3.6
153
+ request.cookie_jar.signed[:token] = token
154
+ else
155
+ request.cookie_jar.signed[:guest_token] = token
156
+ end
157
+ allow(order).to receive(:update) { true }
146
158
  expect(controller).to receive(:authorize!).with(:edit, order, token)
147
159
  spree_put :update_registration, { order: { email: 'jobs@spreecommerce.com' } }
148
160
  end
@@ -11,11 +11,19 @@ RSpec.describe Spree::UserRegistrationsController, type: :controller do
11
11
 
12
12
  context 'with a guest token present' do
13
13
  before do
14
- request.cookie_jar.signed[:guest_token] = 'ABC'
14
+ if Spree.version.to_f > 3.6
15
+ request.cookie_jar.signed[:token] = 'ABC'
16
+ else
17
+ request.cookie_jar.signed[:guest_token] = 'ABC'
18
+ end
15
19
  end
16
20
 
17
21
  it 'assigns orders with the correct token and no user present' do
18
- order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
22
+ if Spree.version.to_f > 3.6
23
+ order = create(:order, token: 'ABC', user_id: nil, created_by_id: nil)
24
+ else
25
+ order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
26
+ end
19
27
  spree_post :create, spree_user: { email: 'foobar@example.com', password: 'foobar123', password_confirmation: 'foobar123' }
20
28
  user = Spree::User.find_by_email('foobar@example.com')
21
29
 
@@ -25,14 +33,22 @@ RSpec.describe Spree::UserRegistrationsController, type: :controller do
25
33
  end
26
34
 
27
35
  it 'does not assign orders with an existing user' do
28
- order = create(:order, guest_token: 'ABC', user_id: 200)
36
+ if Spree.version.to_f > 3.6
37
+ order = create(:order, token: 'ABC', user_id: 200)
38
+ else
39
+ order = create(:order, guest_token: 'ABC', user_id: 200)
40
+ end
29
41
  spree_post :create, spree_user: { email: 'foobar@example.com', password: 'foobar123', password_confirmation: 'foobar123' }
30
42
 
31
43
  expect(order.reload.user_id).to eq 200
32
44
  end
33
45
 
34
46
  it 'does not assign orders with a different token' do
35
- order = create(:order, guest_token: 'DEF', user_id: nil, created_by_id: nil)
47
+ if Spree.version.to_f > 3.6
48
+ order = create(:order, token: 'DEF', user_id: nil, created_by_id: nil)
49
+ else
50
+ order = create(:order, guest_token: 'DEF', user_id: nil, created_by_id: nil)
51
+ end
36
52
  spree_post :create, spree_user: { email: 'foobar@example.com', password: 'foobar123', password_confirmation: 'foobar123' }
37
53
 
38
54
  expect(order.reload.user_id).to be_nil
@@ -59,11 +59,19 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
59
59
 
60
60
  context 'with a guest token present' do
61
61
  before do
62
- request.cookie_jar.signed[:guest_token] = 'ABC'
62
+ if Spree.version.to_f > 3.6
63
+ request.cookie_jar.signed[:token] = 'ABC'
64
+ else
65
+ request.cookie_jar.signed[:guest_token] = 'ABC'
66
+ end
63
67
  end
64
68
 
65
69
  it 'assigns orders with the correct token and no user present' do
66
- order = create(:order, email: user.email, guest_token: 'ABC', user_id: nil, created_by_id: nil)
70
+ if Spree.version.to_f > 3.6
71
+ order = create(:order, email: user.email, token: 'ABC', user_id: nil, created_by_id: nil)
72
+ else
73
+ order = create(:order, email: user.email, guest_token: 'ABC', user_id: nil, created_by_id: nil)
74
+ end
67
75
  spree_post :create, spree_user: { email: user.email, password: 'secret' }
68
76
 
69
77
  order.reload
@@ -72,7 +80,11 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
72
80
  end
73
81
 
74
82
  it 'assigns orders with the correct token and no user or email present' do
75
- order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
83
+ if Spree.version.to_f > 3.6
84
+ order = create(:order, token: 'ABC', user_id: nil, created_by_id: nil)
85
+ else
86
+ order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
87
+ end
76
88
  spree_post :create, spree_user: { email: user.email, password: 'secret' }
77
89
 
78
90
  order.reload
@@ -81,9 +93,15 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
81
93
  end
82
94
 
83
95
  it 'does not assign completed orders' do
84
- order = create(:order, email: user.email, guest_token: 'ABC',
85
- user_id: nil, created_by_id: nil,
86
- completed_at: 1.minute.ago)
96
+ if Spree.version.to_f > 3.6
97
+ order = create(:order, email: user.email, token: 'ABC',
98
+ user_id: nil, created_by_id: nil,
99
+ completed_at: 1.minute.ago)
100
+ else
101
+ order = create(:order, email: user.email, guest_token: 'ABC',
102
+ user_id: nil, created_by_id: nil,
103
+ completed_at: 1.minute.ago)
104
+ end
87
105
  spree_post :create, spree_user: { email: user.email, password: 'secret' }
88
106
 
89
107
  order.reload
@@ -92,14 +110,22 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
92
110
  end
93
111
 
94
112
  it 'does not assign orders with an existing user' do
95
- order = create(:order, guest_token: 'ABC', user_id: 200)
113
+ if Spree.version.to_f > 3.6
114
+ order = create(:order, token: 'ABC', user_id: 200)
115
+ else
116
+ order = create(:order, guest_token: 'ABC', user_id: 200)
117
+ end
96
118
  spree_post :create, spree_user: { email: user.email, password: 'secret' }
97
119
 
98
120
  expect(order.reload.user_id).to eq 200
99
121
  end
100
122
 
101
123
  it 'does not assign orders with a different token' do
102
- order = create(:order, guest_token: 'DEF', user_id: nil, created_by_id: nil)
124
+ if Spree.version.to_f > 3.6
125
+ order = create(:order, token: 'DEF', user_id: nil, created_by_id: nil)
126
+ else
127
+ order = create(:order, guest_token: 'DEF', user_id: nil, created_by_id: nil)
128
+ end
103
129
  spree_post :create, spree_user: { email: user.email, password: 'secret' }
104
130
 
105
131
  expect(order.reload.user_id).to be_nil
@@ -133,11 +133,10 @@ RSpec.feature 'Checkout', :js, type: :feature do
133
133
 
134
134
  expect(page).to have_text 'Registration'
135
135
 
136
- fill_in 'Email', with: 'email@person.com'
136
+ fill_in 'Email', with: 'email@person.com', match: :first
137
137
  fill_in 'Password', with: 'spree123'
138
138
  fill_in 'Password Confirmation', with: 'spree123'
139
139
  click_button 'Create'
140
-
141
140
  expect(page).to have_text 'You have signed up successfully.'
142
141
 
143
142
  str_addr = 'bill_address'
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.feature 'User update', type: :request do
4
+ context 'CSRF protection' do
5
+ %i[exception reset_session null_session].each do |strategy|
6
+ # Completely clean the configuration of forgery protection for the
7
+ # controller and reset it after the expectations. However, besides `:with`,
8
+ # the options given to `protect_from_forgery` are processed on the fly.
9
+ # I.e., there's no way to retain them. The initial setup corresponds to the
10
+ # dummy application, which uses the default Rails skeleton in that regard.
11
+ # So, if at some point Rails changed the given options, we should update it
12
+ # here.
13
+ around do |example|
14
+ controller = Spree::UsersController
15
+ old_allow_forgery_protection_value = controller.allow_forgery_protection
16
+ old_forgery_protection_strategy = controller.forgery_protection_strategy
17
+ controller.skip_forgery_protection
18
+ controller.allow_forgery_protection = true
19
+ controller.protect_from_forgery with: strategy
20
+
21
+ example.run
22
+
23
+ controller.allow_forgery_protection = old_allow_forgery_protection_value
24
+ controller.forgery_protection_strategy = old_forgery_protection_strategy
25
+ end
26
+
27
+ it "is not possible to take account over with the #{strategy} forgery protection strategy" do
28
+ user = create(:user, email: 'legit@mail.com', password: 'password')
29
+
30
+ post '/login', params: "spree_user[email]=legit@mail.com&spree_user[password]=password"
31
+ begin
32
+ put '/users/123456', params: 'user[email]=hacked@example.com'
33
+ rescue
34
+ # testing that the account is not compromised regardless of any raised
35
+ # exception
36
+ end
37
+
38
+ expect(user.reload.email).to eq('legit@mail.com')
39
+ end
40
+ end
41
+ end
42
+ end
data/spec/spec_helper.rb CHANGED
@@ -22,6 +22,12 @@ RSpec.configure do |config|
22
22
 
23
23
  config.order = :random
24
24
  Kernel.srand(config.seed)
25
+
26
+ config.before(:each) do
27
+ allow(RSpec::Rails::ViewRendering::EmptyTemplateHandler)
28
+ .to receive(:call)
29
+ .and_return(%("")) if Rails.gem_version >= Gem::Version.new('6.0.0.beta1')
30
+ end
25
31
  end
26
32
 
27
33
  Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
@@ -3,7 +3,7 @@
3
3
  Gem::Specification.new do |s|
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.name = 'spree_auth_devise'
6
- s.version = '3.5.2'
6
+ s.version = '4.0.1'
7
7
  s.summary = 'Provides authentication and authorization services for use with Spree by using Devise and CanCan.'
8
8
  s.description = s.summary
9
9
 
@@ -19,12 +19,13 @@ Gem::Specification.new do |s|
19
19
  s.require_path = 'lib'
20
20
  s.requirements << 'none'
21
21
 
22
- s.add_dependency 'devise', '>= 4.4', '< 4.7'
22
+ s.add_dependency 'devise', '~> 4.7'
23
23
  s.add_dependency 'devise-encryptable', '0.2.0'
24
24
 
25
- spree_version = '>= 3.1.0', '< 4.0'
25
+ spree_version = '>= 3.1.0', '< 4.1'
26
26
  s.add_dependency 'spree_core', spree_version
27
27
  s.add_dependency 'spree_extension'
28
+ s.add_dependency 'deface', '~> 1.0'
28
29
 
29
30
  s.add_development_dependency 'capybara', '~> 2.7'
30
31
  s.add_development_dependency 'capybara-screenshot'
metadata CHANGED
@@ -1,33 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_auth_devise
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.2
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-03 00:00:00.000000000 Z
11
+ date: 2021-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '4.4'
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '4.7'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '4.4'
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
26
  version: '4.7'
33
27
  - !ruby/object:Gem::Dependency
@@ -53,7 +47,7 @@ dependencies:
53
47
  version: 3.1.0
54
48
  - - "<"
55
49
  - !ruby/object:Gem::Version
56
- version: '4.0'
50
+ version: '4.1'
57
51
  type: :runtime
58
52
  prerelease: false
59
53
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +57,7 @@ dependencies:
63
57
  version: 3.1.0
64
58
  - - "<"
65
59
  - !ruby/object:Gem::Version
66
- version: '4.0'
60
+ version: '4.1'
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: spree_extension
69
63
  requirement: !ruby/object:Gem::Requirement
@@ -78,6 +72,20 @@ dependencies:
78
72
  - - ">="
79
73
  - !ruby/object:Gem::Version
80
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: deface
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
81
89
  - !ruby/object:Gem::Dependency
82
90
  name: capybara
83
91
  requirement: !ruby/object:Gem::Requirement
@@ -311,7 +319,7 @@ dependencies:
311
319
  version: 3.1.0
312
320
  - - "<"
313
321
  - !ruby/object:Gem::Version
314
- version: '4.0'
322
+ version: '4.1'
315
323
  type: :development
316
324
  prerelease: false
317
325
  version_requirements: !ruby/object:Gem::Requirement
@@ -321,7 +329,7 @@ dependencies:
321
329
  version: 3.1.0
322
330
  - - "<"
323
331
  - !ruby/object:Gem::Version
324
- version: '4.0'
332
+ version: '4.1'
325
333
  - !ruby/object:Gem::Dependency
326
334
  name: spree_frontend
327
335
  requirement: !ruby/object:Gem::Requirement
@@ -331,7 +339,7 @@ dependencies:
331
339
  version: 3.1.0
332
340
  - - "<"
333
341
  - !ruby/object:Gem::Version
334
- version: '4.0'
342
+ version: '4.1'
335
343
  type: :development
336
344
  prerelease: false
337
345
  version_requirements: !ruby/object:Gem::Requirement
@@ -341,7 +349,7 @@ dependencies:
341
349
  version: 3.1.0
342
350
  - - "<"
343
351
  - !ruby/object:Gem::Version
344
- version: '4.0'
352
+ version: '4.1'
345
353
  - !ruby/object:Gem::Dependency
346
354
  name: sqlite3
347
355
  requirement: !ruby/object:Gem::Requirement
@@ -432,16 +440,17 @@ files:
432
440
  - gemfiles/spree_3_2.gemfile
433
441
  - gemfiles/spree_3_5.gemfile
434
442
  - gemfiles/spree_3_7.gemfile
443
+ - gemfiles/spree_4_0.gemfile
435
444
  - gemfiles/spree_master.gemfile
436
445
  - lib/assets/javascripts/spree/backend/spree_auth.js.erb
437
446
  - lib/assets/javascripts/spree/frontend/account.js
438
447
  - lib/assets/javascripts/spree/frontend/spree_auth.js.erb
439
448
  - lib/assets/stylesheets/spree/backend/spree_auth.css.erb
440
449
  - lib/assets/stylesheets/spree/frontend/spree_auth.css.erb
441
- - lib/controllers/backend/spree/admin/admin_controller_decorator.rb
442
- - lib/controllers/backend/spree/admin/admin_orders_controller_decorator.rb
443
- - lib/controllers/backend/spree/admin/admin_resource_controller_decorator.rb
450
+ - lib/controllers/backend/spree/admin/base_controller_decorator.rb
444
451
  - lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb
452
+ - lib/controllers/backend/spree/admin/orders_controller_decorator.rb
453
+ - lib/controllers/backend/spree/admin/resource_controller_decorator.rb
445
454
  - lib/controllers/backend/spree/admin/user_passwords_controller.rb
446
455
  - lib/controllers/backend/spree/admin/user_sessions_controller.rb
447
456
  - lib/controllers/frontend/spree/checkout_controller_decorator.rb
@@ -495,6 +504,7 @@ files:
495
504
  - spec/mailers/user_mailer_spec.rb
496
505
  - spec/models/order_spec.rb
497
506
  - spec/models/user_spec.rb
507
+ - spec/requests/spree/frontend/user_update_spec.rb
498
508
  - spec/spec_helper.rb
499
509
  - spec/support/ability.rb
500
510
  - spec/support/add_to_cart.rb
@@ -513,7 +523,7 @@ homepage: https://spreecommerce.org
513
523
  licenses:
514
524
  - BSD-3-Clause
515
525
  metadata: {}
516
- post_install_message:
526
+ post_install_message:
517
527
  rdoc_options: []
518
528
  require_paths:
519
529
  - lib
@@ -529,8 +539,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
529
539
  version: '0'
530
540
  requirements:
531
541
  - none
532
- rubygems_version: 3.0.2
533
- signing_key:
542
+ rubygems_version: 3.1.4
543
+ signing_key:
534
544
  specification_version: 4
535
545
  summary: Provides authentication and authorization services for use with Spree by
536
546
  using Devise and CanCan.
@@ -562,6 +572,7 @@ test_files:
562
572
  - spec/mailers/user_mailer_spec.rb
563
573
  - spec/models/order_spec.rb
564
574
  - spec/models/user_spec.rb
575
+ - spec/requests/spree/frontend/user_update_spec.rb
565
576
  - spec/spec_helper.rb
566
577
  - spec/support/ability.rb
567
578
  - spec/support/add_to_cart.rb
@@ -1,3 +0,0 @@
1
- Spree::Admin::ResourceController.class_eval do
2
- rescue_from CanCan::AccessDenied, with: :unauthorized
3
- end