Merge pull request #6551 from betagouv/allow_some_instructeur_to_change_their_profile
Laisse les instructeurs changer leur emails vers des domaines autorisés
This commit is contained in:
commit
c15e1a6de4
6 changed files with 48 additions and 14 deletions
|
@ -1,9 +1,5 @@
|
||||||
module Users
|
module Users
|
||||||
class ProfilController < UserController
|
class ProfilController < UserController
|
||||||
before_action :redirect_if_instructeur,
|
|
||||||
only: :update_email,
|
|
||||||
if: -> { instructeur_signed_in? }
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@waiting_transfers = current_user.dossiers.joins(:transfer).group('dossier_transfers.email').count.to_a
|
@waiting_transfers = current_user.dossiers.joins(:transfer).group('dossier_transfers.email').count.to_a
|
||||||
end
|
end
|
||||||
|
@ -15,7 +11,9 @@ module Users
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_email
|
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')
|
flash.notice = t('devise.registrations.update_needs_confirmation')
|
||||||
elsif current_user.errors&.details&.dig(:email)&.any? { |e| e[:error] == :taken }
|
elsif current_user.errors&.details&.dig(:email)&.any? { |e| e[:error] == :taken }
|
||||||
UserMailer.account_already_taken(current_user, requested_email).deliver_later
|
UserMailer.account_already_taken(current_user, requested_email).deliver_later
|
||||||
|
@ -44,8 +42,8 @@ module Users
|
||||||
update_email_params[:email]
|
update_email_params[:email]
|
||||||
end
|
end
|
||||||
|
|
||||||
def redirect_if_instructeur
|
def target_email_allowed?
|
||||||
redirect_to profil_path
|
LEGIT_ADMIN_DOMAINS.any? { |d| requested_email.end_with?(d) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def next_owner_email
|
def next_owner_email
|
||||||
|
|
|
@ -18,10 +18,16 @@
|
||||||
%p
|
%p
|
||||||
Pour finaliser votre changement d’adresse, vérifiez vos emails et cliquez sur le lien de confirmation.
|
Pour finaliser votre changement d’adresse, vérifiez vos emails et cliquez sur le lien de confirmation.
|
||||||
|
|
||||||
- if !instructeur_signed_in?
|
- if current_user.instructeur?
|
||||||
= form_for @current_user, url: update_email_path, method: :patch, html: { class: 'form' } do |f|
|
%p.mb-4
|
||||||
= f.email_field :email, value: nil, placeholder: 'Nouvelle adresse email', required: true
|
= t('.email_explications_html',
|
||||||
= f.submit "Changer mon adresse", class: 'button primary'
|
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?
|
- if !instructeur_signed_in?
|
||||||
.card
|
.card
|
||||||
|
|
|
@ -78,3 +78,6 @@ DS_ENV="staging"
|
||||||
|
|
||||||
# API Particulier https://api.gouv.fr/les-api/api-particulier
|
# API Particulier https://api.gouv.fr/les-api/api-particulier
|
||||||
# API_PARTICULIER_URL="https://particulier.api.gouv.fr/api"
|
# 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."
|
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."
|
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 ?"
|
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:
|
transfer_all_dossiers:
|
||||||
new_transfer:
|
new_transfer:
|
||||||
one: "Le transfert d'un dossier à %{email} est en cours"
|
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 }
|
let!(:user) { create(:instructeur, email: instructeur_email).user }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
patch :update_email, params: { user: { email: 'loulou@lou.com' } }
|
patch :update_email, params: { user: { email: requested_email } }
|
||||||
user.reload
|
user.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(user.unconfirmed_email).to be_nil }
|
context 'when the requested email is allowed' do
|
||||||
it { expect(response).to redirect_to(profil_path) }
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue