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

88 lines
2.1 KiB
Ruby
Raw 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
include AASM
2024-03-04 16:49:07 +00:00
include AasmEventsConcern
IGNORED_EVENTS = []
IGNORED_STATES = []
2024-02-28 20:34:34 +00:00
belongs_to :site
2024-03-01 18:51:54 +00:00
belongs_to :remote_flag, 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
# Bloquea todes les Actores bloqueables
def self.block_all!
self.update_all(aasm_state: 'blocked', updated_at: Time.now)
end
def self.pause_all!
self.update_all(aasm_state: 'paused', updated_at: Time.now)
end
2024-02-28 20:34:34 +00:00
aasm do
state :paused, initial: true
state :allowed
state :blocked
state :reported
event :pause do
transitions from: %i[allowed blocked reported], to: :paused
2024-02-28 20:58:00 +00:00
before do
pause_remotely!
end
2024-02-28 20:34:34 +00:00
end
2024-02-28 20:58:00 +00:00
event :allow do
2024-02-28 20:34:34 +00:00
transitions from: %i[paused blocked reported], to: :allowed
2024-02-28 20:58:00 +00:00
before do
allow_remotely!
end
2024-02-28 20:34:34 +00:00
end
2024-02-28 20:58:00 +00:00
event :block do
2024-02-28 20:34:34 +00:00
transitions from: %i[paused allowed], to: :blocked
2024-02-28 20:58:00 +00:00
before do
block_remotely!
end
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-02-28 20:34:34 +00:00
transitions from: %i[blocked], to: :reported
2024-03-01 18:51:54 +00:00
before do
ActivityPub::RemoteFlagJob.perform_later(remote_flag: remote_flag)
end
2024-02-28 20:34:34 +00:00
end
end
2024-02-28 20:58:00 +00:00
def pause_remotely!
raise AASM::InvalidTransition unless
actor.mention &&
site.social_inbox.allowlist.delete(list: [actor.mention]).ok? &&
site.social_inbox.blocklist.delete(list: [actor.mention]).ok?
end
def allow_remotely!
raise AASM::InvalidTransition unless
actor.mention &&
site.social_inbox.allowlist.post(list: [actor.mention]).ok? &&
site.social_inbox.blocklist.delete(list: [actor.mention]).ok?
end
def block_remotely!
raise AASM::InvalidTransition unless
actor.mention &&
site.social_inbox.allowlist.delete(list: [actor.mention]).ok? &&
site.social_inbox.blocklist.post(list: [actor.mention]).ok?
end
2024-02-28 20:34:34 +00:00
end