5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-28 20:36:22 +00:00
panel/app/models/actor_moderation.rb

71 lines
1.9 KiB
Ruby
Raw Permalink Normal View History

2024-02-28 20:34:34 +00:00
# frozen_string_literal: true
# Mantiene la relación entre Site y Actor
class ActorModeration < ApplicationRecord
IGNORED_EVENTS = %i[remove].freeze
IGNORED_STATES = %i[removed].freeze
2024-02-28 20:34:34 +00:00
include AASM
2024-02-28 20:34:34 +00:00
belongs_to :site
2024-03-06 18:47:27 +00:00
belongs_to :remote_flag, optional: true, class_name: 'ActivityPub::RemoteFlag'
2024-02-28 20:34:34 +00:00
belongs_to :actor, class_name: 'ActivityPub::Actor'
2024-03-01 18:51:54 +00:00
accepts_nested_attributes_for :remote_flag
2024-02-28 20:34:34 +00:00
aasm do
2024-03-16 22:05:12 +00:00
state :paused, initial: true
state :allowed
state :blocked
2024-02-28 20:34:34 +00:00
state :reported
state :removed
2024-02-28 20:34:34 +00:00
error_on_all_events do |e|
ExceptionNotifier.notify_exception(e, data: { site: site.name, actor: actor.uri, actor_moderation: id })
end
2024-02-28 20:34:34 +00:00
event :pause do
2024-03-16 22:05:12 +00:00
transitions from: %i[allowed blocked reported], to: :paused, after: :synchronize!
2024-02-28 20:34:34 +00:00
end
# Al permitir una cuenta no se permiten todos los comentarios
# pendientes de moderación que ya hizo.
2024-02-28 20:58:00 +00:00
event :allow do
2024-03-16 22:05:12 +00:00
transitions from: %i[paused blocked reported], to: :allowed, after: :synchronize!
2024-02-28 20:34:34 +00:00
end
# Al bloquear una cuenta no se bloquean todos los comentarios
# pendientes de moderación que hizo.
2024-02-28 20:58:00 +00:00
event :block do
2024-03-16 22:05:12 +00:00
transitions from: %i[paused allowed], to: :blocked, after: :synchronize!
2024-02-28 20:34:34 +00:00
end
2024-03-01 18:51:54 +00:00
# Al reportar, necesitamos asociar una RemoteFlag para poder
# enviarla.
event :report do
2024-03-20 20:50:39 +00:00
transitions from: %i[pause allowed blocked], to: :reported, after: :synchronize!
2024-03-01 18:51:54 +00:00
after do
ActivityPub::RemoteFlagJob.perform_later(remote_flag: remote_flag) if remote_flag.waiting?
2024-03-01 18:51:54 +00:00
end
2024-02-28 20:34:34 +00:00
end
# Si un perfil es eliminado remotamente, tenemos que dejar de
# mostrarlo y todas sus actividades.
event :remove do
transitions to: :removed
after do
site.activity_pubs.where(actor_id: actor_id).remove_all!
end
end
2024-02-28 20:34:34 +00:00
end
2024-02-28 20:58:00 +00:00
2024-03-13 14:15:31 +00:00
# Definir eventos en masa
include AasmEventsConcern
2024-03-16 22:05:12 +00:00
def synchronize!
ActivityPub::SyncListsJob.perform_later(site: site)
2024-02-28 20:58:00 +00:00
end
2024-02-28 20:34:34 +00:00
end