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:
gregoirenovel 2018-04-27 14:43:51 +02:00 committed by GitHub
commit 4ed5b42de9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 101 additions and 24 deletions

View file

@ -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(
administrateurs: [current_administrateur]
)
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

View 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

View file

@ -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)

View file

@ -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)

View 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 lactiver, 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 dutilisation 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

View file

@ -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

View 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'

View file

@ -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'

View file

@ -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