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

feat: al actualizar las blocklists, bloquear las instancias en los sitios que las tengan habilitadas

This commit is contained in:
f 2024-02-27 16:40:08 -03:00
parent 4bc11c7007
commit d5f48c6007
No known key found for this signature in database
2 changed files with 34 additions and 1 deletions

View file

@ -1,11 +1,20 @@
# frozen_string_literal: true # frozen_string_literal: true
class ActivityPub class ActivityPub
# Se encarga de mantener las listas de bloqueo actualizadas # Se encarga de mantener las listas de bloqueo actualizadas. Luego de
# actualizar el listado de instancias, bloquea las instancias en cada
# sitio que tenga el fediblock habilitado.
class FediblockFetchJob < ApplicationJob class FediblockFetchJob < ApplicationJob
def perform def perform
ActivityPub::Fediblock.find_each do |fediblock| ActivityPub::Fediblock.find_each do |fediblock|
fediblock.process! fediblock.process!
instances_added = fediblock.instances - fediblock.instances_was
# No hacer nada si no cambió con respecto a la versión anterior
next if instances_added.empty?
ActivityPub::FediblockUpdatedJob.perform_later(fediblock: fediblock, hostnames: instances_added)
rescue ActivityPub::Fediblock::FediblockDownloadError => e rescue ActivityPub::Fediblock::FediblockDownloadError => e
ExceptionNotifier.notify_exception(e, data: { fediblock: fediblock.title }) ExceptionNotifier.notify_exception(e, data: { fediblock: fediblock.title })
end end

View file

@ -0,0 +1,24 @@
# frozen_string_literal: true
# Se encarga de mantener sincronizadas las listas de instancias
# de los fediblocks con los sitios que las tengan activadas.
class ActivityPub
class FediblockUpdatedJob < ApplicationJob
# @param :fediblock [ActivityPub::Fediblock]
# @param :instances [Array<String>]
def perform(fediblock:, hostnames:)
instances = ActivityPub::Instance.where(hostname: instances)
# Todos los sitios con la Social Inbox habilitada
Site.where(id: DeploySocialDistributedPress.pluck(:site_id)).find_each do |site|
# Crea el estado si no existía
fediblock_state = site.fediblock_states.find_or_create_by(fediblock: fediblock)
# No hace nada con los deshabilitados
next unless fediblock_state.enabled?
ActivityPub::InstanceModerationJob.perform_later(site: site, hostnames: instances)
end
end
end
end