demarches-normaliennes/app/controllers/france_connect/particulier_controller.rb

63 lines
1.6 KiB
Ruby
Raw Normal View History

class FranceConnect::ParticulierController < ApplicationController
before_action :redirect_to_login_if_fc_aborted, only: [:callback]
def login
redirect_to FranceConnectService.authorization_uri
end
def callback
fetched_fci = FranceConnectService.retrieve_user_informations_particulier(params[:code])
fci = FranceConnectInformation
.find_by(france_connect_particulier_id: fetched_fci[:france_connect_particulier_id]) ||
2018-10-01 14:20:14 +02:00
fetched_fci.tap(&:save)
if fci.user.nil?
user = User.find_or_create_by(email: fci.email_france_connect) do |new_user|
new_user.password = Devise.friendly_token[0, 20]
2018-10-25 15:07:15 +02:00
new_user.confirmed_at = Time.zone.now
end
fci.update_attribute('user_id', user.id)
end
connect_france_connect_particulier(fci.user)
rescue Rack::OAuth2::Client::Error => e
Rails.logger.error e.message
redirect_france_connect_error_connection
end
private
def redirect_to_login_if_fc_aborted
if params[:code].empty?
redirect_to new_user_session_path
end
end
def connect_france_connect_particulier(user)
2018-10-01 13:24:37 +02:00
if user_signed_in?
sign_out :user
end
if gestionnaire_signed_in?
sign_out :gestionnaire
end
if administrateur_signed_in?
sign_out :administrateur
end
sign_in user
user.update_attribute('loged_in_with_france_connect', User.loged_in_with_france_connects.fetch(:particulier))
redirect_to stored_location_for(current_user) || root_path(current_user)
end
def redirect_france_connect_error_connection
flash.alert = t('errors.messages.france_connect.connexion')
redirect_to(new_user_session_path)
end
2017-04-04 15:27:04 +02:00
end