5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-07-02 13:36:09 +00:00
panel/app/controllers/usuaries_controller.rb

110 lines
2.7 KiB
Ruby
Raw Normal View History

2019-07-04 16:23:43 +00:00
# frozen_string_literal: true
# Controlador de Usuaries
class UsuariesController < ApplicationController
include Pundit
before_action :authenticate_usuarie!
# Mostrar todes les usuaries e invitades de un sitio
def index
@site = find_site
site_usuarie = SiteUsuarie.new(@site, current_usuarie)
authorize site_usuarie
@policy = policy(site_usuarie)
end
# Desasociar une usuarie de un sitio
def destroy
@site = find_site
authorize SiteUsuarie.new(@site, current_usuarie)
@usuarie = Usuarie.find(params[:id])
@usuarie.sites.delete(@site)
redirect_to site_usuaries_path
end
# Convertir une usuarie en invitade
def demote
@site = find_site
authorize SiteUsuarie.new(@site, current_usuarie)
@usuarie = Usuarie.find(params[:usuarie_id])
@usuarie.sites.delete(@site)
@site.invitades << @usuarie
redirect_to site_usuaries_path
end
# Convertir invitade en usuarie
def promote
@site = find_site
authorize SiteUsuarie.new(@site, current_usuarie)
@usuarie = Usuarie.find(params[:usuarie_id])
@usuarie.sites_as_invitade.delete(@site)
@site.usuaries << @usuarie
redirect_to site_usuaries_path
end
2019-07-05 23:55:59 +00:00
# Poder invitar
def invite
@site = find_site
site_usuarie = SiteUsuarie.new(@site, current_usuarie)
authorize site_usuarie
@policy = policy(site_usuarie)
end
# Envía las invitaciones
def send_invitations
@site = find_site
authorize SiteUsuarie.new(@site, current_usuarie)
# Enviar la invitación si es necesario y agregar al sitio
#
# TODO: Pedir consentimiento para agregar a un sitio!
invitaciones.each do |invitacion|
# Si la cuenta no existe, envía una invitación por correo
usuarie = Usuarie.invite! email: invitacion.address
# No invitar al sitio si ya estaba en la lista!
unless @site.invitade?(usuarie) || @site.usuarie?(usuarie)
@site.send(invited_as) << usuarie
end
end
redirect_to site_usuaries_path(@site)
end
private
# Traer todas las invitaciones que al menos tengan usuarie y dominio
def invitaciones
# XXX: Podríamos usar EmailAddress pero hace chequeos más lentos
i = params[:invitaciones].split("\n").map do |m|
Mail::Address.new m
rescue Mail::Field::IncompleteParseError
nil
end.compact
i.select do |m|
m.local && m.domain
end
end
# El tipo de invitación que tenemos que enviar, si alguien mandó
# cualquier cosa, usamos el privilegio menor.
def invited_as
invited_as = params[:invited_as].try(:to_sym)
invited_as = :invitades unless %i[usuaries invitades].include?(invited_as)
invited_as
end
2019-07-04 16:23:43 +00:00
end