Skip to content

Commit e0e3eac

Browse files
committed
fix: conflict between omniauth_registrations_controller_extends and OmniauthRegistrationsControllerOverride
1 parent e17e781 commit e0e3eac

File tree

4 files changed

+73
-88
lines changed

4 files changed

+73
-88
lines changed

app/controllers/decidim/omniauth_registrations_controller_override.rb

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,73 @@ module OmniauthRegistrationsControllerOverride
77
included do
88
include Decidim::AfterSignInActionHelper
99

10+
def create
11+
form_params = user_params_from_oauth_hash || params[:user]
12+
13+
@form = form(Decidim::OmniauthRegistrationForm).from_params(form_params)
14+
@form.email ||= verified_email
15+
16+
Decidim::CreateOmniauthRegistration.call(@form, verified_email) do
17+
on(:ok) do |user|
18+
if user.active_for_authentication?
19+
sign_in_and_redirect user, event: :authentication
20+
provider_name = current_organization.enabled_omniauth_providers.dig(@form.provider.to_sym, :display_name) || @form.provider.titleize
21+
set_flash_message :notice, :success, kind: provider_name
22+
else
23+
expire_data_after_sign_in!
24+
user.resend_confirmation_instructions unless user.confirmed?
25+
redirect_to decidim.root_path
26+
flash[:notice] = t("devise.registrations.signed_up_but_unconfirmed")
27+
end
28+
end
29+
30+
on(:invalid) do
31+
set_flash_message :notice, :success, kind: @form.provider.capitalize
32+
session["devise.omniauth.verified_email"] = verified_email
33+
render :new
34+
end
35+
36+
on(:error) do |user|
37+
if user.errors[:email]
38+
set_flash_message :alert, :failure, kind: @form.provider.capitalize,
39+
reason: t("decidim.devise.omniauth_registrations.create.email_already_exists")
40+
end
41+
session["devise.omniauth.verified_email"] = verified_email
42+
render :new
43+
end
44+
end
45+
end
46+
47+
def sign_in_and_redirect(resource_or_scope, *args)
48+
strategy = request.env["omniauth.strategy"]
49+
provider = strategy.present? ? strategy.name : request.params["provider"]
50+
session["omniauth.provider"] = provider
51+
super
52+
end
53+
54+
# Skip authorization handler by default
55+
def skip_first_login_authorization?
56+
ActiveRecord::Type::Boolean.new.cast(ENV.fetch("SKIP_FIRST_LOGIN_AUTHORIZATION", "false"))
57+
end
58+
59+
# def failure
60+
# https://github.com/heartcombo/devise/blob/main/app/controllers/devise/omniauth_callbacks_controller.rb#L10
61+
# end
62+
63+
protected
64+
65+
def after_omniauth_failure_path_for(scope)
66+
request.params[stored_location_key_for(scope)] || session[stored_location_key_for(scope)] || request.referer || super
67+
end
68+
69+
private
70+
71+
def verified_email
72+
@verified_email ||= oauth_data.dig(:info, :email) || session.delete("devise.omniauth.verified_email")
73+
end
74+
75+
# rubocop: disable Metrics/CyclomaticComplexity
76+
# rubocop: disable Metrics/PerceivedComplexity
1077
def after_sign_in_path_for(user)
1178
after_sign_in_action_for(user, request.params[:after_action]) if request.params[:after_action].present?
1279

@@ -15,14 +82,14 @@ def after_sign_in_path_for(user)
1582
elsif user.present? && !user.tos_accepted? && request.params[:after_action].present?
1683
session["tos_after_action"] = request.params[:after_action]
1784
super
18-
elsif !pending_redirect?(user) && first_login_and_not_authorized?(user)
19-
decidim_verifications.authorizations_path
85+
elsif !skip_first_login_authorization? && (first_login_and_not_authorized?(user) && !user.admin? && !pending_redirect?(user))
86+
decidim_verifications.first_login_authorizations_path
2087
else
2188
super
2289
end
2390
end
24-
25-
private
91+
# rubocop: enable Metrics/CyclomaticComplexity
92+
# rubocop: enable Metrics/PerceivedComplexity
2693

2794
def verified_email
2895
@verified_email ||= find_verified_email

config/application.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class Application < Rails::Application
4949
config.after_initialize do
5050
require "extends/forms/decidim/initiatives/initiative_form_extends"
5151
require "extends/controllers/decidim/devise/sessions_controller_extends"
52-
require "extends/controllers/decidim/devise/omniauth_registrations_controller_extends"
5352
require "extends/controllers/decidim/homepage_controller_extends"
5453
require "extends/forms/decidim/admin/organization_appearance_form_extends"
5554
require "extends/omniauth/strategies/france_connect_extends"

lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb

Lines changed: 0 additions & 83 deletions
This file was deleted.

lib/extends/controllers/decidim/devise/sessions_controller_extends.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ def destroy
3131
end
3232

3333
def after_sign_in_path_for(user)
34+
after_sign_in_action_for(user, request.params[:after_action]) if request.params[:after_action].present?
35+
3436
if user.present? && user.blocked?
3537
check_user_block_status(user)
3638
elsif !skip_first_login_authorization? && (first_login_and_not_authorized?(user) && !user.admin? && !pending_redirect?(user))

0 commit comments

Comments
 (0)