5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-23 00:36:21 +00:00

feat: al desactivar un fediblock, ignorar otros fediblocks

This commit is contained in:
f 2024-03-08 14:10:21 -03:00
parent fc77f8e9f4
commit 4dff318030
No known key found for this signature in database

View file

@ -27,12 +27,14 @@ class FediblockState < ApplicationRecord
transitions from: :disabled, to: :enabled transitions from: :disabled, to: :enabled
before do before do
enable_remotely! # Bloquear todos las instancias de este Fediblock
enable_remotely! list_names(fediblock.hostnames)
# Al actualizar el estado en masa garantizamos que las # Al actualizar el estado en masa garantizamos que las
# instancias que ya existen queden sincronizadas con el bloqueo # instancias que ya existen queden sincronizadas con el bloqueo
# en masa que acabamos de hacer. # en masa que acabamos de hacer.
instance_moderations.block_all! instance_ids = fediblock.instances.ids
site.instance_moderations.where(instance_id: instance_ids).block_all!
# Luego esta tarea crea las que falten e ignora las que ya se # Luego esta tarea crea las que falten e ignora las que ya se
# bloquearon. # bloquearon.
@ -41,11 +43,13 @@ class FediblockState < ApplicationRecord
# Bloquear a todes les Actores de las instancias bloqueadas para # Bloquear a todes les Actores de las instancias bloqueadas para
# indicarle a le usuarie que les tiene que desbloquear # indicarle a le usuarie que les tiene que desbloquear
# manualmente. # manualmente.
actor_ids = ActivityPub::Actor.where(instance_id: instance_ids).ids
ActorModeration.where(actor_id: actor_ids).paused.block_all! ActorModeration.where(actor_id: actor_ids).paused.block_all!
end end
end end
# Al deshabilitar, las listas pasan a modo pausa. # Al deshabilitar, las listas pasan a modo pausa, a menos que estén
# activas en otros listados.
# #
# @todo No cambiar el estado si se habían habilitado manualmente, # @todo No cambiar el estado si se habían habilitado manualmente,
# pero esto implica que tenemos que encontrar las que sí y quitarlas # pero esto implica que tenemos que encontrar las que sí y quitarlas
@ -54,12 +58,19 @@ class FediblockState < ApplicationRecord
transitions from: :enabled, to: :disabled transitions from: :enabled, to: :disabled
before do before do
disable_remotely! # Deshabilitar todas las instancias que no estén habilitadas por
# otros fediblocks
disable_remotely! list_names(unique_hostnames)
instance_moderations.pause_all! # Pausar todas las moderaciones de las instancias que no estén
# bloqueadas por otros fediblocks.
instance_ids = ActivityPub::Instance.where(hostname: unique_hostnames).ids
site.instance_moderations.where(instance_id: instance_ids).pause_all!
# Volver a pausar todes les actores de esta instancia que fueron # Volver a pausar todes les actores de esta instancia que fueron
# bloqueades. # bloqueades, a menos que hayan sido bloqueades por otro
# fediblock.
actor_ids = ActivityPub::Actor.where(instance_id: instance_ids).ids
ActorModeration.where(actor_id: actor_ids).blocked.pause_all! ActorModeration.where(actor_id: actor_ids).blocked.pause_all!
end end
end end
@ -67,37 +78,48 @@ class FediblockState < ApplicationRecord
private private
def actor_ids # Devuelve los hostnames únicos a esta instancia.
ActivityPub::Actor.where(instance_id: instance_ids).pluck(:id) #
end
def instance_ids
fediblock.instances.pluck(:id)
end
# Todas las instancias de moderación de este sitio
def instance_moderations
site.instance_moderations.where(instance_id: instance_ids)
end
# @return [Array<String>] # @return [Array<String>]
def list_names def unique_hostnames
@list_names ||= fediblock.hostnames.map do |hostname| @unique_hostnames ||=
begin
other_enabled_fediblock_ids =
site.fediblock_states.enabled.where.not(id: id).pluck(:fediblock_id)
other_enabled_hostnames =
ActivityPub::Fediblock
.where(id: other_enabled_fediblock_ids)
.pluck(:hostnames)
.flatten
.uniq
fediblock.hostnames - other_enabled_hostnames
end
end
# @param hostnames [Array<String>]
# @return [Array<String>]
def list_names(hostnames)
hostnames.map do |hostname|
"@*@#{hostname}" "@*@#{hostname}"
end end
end end
# Al deshabilitar, las instancias pasan a ser analizadas caso por caso # Al deshabilitar, las instancias pasan a ser analizadas caso por caso
def disable_remotely! #
# @param list [Array<String>]
def disable_remotely!(list)
raise unless raise unless
site.social_inbox.blocklist.delete(list: list_names).ok? && site.social_inbox.blocklist.delete(list: list).ok? &&
site.social_inbox.allowlist.delete(list: list_names).ok? site.social_inbox.allowlist.delete(list: list).ok?
end end
# Al habilitar, se bloquean todas las instancias de la lista # Al habilitar, se bloquean todas las instancias de la lista
def enable_remotely! #
# @param list [Array<String>]
def enable_remotely!(list)
raise unless raise unless
site.social_inbox.blocklist.post(list: list_names).ok? && site.social_inbox.blocklist.post(list: list).ok? &&
site.social_inbox.allowlist.delete(list: list_names).ok? site.social_inbox.allowlist.delete(list: list).ok?
end end
end end