# frozen_string_literal: true require 'distributed_press/v1/social/client' class Site # Agrega soporte para Social Distributed Press en los sitios module SocialDistributedPress extend ActiveSupport::Concern included do has_encrypted :private_key_pem has_many :activity_pubs has_many :instance_moderations has_many :actor_moderations has_many :fediblock_states has_many :instances, through: :instance_moderations has_many :remote_flags, class_name: 'ActivityPub::RemoteFlag' before_save :generate_private_key_pem!, unless: :private_key_pem? # @return [SocialInbox] def social_inbox @social_inbox ||= SocialInbox.new(site: self) end # Obtiene el hostname de la API de Sutty # # @return [String] def social_inbox_hostname Rails.application.routes.default_url_options[:host].sub('panel', 'api') end private # Genera la llave privada y la almacena # # @return [nil] def generate_private_key_pem! self.private_key_pem ||= DistributedPress::V1::Social::Client.new( public_key_url: nil, key_size: 2048 ).private_key.export end end end end