From 468678f13ea63a7cc9e1255e2c178d4ba50790b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Charignon?= Date: Thu, 21 Nov 2024 17:00:56 +0100 Subject: [PATCH] =?UTF-8?q?r=C3=A9cup=C3=A8re=20le=20siret=20pro-connect?= =?UTF-8?q?=20et=20l'enregistre=20sur=20le=20compte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/pro_connect_helper.rb | 2 +- .../pro_connect_recupere_compte_helper.rb | 11 +- ...pro_connect_recupere_compte_helper_spec.rb | 122 ++++++------------ 3 files changed, 50 insertions(+), 85 deletions(-) diff --git a/app/helpers/pro_connect_helper.rb b/app/helpers/pro_connect_helper.rb index cc3d0091e..03e7e3afb 100644 --- a/app/helpers/pro_connect_helper.rb +++ b/app/helpers/pro_connect_helper.rb @@ -12,7 +12,7 @@ def auth_path(pc_state, pc_nonce, callback_url) client_id: PC_CLIENT_ID, redirect_uri: callback_url, acr_values: 'eidas1', - scope: 'openid email usual_name given_name', + scope: 'openid email usual_name given_name siret', state: pc_state, nonce: pc_nonce } diff --git a/app/helpers/pro_connect_recupere_compte_helper.rb b/app/helpers/pro_connect_recupere_compte_helper.rb index a3b6c39a2..e789397a1 100644 --- a/app/helpers/pro_connect_recupere_compte_helper.rb +++ b/app/helpers/pro_connect_recupere_compte_helper.rb @@ -40,11 +40,14 @@ def cherche_compte_pole_emploi(email) end def actualise_autres_champs_et_sauve(compte, user_info) - compte.id_pro_connect = user_info['sub'] - compte.prenom = user_info['given_name'] - compte.nom = user_info['usual_name'] + compte.assign_attributes( + id_pro_connect: user_info['sub'], + prenom: user_info['given_name'], + nom: user_info['usual_name'], + siret_pro_connect: user_info['siret'], + confirmed_at: compte.confirmed_at || Time.zone.now + ) compte.password = SecureRandom.uuid if compte.encrypted_password.blank? - compte.confirmed_at ||= Time.zone.now compte.save! compte end diff --git a/spec/helpers/pro_connect_recupere_compte_helper_spec.rb b/spec/helpers/pro_connect_recupere_compte_helper_spec.rb index 924b62f32..35d7f62e2 100644 --- a/spec/helpers/pro_connect_recupere_compte_helper_spec.rb +++ b/spec/helpers/pro_connect_recupere_compte_helper_spec.rb @@ -9,24 +9,31 @@ let(:hier) { Time.zone.local(2023, 1, 9, 12, 0, 0) } describe '#cree_ou_recupere_compte' do - let(:id_ic) { 'identifiant_ic' } + let(:sub) { 'identifiant_pc' } + let(:siret) { '13002526500013' } + + def user_info(email) + { + 'sub' => sub, + 'email' => email, + 'given_name' => 'prénom', + 'usual_name' => 'nom', + 'siret' => siret + } + end context "le compte n'existe pas" do it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil expect(compte.email).to eq(email) - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.confirmed_at).to eq(aujourdhui) expect(compte.password).not_to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) + expect(compte.prenom).to eq('prénom') + expect(compte.nom).to eq('nom') + expect(compte.siret_pro_connect).to eq(siret) end end end @@ -38,19 +45,15 @@ it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil expect(compte.email).to eq(email) - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.confirmed_at).to eq(aujourdhui) expect(compte.password).to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) + expect(compte.prenom).to eq('prénom') + expect(compte.nom).to eq('nom') + expect(compte.siret_pro_connect).to eq(siret) end end end @@ -62,19 +65,15 @@ it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => 'toto@eva.beta.gouv.FR', - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info('toto@eva.beta.gouv.FR')) expect(compte).not_to be_nil expect(compte.email).to eq(email) - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.confirmed_at).to eq(aujourdhui) expect(compte.password).to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) + expect(compte.prenom).to eq('prénom') + expect(compte.nom).to eq('nom') + expect(compte.siret_pro_connect).to eq(siret) end end end @@ -86,19 +85,13 @@ it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.email).to eq(email) expect(compte.confirmed_at).to eq(aujourdhui) expect(compte.password).not_to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) + expect(compte.id).not_to eq(Compte.only_deleted.find_by(email: email).id) end end @@ -106,48 +99,34 @@ context 'le compte existe déjà en base avec id pro connect, même email' do before do - create :compte_admin, email: email, confirmed_at: hier, id_pro_connect: id_ic + create :compte_admin, email: email, confirmed_at: hier, id_pro_connect: sub end it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.email).to eq(email) expect(compte.confirmed_at).to eq(hier) expect(compte.password).to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) end end end context 'le compte existe déjà en base avec id pro connect, email différent' do before do - create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: id_ic + create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: sub end it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.email).to eq(email) expect(compte.confirmed_at).to eq(aujourdhui) expect(compte.password).to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) end end end @@ -155,24 +134,17 @@ context "Il existe deux comptes en base dans le cas d'une mise à jourd d'email" do before do create :compte_admin, email: email, confirmed_at: hier - create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: id_ic + create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: sub end it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte).not_to be_nil - expect(compte.prenom).to eq('prénom') - expect(compte.nom).to eq('nom') expect(compte.email).to eq(email) expect(compte.confirmed_at).to eq(hier) expect(compte.password).to be_nil - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) ancien_compte = Compte.find_by(email: ancien_email) expect(ancien_compte).not_to be_nil expect(ancien_compte.id_pro_connect).to be_nil @@ -187,12 +159,7 @@ it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email)) expect(compte.confirmed_at).to eq(hier) end end @@ -205,15 +172,10 @@ it do Timecop.freeze(aujourdhui) do - compte = described_class.cree_ou_recupere_compte({ - 'sub' => id_ic, - 'email' => email_ft, - 'given_name' => 'prénom', - 'usual_name' => 'nom' - }) + compte = described_class.cree_ou_recupere_compte(user_info(email_ft)) expect(compte).not_to be_nil expect(compte.email).to eq(email_ft) - expect(compte.id_pro_connect).to eq(id_ic) + expect(compte.id_pro_connect).to eq(sub) expect(compte.id).to eq(compte_pe.id) end end