demarches-normaliennes/app/services/france_connect_service.rb

44 lines
1.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class FranceConnectService
def self.enabled?
ENV.fetch("FRANCE_CONNECT_ENABLED", "enabled") == "enabled"
end
def self.authorization_uri
client = FranceConnectParticulierClient.new
client.authorization_uri(
scope: [:profile, :email],
state: SecureRandom.hex(16),
nonce: SecureRandom.hex(16),
acr_values: 'eidas1'
)
end
def self.find_or_retrieve_france_connect_information(code)
fetched_fci = FranceConnectService.retrieve_user_informations_particulier(code)
FranceConnectInformation.find_by(france_connect_particulier_id: fetched_fci[:france_connect_particulier_id]) || fetched_fci
end
private
2018-01-11 17:07:35 +01:00
def self.retrieve_user_informations_particulier(code)
client = FranceConnectParticulierClient.new(code)
2018-01-11 18:16:38 +01:00
user_info = client.access_token!(client_auth_method: :secret)
.userinfo!
.raw_attributes
2018-01-11 17:07:35 +01:00
2018-01-11 18:16:38 +01:00
FranceConnectInformation.new(
gender: user_info[:gender],
given_name: user_info[:given_name],
family_name: user_info[:family_name],
email_france_connect: user_info[:email],
birthdate: user_info[:birthdate],
birthplace: user_info[:birthplace],
france_connect_particulier_id: user_info[:sub]
)
end
end