Merge pull request #1891 from betagouv/fix_1855_sense_of_shame
[fix #1855] Gestionnaire: are now invited to create their password
This commit is contained in:
commit
4ed5b42de9
9 changed files with 101 additions and 24 deletions
|
@ -23,7 +23,7 @@ class Admin::GestionnairesController < AdminController
|
|||
procedure_id = params[:procedure_id]
|
||||
|
||||
if @gestionnaire.nil?
|
||||
new_gestionnaire!
|
||||
invite_gestionnaire(params[:gestionnaire][:email])
|
||||
else
|
||||
assign_gestionnaire!
|
||||
end
|
||||
|
@ -42,22 +42,23 @@ class Admin::GestionnairesController < AdminController
|
|||
|
||||
private
|
||||
|
||||
def new_gestionnaire!
|
||||
attributes = params.require(:gestionnaire).permit(:email)
|
||||
.merge(password: SecureRandom.hex(5))
|
||||
def invite_gestionnaire(email)
|
||||
password = SecureRandom.hex
|
||||
|
||||
@gestionnaire = Gestionnaire.create(
|
||||
attributes.merge(
|
||||
email: email,
|
||||
password: password,
|
||||
password_confirmation: password,
|
||||
administrateurs: [current_administrateur]
|
||||
)
|
||||
)
|
||||
|
||||
if @gestionnaire.errors.messages.empty?
|
||||
@gestionnaire.invite!
|
||||
|
||||
if User.exists?(email: @gestionnaire.email)
|
||||
GestionnaireMailer.user_to_gestionnaire(@gestionnaire.email).deliver_now!
|
||||
else
|
||||
User.create(attributes)
|
||||
GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now!
|
||||
User.create(email: email, password: password)
|
||||
end
|
||||
flash.notice = 'Accompagnateur ajouté'
|
||||
else
|
||||
|
|
47
app/controllers/gestionnaires/activate_controller.rb
Normal file
47
app/controllers/gestionnaires/activate_controller.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
class Gestionnaires::ActivateController < ApplicationController
|
||||
layout "new_application"
|
||||
|
||||
def new
|
||||
@gestionnaire = Gestionnaire.with_reset_password_token(params[:token])
|
||||
|
||||
if !@gestionnaire
|
||||
flash.alert = "Le lien de validation du compte accompagnateur a expiré, contactez-nous à contact@demarches-simplifiees.fr pour obtenir un nouveau lien."
|
||||
redirect_to root_path
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
password = create_gestionnaire_params[:password]
|
||||
gestionnaire = Gestionnaire.reset_password_by_token({
|
||||
password: password,
|
||||
password_confirmation: password,
|
||||
reset_password_token: create_gestionnaire_params[:reset_password_token]
|
||||
})
|
||||
|
||||
if gestionnaire && gestionnaire.errors.empty?
|
||||
sign_in(gestionnaire, scope: :gestionnaire)
|
||||
try_to_authenticate(User, gestionnaire.email, password)
|
||||
try_to_authenticate(Administrateur, gestionnaire.email, password)
|
||||
flash.notice = "Mot de passe enregistré"
|
||||
redirect_to gestionnaire_procedures_path
|
||||
else
|
||||
flash.alert = gestionnaire.errors.full_messages
|
||||
redirect_to gestionnaire_activate_path(token: create_gestionnaire_params[:reset_password_token])
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_gestionnaire_params
|
||||
params.require(:gestionnaire).permit(:reset_password_token, :password)
|
||||
end
|
||||
|
||||
def try_to_authenticate(klass, email, password)
|
||||
resource = klass.find_for_database_authentication(email: email)
|
||||
|
||||
if resource&.valid_password?(password)
|
||||
sign_in resource
|
||||
resource.force_sync_credentials
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,8 +1,12 @@
|
|||
class GestionnaireMailer < ApplicationMailer
|
||||
layout 'mailers/layout'
|
||||
|
||||
def new_gestionnaire(email, password)
|
||||
send_mail(email, password, "Vous avez été nommé accompagnateur sur demarches-simplifiees.fr")
|
||||
def invite_gestionnaire(gestionnaire, reset_password_token)
|
||||
@reset_password_token = reset_password_token
|
||||
@gestionnaire = gestionnaire
|
||||
mail(to: gestionnaire.email,
|
||||
subject: "demarches-simplifiees.fr - Activez votre compte accompagnateur",
|
||||
reply_to: "contact@demarches-simplifiees.fr")
|
||||
end
|
||||
|
||||
def user_to_gestionnaire(email)
|
||||
|
|
|
@ -144,6 +144,12 @@ class Gestionnaire < ApplicationRecord
|
|||
Follow.where(gestionnaire: self, dossier: dossier).update_all(attributes)
|
||||
end
|
||||
|
||||
def invite!
|
||||
reset_password_token = set_reset_password_token
|
||||
|
||||
GestionnaireMailer.invite_gestionnaire(self, reset_password_token).deliver_now!
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def valid_couple_table_attr?(table, column)
|
||||
|
|
19
app/views/gestionnaire_mailer/invite_gestionnaire.html.haml
Normal file
19
app/views/gestionnaire_mailer/invite_gestionnaire.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
- content_for(:title, 'Activation de votre compte accompagnateur')
|
||||
|
||||
Bonjour,
|
||||
%br
|
||||
%br
|
||||
Vous venez d'être nommé accompagnateur sur demarches-simplifiees.fr.
|
||||
%br
|
||||
Votre compte a été créé pour l'adresse email #{@gestionnaire.email}. Pour l’activer, je vous invite à cliquer sur le lien suivant :
|
||||
= link_to(gestionnaire_activate_url(token: @reset_password_token), gestionnaire_activate_url(token: @reset_password_token))
|
||||
%br
|
||||
%br
|
||||
Par ailleurs, notre site de documentation qui regroupe l'ensemble des informations relatives à demarches-simplifiees.fr ainsi que des tutoriels d’utilisation est à votre disposition :
|
||||
= link_to('https://demarches-simplifiees.gitbook.io/demarches-simplifiees/', 'https://demarches-simplifiees.gitbook.io/demarches-simplifiees/')
|
||||
%br
|
||||
%br
|
||||
Bonne journée,
|
||||
%br
|
||||
%br
|
||||
L'équipe demarches-simplifiees.fr
|
|
@ -1,11 +0,0 @@
|
|||
Bienvenue sur demarches-simplifiees.fr,
|
||||
|
||||
Vous venez d'être nommé accompagnateur sur demarches-simplifiees.fr. Pour mémoire, voici quelques informations utiles :
|
||||
|
||||
URL : <%= new_gestionnaire_session_url %>
|
||||
Login : <%= @email %>
|
||||
Mot de passe : <%= @args %>
|
||||
|
||||
Bonne journée,
|
||||
|
||||
L'équipe demarches-simplifiees.fr
|
7
app/views/gestionnaires/activate/new.html.haml
Normal file
7
app/views/gestionnaires/activate/new.html.haml
Normal file
|
@ -0,0 +1,7 @@
|
|||
.container
|
||||
= form_for @gestionnaire, url: { controller: 'gestionnaires/activate', action: :create }, html: { class: "form" } do |f|
|
||||
%br
|
||||
%h1= @gestionnaire.email
|
||||
= f.password_field :password, placeholder: 'Mot de passe'
|
||||
= f.hidden_field :reset_password_token, value: params[:token]
|
||||
= f.submit 'Définir le mot de passe', class: 'button large primary expand'
|
|
@ -115,6 +115,11 @@ Rails.application.routes.draw do
|
|||
resource :dossiers
|
||||
end
|
||||
|
||||
namespace :gestionnaire do
|
||||
get 'activate' => '/gestionnaires/activate#new'
|
||||
patch 'activate' => '/gestionnaires/activate#create'
|
||||
end
|
||||
|
||||
namespace :admin do
|
||||
get 'activate' => '/administrateurs/activate#new'
|
||||
patch 'activate' => '/administrateurs/activate#create'
|
||||
|
|
|
@ -149,8 +149,7 @@ describe Admin::GestionnairesController, type: :controller do
|
|||
|
||||
context 'Email notification' do
|
||||
it 'Notification email is sent when accompagnateur is create' do
|
||||
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||
expect_any_instance_of(Gestionnaire).to receive(:invite!)
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue