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]
|
procedure_id = params[:procedure_id]
|
||||||
|
|
||||||
if @gestionnaire.nil?
|
if @gestionnaire.nil?
|
||||||
new_gestionnaire!
|
invite_gestionnaire(params[:gestionnaire][:email])
|
||||||
else
|
else
|
||||||
assign_gestionnaire!
|
assign_gestionnaire!
|
||||||
end
|
end
|
||||||
|
@ -42,22 +42,23 @@ class Admin::GestionnairesController < AdminController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def new_gestionnaire!
|
def invite_gestionnaire(email)
|
||||||
attributes = params.require(:gestionnaire).permit(:email)
|
password = SecureRandom.hex
|
||||||
.merge(password: SecureRandom.hex(5))
|
|
||||||
|
|
||||||
@gestionnaire = Gestionnaire.create(
|
@gestionnaire = Gestionnaire.create(
|
||||||
attributes.merge(
|
email: email,
|
||||||
administrateurs: [current_administrateur]
|
password: password,
|
||||||
)
|
password_confirmation: password,
|
||||||
|
administrateurs: [current_administrateur]
|
||||||
)
|
)
|
||||||
|
|
||||||
if @gestionnaire.errors.messages.empty?
|
if @gestionnaire.errors.messages.empty?
|
||||||
|
@gestionnaire.invite!
|
||||||
|
|
||||||
if User.exists?(email: @gestionnaire.email)
|
if User.exists?(email: @gestionnaire.email)
|
||||||
GestionnaireMailer.user_to_gestionnaire(@gestionnaire.email).deliver_now!
|
GestionnaireMailer.user_to_gestionnaire(@gestionnaire.email).deliver_now!
|
||||||
else
|
else
|
||||||
User.create(attributes)
|
User.create(email: email, password: password)
|
||||||
GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now!
|
|
||||||
end
|
end
|
||||||
flash.notice = 'Accompagnateur ajouté'
|
flash.notice = 'Accompagnateur ajouté'
|
||||||
else
|
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
|
class GestionnaireMailer < ApplicationMailer
|
||||||
layout 'mailers/layout'
|
layout 'mailers/layout'
|
||||||
|
|
||||||
def new_gestionnaire(email, password)
|
def invite_gestionnaire(gestionnaire, reset_password_token)
|
||||||
send_mail(email, password, "Vous avez été nommé accompagnateur sur demarches-simplifiees.fr")
|
@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
|
end
|
||||||
|
|
||||||
def user_to_gestionnaire(email)
|
def user_to_gestionnaire(email)
|
||||||
|
|
|
@ -144,6 +144,12 @@ class Gestionnaire < ApplicationRecord
|
||||||
Follow.where(gestionnaire: self, dossier: dossier).update_all(attributes)
|
Follow.where(gestionnaire: self, dossier: dossier).update_all(attributes)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite!
|
||||||
|
reset_password_token = set_reset_password_token
|
||||||
|
|
||||||
|
GestionnaireMailer.invite_gestionnaire(self, reset_password_token).deliver_now!
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def valid_couple_table_attr?(table, column)
|
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
|
resource :dossiers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
namespace :gestionnaire do
|
||||||
|
get 'activate' => '/gestionnaires/activate#new'
|
||||||
|
patch 'activate' => '/gestionnaires/activate#create'
|
||||||
|
end
|
||||||
|
|
||||||
namespace :admin do
|
namespace :admin do
|
||||||
get 'activate' => '/administrateurs/activate#new'
|
get 'activate' => '/administrateurs/activate#new'
|
||||||
patch 'activate' => '/administrateurs/activate#create'
|
patch 'activate' => '/administrateurs/activate#create'
|
||||||
|
|
|
@ -149,8 +149,7 @@ describe Admin::GestionnairesController, type: :controller do
|
||||||
|
|
||||||
context 'Email notification' do
|
context 'Email notification' do
|
||||||
it 'Notification email is sent when accompagnateur is create' do
|
it 'Notification email is sent when accompagnateur is create' do
|
||||||
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
expect_any_instance_of(Gestionnaire).to receive(:invite!)
|
||||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue