Skip to content

Commit 80a8b50

Browse files
committed
Check redirect url on confirm account query
1 parent 802116d commit 80a8b50

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

lib/graphql_devise/resolvers/confirm_account.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class ConfirmAccount < Base
77
argument :redirect_url, String, required: true
88

99
def resolve(confirmation_token:, redirect_url:)
10+
check_redirect_url_whitelist!(redirect_url)
11+
1012
resource = resource_class.confirm_by_token(confirmation_token)
1113

1214
if resource.errors.empty?

spec/requests/queries/confirm_account_spec.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
context 'when using the user model' do
99
let(:user) { create(:user, confirmed_at: nil) }
10-
let(:redirect) { Faker::Internet.url }
10+
let(:redirect) { 'https://google.com' }
1111
let(:query) do
1212
<<-GRAPHQL
1313
{
@@ -43,6 +43,21 @@
4343
expect(user).to be_active_for_authentication
4444
end
4545

46+
context 'when redirect_url is not whitelisted' do
47+
let(:redirect) { 'https://not-safe.com' }
48+
49+
it 'returns a not whitelisted redirect url error' do
50+
expect { post_request }.to not_change(ActionMailer::Base.deliveries, :count)
51+
52+
expect(json_response[:errors]).to containing_exactly(
53+
hash_including(
54+
message: "Redirect to '#{redirect}' not allowed.",
55+
extensions: { code: 'USER_ERROR' }
56+
)
57+
)
58+
end
59+
end
60+
4661
context 'when unconfirmed_email is present' do
4762
let(:user) { create(:user, :confirmed, unconfirmed_email: 'vvega@wallaceinc.com') }
4863

0 commit comments

Comments
 (0)