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 def self.retrieve_user_informations_particulier(code) client = FranceConnectParticulierClient.new(code) user_info = client.access_token!(client_auth_method: :secret) .userinfo! .raw_attributes 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