2024-02-26 15:27:56 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# Mantiene el registro de relaciones entre sitios e instancias
|
|
|
|
class InstanceModeration < ApplicationRecord
|
|
|
|
include AASM
|
2024-03-04 17:26:41 +00:00
|
|
|
include AasmEventsConcern
|
|
|
|
|
|
|
|
IGNORED_EVENTS = []
|
|
|
|
IGNORED_STATES = []
|
2024-02-26 15:27:56 +00:00
|
|
|
|
|
|
|
belongs_to :site
|
|
|
|
belongs_to :instance, class_name: 'ActivityPub::Instance'
|
|
|
|
|
|
|
|
aasm do
|
|
|
|
state :paused, initial: true
|
|
|
|
state :allowed
|
|
|
|
state :blocked
|
|
|
|
|
2024-03-12 16:57:31 +00:00
|
|
|
# Al volver la instancia a pausa no cambiamos el estado de
|
|
|
|
# moderación de actores pre-existente.
|
2024-02-26 15:27:56 +00:00
|
|
|
event :pause do
|
2024-02-26 19:50:03 +00:00
|
|
|
transitions from: %i[allowed blocked], to: :paused
|
|
|
|
|
|
|
|
before do
|
|
|
|
pause_remotely!
|
|
|
|
end
|
2024-02-26 15:27:56 +00:00
|
|
|
end
|
|
|
|
|
2024-03-12 16:57:31 +00:00
|
|
|
# Al permitir, también permitimos todes les actores que no hayan
|
|
|
|
# tenido acciones de moderación.
|
2024-02-26 15:27:56 +00:00
|
|
|
event :allow do
|
2024-02-26 19:50:03 +00:00
|
|
|
transitions from: %i[paused blocked], to: :allowed
|
|
|
|
|
|
|
|
before do
|
|
|
|
allow_remotely!
|
2024-03-12 16:57:31 +00:00
|
|
|
|
|
|
|
site.actor_moderations.paused.where(actor_id: actor_ids).allow_all!
|
2024-02-26 19:50:03 +00:00
|
|
|
end
|
2024-02-26 15:27:56 +00:00
|
|
|
end
|
|
|
|
|
2024-03-12 16:57:31 +00:00
|
|
|
# Al bloquear, también bloqueamos a todes les actores que no hayan
|
|
|
|
# tenido acciones de moderación.
|
2024-02-26 15:27:56 +00:00
|
|
|
event :block do
|
2024-02-26 19:50:03 +00:00
|
|
|
transitions from: %i[paused allowed], to: :blocked
|
|
|
|
|
|
|
|
before do
|
|
|
|
block_remotely!
|
2024-03-12 16:57:31 +00:00
|
|
|
|
|
|
|
site.actor_moderations.paused.where(actor_id: actor_ids).block_all!
|
2024-02-26 19:50:03 +00:00
|
|
|
end
|
2024-02-26 15:27:56 +00:00
|
|
|
end
|
|
|
|
end
|
2024-02-26 19:12:56 +00:00
|
|
|
|
2024-03-12 16:57:31 +00:00
|
|
|
# @return [Array<String>]
|
|
|
|
def actor_ids
|
|
|
|
ActivityPub::Actor.where(instance_id: self.instance_id).ids
|
|
|
|
end
|
|
|
|
|
2024-02-26 19:12:56 +00:00
|
|
|
# Elimina la instancia de todas las listas
|
|
|
|
#
|
|
|
|
# @return [Boolean]
|
|
|
|
def pause_remotely!
|
2024-03-06 17:31:32 +00:00
|
|
|
raise unless
|
2024-02-26 19:50:03 +00:00
|
|
|
site.social_inbox.blocklist.delete(list: [instance.list_name]).ok? &&
|
2024-02-26 19:12:56 +00:00
|
|
|
site.social_inbox.allowlist.delete(list: [instance.list_name]).ok?
|
|
|
|
end
|
|
|
|
|
|
|
|
# Deja de permitir la instancia
|
|
|
|
#
|
|
|
|
# @return [Boolean]
|
|
|
|
def block_remotely!
|
2024-03-06 17:31:32 +00:00
|
|
|
raise unless
|
2024-02-26 19:50:03 +00:00
|
|
|
site.social_inbox.allowlist.delete(list: [instance.list_name]).ok? &&
|
2024-02-26 19:12:56 +00:00
|
|
|
site.social_inbox.blocklist.post(list: [instance.list_name]).ok?
|
|
|
|
end
|
|
|
|
|
|
|
|
# Permite la instancia
|
|
|
|
#
|
|
|
|
# @return [Boolean]
|
|
|
|
def allow_remotely!
|
2024-03-06 17:31:32 +00:00
|
|
|
raise unless
|
2024-02-26 19:50:03 +00:00
|
|
|
site.social_inbox.blocklist.delete(list: [instance.list_name]).ok? &&
|
2024-02-26 19:12:56 +00:00
|
|
|
site.social_inbox.allowlist.post(list: [instance.list_name]).ok?
|
|
|
|
end
|
2024-02-26 15:27:56 +00:00
|
|
|
end
|