From 8e5a8d1d54e7ca8348cf50a0f1a37a17a6148e4b Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 27 Aug 2019 17:11:19 +0100 Subject: [PATCH] Merge pull request from GHSA-7cmh-wm9h-j63f --- .../users/omniauth_callbacks_controller.rb | 5 ++++- .../omniauth_callbacks_controller_spec.rb | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index cac09b34214..9cfaa46df70 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -134,7 +134,10 @@ class Users::OmniauthCallbacksController < ApplicationController user.email_tokens.create!(email: user.email) end - user.activate + if !user.active || !user.email_confirmed? + user.password = SecureRandom.hex + user.activate + end user.update!(registration_ip_address: request.remote_ip) if user.registration_ip_address.blank? end diff --git a/spec/requests/omniauth_callbacks_controller_spec.rb b/spec/requests/omniauth_callbacks_controller_spec.rb index 25d92388257..f8e2ac8679a 100644 --- a/spec/requests/omniauth_callbacks_controller_spec.rb +++ b/spec/requests/omniauth_callbacks_controller_spec.rb @@ -286,7 +286,7 @@ RSpec.describe Users::OmniauthCallbacksController do expect(user.email_confirmed?).to eq(true) end - it "should activate/unstage staged user" do + it "should unstage staged user" do user.update!(staged: true, registration_ip_address: nil) user.reload @@ -306,6 +306,22 @@ RSpec.describe Users::OmniauthCallbacksController do expect(user.registration_ip_address).to be_present end + it "should activate user with matching email" do + user.update!(password: "securepassword", active: false) + + user.reload + expect(user.active).to eq(false) + expect(user.confirm_password?("securepassword")).to eq(true) + + get "/auth/google_oauth2/callback.json" + + user.reload + expect(user.active).to eq(true) + + # Delete the password, it may have been set by someone else + expect(user.confirm_password?("securepassword")).to eq(false) + end + context 'when user has second factor enabled' do before do user.create_totp(enabled: true)