allow instructeur and administrateur to change their email to legit domain (#6550)
This commit is contained in:
parent
8616a06937
commit
44c880adc4
6 changed files with 48 additions and 14 deletions
|
@ -1,9 +1,5 @@
|
|||
module Users
|
||||
class ProfilController < UserController
|
||||
before_action :redirect_if_instructeur,
|
||||
only: :update_email,
|
||||
if: -> { instructeur_signed_in? }
|
||||
|
||||
def show
|
||||
@waiting_transfers = current_user.dossiers.joins(:transfer).group('dossier_transfers.email').count.to_a
|
||||
end
|
||||
|
@ -15,7 +11,9 @@ module Users
|
|||
end
|
||||
|
||||
def update_email
|
||||
if current_user.update(update_email_params)
|
||||
if current_user.instructeur? && !target_email_allowed?
|
||||
flash.alert = t('.email_not_allowed', contact_email: CONTACT_EMAIL, requested_email: requested_email)
|
||||
elsif current_user.update(update_email_params)
|
||||
flash.notice = t('devise.registrations.update_needs_confirmation')
|
||||
elsif current_user.errors&.details&.dig(:email)&.any? { |e| e[:error] == :taken }
|
||||
UserMailer.account_already_taken(current_user, requested_email).deliver_later
|
||||
|
@ -44,8 +42,8 @@ module Users
|
|||
update_email_params[:email]
|
||||
end
|
||||
|
||||
def redirect_if_instructeur
|
||||
redirect_to profil_path
|
||||
def target_email_allowed?
|
||||
LEGIT_ADMIN_DOMAINS.any? { |d| requested_email.end_with?(d) }
|
||||
end
|
||||
|
||||
def next_owner_email
|
||||
|
|
|
@ -18,10 +18,16 @@
|
|||
%p
|
||||
Pour finaliser votre changement d’adresse, vérifiez vos emails et cliquez sur le lien de confirmation.
|
||||
|
||||
- if !instructeur_signed_in?
|
||||
= form_for @current_user, url: update_email_path, method: :patch, html: { class: 'form' } do |f|
|
||||
= f.email_field :email, value: nil, placeholder: 'Nouvelle adresse email', required: true
|
||||
= f.submit "Changer mon adresse", class: 'button primary'
|
||||
- if current_user.instructeur?
|
||||
%p.mb-4
|
||||
= t('.email_explications_html',
|
||||
contact_email: CONTACT_EMAIL,
|
||||
application_name: APPLICATION_NAME,
|
||||
legit_admin_domains: LEGIT_ADMIN_DOMAINS.join(', '))
|
||||
|
||||
= form_for @current_user, url: update_email_path, method: :patch, html: { class: 'form' } do |f|
|
||||
= f.email_field :email, value: nil, placeholder: 'Nouvelle adresse email', required: true
|
||||
= f.submit "Changer mon adresse", class: 'button primary'
|
||||
|
||||
- if !instructeur_signed_in?
|
||||
.card
|
||||
|
|
|
@ -78,3 +78,6 @@ DS_ENV="staging"
|
|||
|
||||
# API Particulier https://api.gouv.fr/les-api/api-particulier
|
||||
# API_PARTICULIER_URL="https://particulier.api.gouv.fr/api"
|
||||
|
||||
# Les instructeurs et administrateurs peuvent changer leur email vers ces domaines
|
||||
# LEGIT_ADMIN_DOMAINS = "domaine_1.com;domaine_2.com"
|
||||
|
|
2
config/initializers/legit_admin_domains.rb
Normal file
2
config/initializers/legit_admin_domains.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
domains = ["gouv.fr", "sante.fr", "cnafmail.fr", "cnamts.fr", "cci.fr", "caf.fr", "msa.fr", "archi.fr", "ira-lille.fr"]
|
||||
LEGIT_ADMIN_DOMAINS = ENV["LEGIT_ADMIN_DOMAINS"]&.split(';') || domains
|
|
@ -10,6 +10,19 @@ fr:
|
|||
one: "Le nouveau propriétaire %{email} doit confirmer le transfert d'un dossier en suivant les instructions reçues dans son mail."
|
||||
other: "Le nouveau propriétaire %{email} doit confirmer le transfert de vos %{count} dossiers en suivant les instructions reçues dans son mail."
|
||||
transfer_confirmation: "Confirmez-vous le transfert ?"
|
||||
email_explications_html: >
|
||||
<b class="bold">%{application_name}</b> doit s'assurer que votre compte est utilisé dans un cadre professionnel.
|
||||
<br>
|
||||
<br>
|
||||
Nous pouvons autoriser automatiquement les changements d'email vers les domaines suivants :
|
||||
<br>
|
||||
%{legit_admin_domains}
|
||||
<br>
|
||||
<br>
|
||||
Si ce n'est pas votre cas, contactez le support :
|
||||
<a href="mailto:%{contact_email}">%{contact_email}</a>
|
||||
update_email:
|
||||
email_not_allowed: "L’email %{requested_email} ne peut être utilisé, contactez le support : <a href='mailto:%{contact_email}'>%{contact_email}</a>"
|
||||
transfer_all_dossiers:
|
||||
new_transfer:
|
||||
one: "Le transfert d'un dossier à %{email} est en cours"
|
||||
|
|
|
@ -90,12 +90,24 @@ describe Users::ProfilController, type: :controller do
|
|||
let!(:user) { create(:instructeur, email: instructeur_email).user }
|
||||
|
||||
before do
|
||||
patch :update_email, params: { user: { email: 'loulou@lou.com' } }
|
||||
patch :update_email, params: { user: { email: requested_email } }
|
||||
user.reload
|
||||
end
|
||||
|
||||
it { expect(user.unconfirmed_email).to be_nil }
|
||||
it { expect(response).to redirect_to(profil_path) }
|
||||
context 'when the requested email is allowed' do
|
||||
let(:requested_email) { 'legit@gouv.fr' }
|
||||
|
||||
it { expect(user.unconfirmed_email).to eq('legit@gouv.fr') }
|
||||
it { expect(response).to redirect_to(profil_path) }
|
||||
it { expect(flash.notice).to eq(I18n.t('devise.registrations.update_needs_confirmation')) }
|
||||
end
|
||||
|
||||
context 'when the requested email is not allowed' do
|
||||
let(:requested_email) { 'weird@gmail.com' }
|
||||
|
||||
it { expect(response).to redirect_to(profil_path) }
|
||||
it { expect(flash.alert).to include('contactez le support') }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue