From 7ecf20ce75efa588d6ee4069a53130d530e37438 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 24 Mar 2022 12:38:32 +0100 Subject: [PATCH] harden email validation --- config/initializers/devise.rb | 2 +- .../groupe_instructeurs_controller_spec.rb | 20 +++++++++---------- .../users/sessions_controller_spec.rb | 9 +++++++-- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 9ed537df5..f23da8124 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -148,7 +148,7 @@ Devise.setup do |config| # Email regex used to validate email formats. It simply asserts that # one (and only one) @ exists in the given string. This is mainly # to give user feedback and not to assert the e-mail validity. - # config.email_regexp = /\A[^@]+@[^@]+\z/ + config.email_regexp = URI::MailTo::EMAIL_REGEXP # ==> Configuration for :timeoutable # The time you want to timeout the user session without activity. After this diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index b2009de94..a19bb76f7 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -34,17 +34,17 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do context 'when the routage is not activated on the procedure' do let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] } - let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } - let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } - let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] } - let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere_b.gouv.fr', administrateurs: [admin] } + let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] } + let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] } + let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere-a.gouv.fr', administrateurs: [admin] } + let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere-b.gouv.fr', administrateurs: [admin] } subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } } it { expect(response.status).to eq(200) } it 'sets the assigned and not assigned instructeurs' do expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2]) - expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr']) + expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere-a.gouv.fr', 'instructeur_4@ministere-b.gouv.fr']) end end end @@ -324,9 +324,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do describe '#remove_instructeur_procedure_non_routee' do let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] } - let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } - let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } - let!(:instructeur_assigned_3) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] } + let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] } + let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] } + let!(:instructeur_assigned_3) { create :instructeur, email: 'instructeur_3@ministere-a.gouv.fr', administrateurs: [admin] } subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } } it 'sets the assigned instructeurs' do expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2]) @@ -418,8 +418,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do describe '#export_groupe_instructeurs' do let(:procedure) { create(:procedure, :published) } let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 1 2') } - let(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } - let(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } + let(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] } + let(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] } subject do get :export_groupe_instructeurs, params: { procedure_id: procedure.id, format: :csv } diff --git a/spec/controllers/users/sessions_controller_spec.rb b/spec/controllers/users/sessions_controller_spec.rb index f1ddc88d5..99b156f6a 100644 --- a/spec/controllers/users/sessions_controller_spec.rb +++ b/spec/controllers/users/sessions_controller_spec.rb @@ -234,9 +234,14 @@ describe Users::SessionsController, type: :controller do end context 'when the email is evil' do - let(:link_email) { 'Hello, I am an evil email' } + [ + 'Hello, I am an evil email', + 'a@a%C2%A0evil%C2%A0text%C2%A0with%C2%A0spaces' + ].each do |evil_attempt| + let(:link_email) { evil_attempt } - it { expect(response).to redirect_to(root_path) } + it { expect(response).to redirect_to(root_path) } + end end end end