module Manager class AdministrateurConfirmationsController < Manager::ApplicationController before_action :set_procedure before_action :decrypt_params before_action :ensure_not_inviter, unless: -> { Rails.env.development? } before_action :ensure_not_invited, unless: -> { Rails.env.development? } def new @inviter = SuperAdmin.find(@inviter_id) end def create administrateur = Administrateur.by_email(@invited_email) AdministrateursProcedure.create!(procedure: @procedure, administrateur: administrateur) flash[:notice] = "L’administrateur \"#{administrateur.email}\" a été ajouté à la démarche." redirect_to manager_procedure_path(@procedure) end private def ensure_not_inviter redirect_unallowed if @inviter_id.to_i == current_super_admin.id end def ensure_not_invited redirect_unallowed if @invited_email == current_super_admin.email end def redirect_unallowed flash[:alert] = "Veuillez partager ce lien avec un autre super administrateur pour qu'il confirme votre action" redirect_to manager_procedure_path(@procedure) end def decrypt_params @inviter_id = decrypted_params[:inviter_id] @invited_email = decrypted_params[:email] rescue ActiveSupport::MessageVerifier::InvalidSignature, ArgumentError flash[:error] = "Le lien que vous avez utilisé est invalide. Veuillez contacter la personne qui vous l'a envoyé." redirect_to manager_procedure_path(@procedure) end def decrypted_params @decrypted_params ||= ActiveSupport::MessageVerifier.new( Rails.application.key_generator.generate_key("confirm_adding_administrateur") ).verify(Base64.urlsafe_decode64(params[:q])) end def set_procedure @procedure = Procedure.with_discarded.find(params[:procedure_id]) end end end