mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-23 04:46:21 +00:00
feat: al activar o desactivar un fediblock, vincular con todas las
instancias
This commit is contained in:
parent
15800e1096
commit
1ee41f2d5e
2 changed files with 36 additions and 7 deletions
|
@ -1,6 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
# Relación entre Fediblocks y Sites
|
# Relación entre Fediblocks y Sites.
|
||||||
|
#
|
||||||
|
# Cuando se habilita un Fediblock, tenemos que asociar todas sus
|
||||||
|
# instancias con el sitio y bloquearlas. Cuando se deshabilita, la
|
||||||
|
# relación ya está creada y se va actualizando.
|
||||||
|
#
|
||||||
|
# @see ActivityPub::FediblockUpdatedJob
|
||||||
class FediblockState < ApplicationRecord
|
class FediblockState < ApplicationRecord
|
||||||
include AASM
|
include AASM
|
||||||
|
|
||||||
|
@ -22,6 +28,15 @@ class FediblockState < ApplicationRecord
|
||||||
|
|
||||||
before do
|
before do
|
||||||
enable_remotely!
|
enable_remotely!
|
||||||
|
|
||||||
|
# Al actualizar el estado en masa garantizamos que las
|
||||||
|
# instancias que ya existen queden sincronizadas con el bloqueo
|
||||||
|
# en masa que acabamos de hacer.
|
||||||
|
instance_moderations.block_all!
|
||||||
|
|
||||||
|
# Luego esta tarea crea las que falten e ignora las que ya se
|
||||||
|
# bloquearon.
|
||||||
|
ActivityPub::InstanceModerationJob.perform_later(site: site, hostnames: fediblock.hostnames)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -35,18 +50,17 @@ class FediblockState < ApplicationRecord
|
||||||
|
|
||||||
before do
|
before do
|
||||||
disable_remotely!
|
disable_remotely!
|
||||||
|
|
||||||
|
instance_moderations.pause_all!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Obtiene todos los IDs de instancias para poder obtener el estado de
|
# Todas las instancias de moderación de este sitio
|
||||||
# moderación en el sitio.
|
def instance_moderations
|
||||||
#
|
site.instance_moderations.where(instance_id: fediblock.instances.pluck(:id))
|
||||||
# @return [Array<String>]
|
|
||||||
def instance_ids
|
|
||||||
ActivityPub::Instance.where(hostname: fediblock.instances).pluck(:id)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# @return [Array<String>]
|
# @return [Array<String>]
|
||||||
|
|
|
@ -7,6 +7,21 @@ class InstanceModeration < ApplicationRecord
|
||||||
belongs_to :site
|
belongs_to :site
|
||||||
belongs_to :instance, class_name: 'ActivityPub::Instance'
|
belongs_to :instance, class_name: 'ActivityPub::Instance'
|
||||||
|
|
||||||
|
# Traer todas las instancias bloqueables, según la máquina de estados,
|
||||||
|
# todas las que no estén bloqueadas ya.
|
||||||
|
scope :may_block, -> { where.not(aasm_state: 'blocked') }
|
||||||
|
scope :may_pause, -> { where.not(aasm_state: 'paused') }
|
||||||
|
|
||||||
|
# Bloquear instancias en masa
|
||||||
|
def self.block_all!
|
||||||
|
self.may_block.update_all(aasm_state: 'blocked', updated_at: Time.now)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Pausar instancias en masa
|
||||||
|
def self.pause_all!
|
||||||
|
self.may_pause.update_all(aasm_state: 'paused', updated_at: Time.now)
|
||||||
|
end
|
||||||
|
|
||||||
aasm do
|
aasm do
|
||||||
state :paused, initial: true
|
state :paused, initial: true
|
||||||
state :allowed
|
state :allowed
|
||||||
|
|
Loading…
Reference in a new issue