Skip to content

Commit 3e00be6

Browse files
Merge commit from fork
The OrdersController#show action permitted viewing completed guest orders by order number alone, without requiring the associated order token.
1 parent 3e18ec0 commit 3e00be6

File tree

4 files changed

+27
-12
lines changed

4 files changed

+27
-12
lines changed

storefront/app/controllers/spree/order_status_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def new; end
77
# validate email/order number and redirect to order page
88
# POST /order_status
99
def create
10-
raise ActiveRecord::RecordNotFound if params[:number].blank?
10+
raise ActiveRecord::RecordNotFound if params[:number].blank? || params[:email].blank?
1111

1212
@order = order_finder.new(number: params[:number], email: params[:email], store: current_store).execute.first
1313

storefront/app/controllers/spree/orders_controller.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@ class OrdersController < StoreController
1010

1111
before_action :assign_order_with_lock, only: :update
1212

13+
rescue_from CanCan::AccessDenied do |exception|
14+
raise ActiveRecord::RecordNotFound
15+
end
16+
1317
# GET /orders/:id
1418
def show
1519
@order = complete_order_finder.new(number: params[:id], token: params[:token], store: current_store).execute.first
1620

17-
raise ActiveRecord::RecordNotFound if @order.blank? || !authorize_access
21+
raise ActiveRecord::RecordNotFound if @order.blank?
22+
23+
authorize! :show, @order, params[:token]
1824

1925
@shipments = @order.shipments.includes(:stock_location, :address, selected_shipping_rate: :shipping_method, inventory_units: :line_item)
2026
end
@@ -49,9 +55,7 @@ def edit
4955
private
5056

5157
def authorize_access
52-
return true if @order.user_id.nil?
53-
54-
@order.user == try_spree_current_user
58+
authorize! :show, @order, params[:token]
5559
end
5660

5761
def find_order_by_cookie
@@ -65,7 +69,7 @@ def find_order_by_cookie
6569
end
6670

6771
def accurate_title
68-
if action_name == 'edit' || action_name == 'update'
72+
if ['edit', 'update'].include?(action_name)
6973
Spree.t(:shopping_cart)
7074
else
7175
Spree.t(:order_number, number: @order&.number)

storefront/spec/controllers/spree/order_status_controller_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,13 @@
6464
}.to raise_error(ActiveRecord::RecordNotFound)
6565
end
6666
end
67+
68+
context 'with blank email' do
69+
it 'raises ActiveRecord::RecordNotFound' do
70+
expect {
71+
post :create, params: { number: order.number, email: '' }
72+
}.to raise_error(ActiveRecord::RecordNotFound)
73+
end
74+
end
6775
end
6876
end

storefront/spec/controllers/spree/orders_controller_spec.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@
105105
end
106106

107107
describe '#show' do
108-
let(:order) { create(:completed_order_with_totals, store: store, user: user) }
108+
let(:order) { create(:completed_order_with_totals, store: store) }
109+
let(:user) { nil }
109110

110111
it 'renders the show template' do
111112
get :show, params: { id: order.number, token: order.token }
@@ -120,13 +121,15 @@
120121
end
121122
end
122123

123-
context 'when order belongs to another user' do
124-
let(:order) { create(:completed_order_with_totals, store: store, user: create(:user)) }
124+
context 'when token is invalid' do
125+
it 'raises ActiveRecord::RecordNotFound' do
126+
expect { get :show, params: { id: order.number, token: 'invalid' } }.to raise_error(ActiveRecord::RecordNotFound)
127+
end
128+
end
125129

130+
context 'when token is missing' do
126131
it 'raises ActiveRecord::RecordNotFound' do
127-
expect do
128-
get :show, params: { id: order.number, token: order.token }
129-
end.to raise_error(ActiveRecord::RecordNotFound)
132+
expect { get :show, params: { id: order.number, token: '' } }.to raise_error(ActiveRecord::RecordNotFound)
130133
end
131134
end
132135
end

0 commit comments

Comments
 (0)