# frozen_string_literal: true # Obtiene o actualiza el contenido de un objeto, usando las credenciales # del sitio. # # XXX: Esto usa las credenciales del sitio para volver el objeto # disponible para todo el CMS. Asumimos que el objeto devuelto es el # mismo para todo el mundo y las credenciales solo son para # autenticación. class ActivityPub class FetchJob < ApplicationJob self.priority = 50 def perform(site:, object_id:) ActivityPub::Object.transaction do object = ::ActivityPub::Object.find(object_id) return if object.blank? return if object.activity_pubs.where(aasm_state: 'removed').count.positive? response = site.social_inbox.dereferencer.get(uri: object.uri) # @todo Fallar cuando la respuesta no funcione? return unless response.ok? return if response.miss? && object.content.present? content = FastJsonparser.parse(response.body) object.update(content: content, type: ActivityPub::Object.type_from(content).name) end end end end