diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb
index 747646cdf..8e88cd671 100644
--- a/app/controllers/users/sessions_controller.rb
+++ b/app/controllers/users/sessions_controller.rb
@@ -6,7 +6,7 @@ class Users::SessionsController < Devise::SessionsController
layout 'login', only: [:new, :create]
before_action :restore_procedure_context, only: [:new, :create]
-
+ skip_before_action :redirect_if_untrusted
# POST /resource/sign_in
def create
user = User.find_by(email: params[:user][:email])
@@ -18,6 +18,12 @@ class Users::SessionsController < Devise::SessionsController
super
end
+ def reset_link_sent
+ send_login_token_or_bufferize(current_instructeur)
+ flash[:notice] = "Nous venons de vous renvoyer un nouveau lien de connexion sécurisée à #{APPLICATION_NAME}"
+ redirect_to link_sent_path(email: current_instructeur.email)
+ end
+
def link_sent
if Devise.email_regexp.match?(params[:email])
@email = params[:email]
diff --git a/app/models/concerns/trusted_device_concern.rb b/app/models/concerns/trusted_device_concern.rb
index 07493f85b..b1c6af4e9 100644
--- a/app/models/concerns/trusted_device_concern.rb
+++ b/app/models/concerns/trusted_device_concern.rb
@@ -19,8 +19,8 @@ module TrustedDeviceConcern
def send_login_token_or_bufferize(instructeur)
if !instructeur.young_login_token?
- login_token = instructeur.create_trusted_device_token
- InstructeurMailer.send_login_token(instructeur, login_token).deliver_later
+ token = instructeur.create_trusted_device_token
+ InstructeurMailer.send_login_token(instructeur, token).deliver_later
end
end
diff --git a/app/views/instructeur_mailer/send_login_token.html.haml b/app/views/instructeur_mailer/send_login_token.html.haml
index 2bb0cd142..135401c5f 100644
--- a/app/views/instructeur_mailer/send_login_token.html.haml
+++ b/app/views/instructeur_mailer/send_login_token.html.haml
@@ -2,7 +2,7 @@
Bonjour,
%p
- Veuillez cliquer sur le lien suivant pour vous connecter sur le site #{APPLICATION_NAME} :
+ Veuillez cliquer sur le lien sécurisé suivant pour vous connecter à #{APPLICATION_NAME} :
= link_to(sign_in_by_link_url(@instructeur_id, jeton: @login_token), sign_in_by_link_url(@instructeur_id, jeton: @login_token))
%p
diff --git a/app/views/user_mailer/invite_instructeur.html.haml b/app/views/user_mailer/invite_instructeur.html.haml
index 996d00505..e6cee2f49 100644
--- a/app/views/user_mailer/invite_instructeur.html.haml
+++ b/app/views/user_mailer/invite_instructeur.html.haml
@@ -7,11 +7,18 @@
Vous venez d’être nommé instructeur sur #{APPLICATION_NAME}.
%p
- Votre compte a été créé pour l'adresse email #{@user.email}. Pour l’activer, nous vous invitons à cliquer sur le lien suivant :
+ Votre compte a été créé pour l'adresse email
+ %strong #{@user.email}.
+
+%p
+ Pour l’activer, nous vous invitons à cliquer sur le lien suivant :
= link_to(users_activate_url(token: @reset_password_token), users_activate_url(token: @reset_password_token))
%p
- Par ailleurs, nous vous invitons à prendre quelques minutes pour consulter notre tutoriel à destination des nouveaux instructeurs :
+ Lors de vos prochaines connexions sur Démarches simplifiées cliquez sur le bouton « Se connecter » positionné sur le haut de page ou bien sur ce lien :
+ = link_to new_user_session_url, new_user_session_url
+%p
+ Nous vous invitons aussi à consulter notre tutoriel à destination des nouveaux instructeurs :
= link_to(INSTRUCTEUR_TUTORIAL_URL, INSTRUCTEUR_TUTORIAL_URL)
= render partial: "layouts/mailers/signature"
diff --git a/app/views/users/sessions/link_sent.html.haml b/app/views/users/sessions/link_sent.html.haml
index cc4b44efe..9eb444c23 100644
--- a/app/views/users/sessions/link_sent.html.haml
+++ b/app/views/users/sessions/link_sent.html.haml
@@ -3,18 +3,27 @@
- content_for :footer do
= render partial: 'root/footer'
-#link-sent.container
- = image_tag('user/confirmation-email.svg', "aria-hidden": true)
- %h1 Encore une petite étape :)
+.fr-container.fr-my-5w
+ .fr-grid-row
+ .fr-col-12.fr-col-offset-md-1.fr-col-md-7
+ %h1.fr-mt-6w Encore une petite étape !
- %section.link-sent-info
- %p
- Ouvrez votre boite email #{@email} puis cliquez sur le lien d’activation du message Connexion sécurisée à #{APPLICATION_NAME}.
- %p
- = t('views.users.shared.email_can_take_a_while_html')
+ %section
+ %p.fr-text--lead
+ Nous venons de vous envoyer un courriel sur votre boite email #{@email}.
+ Veuillez l’ouvrir et cliquer sur le lien de connexion sécurisée à #{APPLICATION_NAME}.
- %section.link-sent-help
- %p
- Si vous voyez cette page trop souvent, consultez notre aide : #{link_to t("links.common.faq.confirmer_compte_chaque_connexion_url"), **external_link_attributes}
- %p
- = t('views.users.shared.contact_us_if_any_trouble_html', href: contact_admin_url)
+ %p.fr-text--lead
+ Ce lien est valide une semaine et peut-être réutilisé plusieurs fois.
+
+ %p.fr-text--sm.fr-text-mention--grey
+ Ce courriel peut mettre jusqu’à 15 minutes pour arriver. Si vous n’avez pas reçu de courriel (n’hésitez pas à vérifier dans les indésirables), cliquez sur le bouton ci-dessous.
+
+ = button_to instructeurs_reset_link_sent_path, class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-mail-line', method: 'POST' do
+ Renvoyer le courriel
+
+ %section
+ %p.fr-mt-3w
+ Si vous voyez cette page trop souvent, consultez notre aide : #{link_to t("links.common.faq.confirmer_compte_chaque_connexion_url"), **external_link_attributes}
+ %p.fr-mt-3w
+ = t('views.users.shared.contact_us_if_any_trouble_html', href: contact_admin_url)
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 5d16edd13..616cc3df1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -515,7 +515,7 @@ en:
check_france_connect_html: Have you once logged in with France Connect? If yes, try again with France Connect.
check_gpdr: "The account may have been deleted in the event of prolonged inactivity and no current file. In this case you will have to recreate an account from a procedure."
shared:
- email_can_take_a_while_html: Please note that this message can take up to 15 minutes to arrive.
+ email_can_take_a_while_html: Please note that this email can take up to 15 minutes to arrive.
contact_us_if_any_trouble_html: 'You can contact us through this form if a problem still exists.'
modal:
publish:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 99c2f7102..58abcf5df 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -519,7 +519,7 @@ fr:
open_your_mailbox: "Maintenant ouvrez votre boite email."
title: "Lien de réinitialisation du mot de passe envoyé"
shared:
- email_can_take_a_while_html: "Attention, ce message peut mettre jusqu’à 15 minutes pour arriver."
+ email_can_take_a_while_html: "Attention, ce courriel peut mettre jusqu’à 15 minutes pour arriver."
contact_us_if_any_trouble_html: 'En cas de difficultés, nous restons joignables via ce formulaire.'
modal:
publish:
diff --git a/config/routes.rb b/config/routes.rb
index 4f7a5789b..dbe210a06 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -125,6 +125,7 @@ Rails.application.routes.draw do
get '/users/no_procedure' => 'users/sessions#no_procedure'
get 'connexion-par-jeton/:id' => 'users/sessions#sign_in_by_link', as: 'sign_in_by_link'
get 'lien-envoye' => 'users/sessions#link_sent', as: 'link_sent'
+ post '/instructeurs/reset-link-sent' => 'users/sessions#reset_link_sent'
get '/users/password/reset-link-sent' => 'users/passwords#reset_link_sent'
end
diff --git a/spec/controllers/users/sessions_controller_spec.rb b/spec/controllers/users/sessions_controller_spec.rb
index 43212984d..9ccf0ced1 100644
--- a/spec/controllers/users/sessions_controller_spec.rb
+++ b/spec/controllers/users/sessions_controller_spec.rb
@@ -244,4 +244,36 @@ describe Users::SessionsController, type: :controller do
end
end
end
+
+ describe '#reset_link_sent' do
+ let(:instructeur) { create(:instructeur, user: user) }
+ before { sign_in(user) }
+ subject { post :reset_link_sent }
+
+ context 'when the instructeur is signed without trust_device_token' do
+ it 'send InstructeurMailer.send_login_token' do
+ expect(InstructeurMailer).to receive(:send_login_token).with(instructeur, anything).and_return(double(deliver_later: true))
+ expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(1)
+ end
+ end
+
+ context 'when the instructeur is signed with an young trust_device_token' do
+ before { instructeur.create_trusted_device_token }
+ it 'doesnot send InstructeurMailer.send_login_token' do
+ expect(InstructeurMailer).not_to receive(:send_login_token)
+ expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(0)
+ end
+ end
+
+ context 'when the instructeur is signed with an old trust_device_token' do
+ let(:token) { instructeur.create_trusted_device_token }
+ before do
+ travel_to 15.minutes.from_now
+ end
+ it 'send InstructeurMailer.send_login_token' do
+ expect(InstructeurMailer).to receive(:send_login_token).with(instructeur, anything).and_return(double(deliver_later: true))
+ expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(1)
+ end
+ end
+ end
end