5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-16 01:41:42 +00:00

fix: enviar las invitaciones luego de crear el rol

This commit is contained in:
f 2023-03-23 16:24:53 -03:00
parent 1fa37b20e1
commit 1bfff4dfdb

View file

@ -81,21 +81,25 @@ class UsuariesController < ApplicationController
authorize SiteUsuarie.new(@site, current_usuarie)
# Enviar la invitación si es necesario y agregar al sitio
invitaciones.each do |invitacion|
attributes = { email: invitacion.address, skip_invitation: true }
next if Usuarie.where(id: @site.roles.pluck(:usuarie_id)).find_by(attributes)
invitaciones.each do |address|
next if Usuarie.where(id: @site.roles.pluck(:usuarie_id)).find_by_email(address)
Usuarie.transaction do
usuarie = Usuarie.find_by attributes
usuarie ||= Usuarie.invite!(attributes).tap do |u|
usuarie = Usuarie.find_by_email(address)
usuarie ||= Usuarie.invite!({ email: address, skip_invitation: true }).tap do |u|
u.send :generate_invitation_token!
end
@site.roles.create(usuarie: usuarie, temporal: true, rol: invited_as)
role = @site.roles.create(usuarie: usuarie, temporal: true, rol: invited_as)
# XXX: La invitación tiene que ser enviada luego de crear el rol
usuarie.deliver_invitation
if role.persisted?
usuarie.deliver_invitation
else
raise ArgumentError, role.errors.full_messages
end
rescue ArgumentError => e
ExceptionNotifier.notify_exception(e, data: { site: @site.name, address: address })
end
end
@ -137,6 +141,8 @@ class UsuariesController < ApplicationController
private
# Traer todas las invitaciones que al menos tengan usuarie y dominio
#
# @return [Array]
def invitaciones
# XXX: Podríamos usar EmailAddress pero hace chequeos más lentos
params[:invitaciones]&.tr("\r", '')&.split("\n")&.map do |m|
@ -145,7 +151,7 @@ class UsuariesController < ApplicationController
nil
end.compact.select do |m|
m.local && m.domain
end
end.map(&:address)
end
# El tipo de invitación que tenemos que enviar, si alguien mandó