spree_auth_devise 3.5.2 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
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