Make file attachment on MediaAttachment optional (#1865)
Create MediaAttachment but without actual file download when domain is blocked with reject_media set to true Clean up old media files when creating a new domain block with reject_media set to true Return remote_url in media attachments API if local file is not present Undo domain block action in admin UI Ability to enable reject_media from admin UI
This commit is contained in:
@ -3,12 +3,34 @@
|
||||
class BlockDomainService < BaseService
|
||||
def call(domain_block)
|
||||
if domain_block.silence?
|
||||
Account.where(domain: domain_block.domain).update_all(silenced: true)
|
||||
silence_accounts!(domain_block.domain)
|
||||
clear_media!(domain_block.domain) if domain_block.reject_media?
|
||||
else
|
||||
Account.where(domain: domain_block.domain).find_each do |account|
|
||||
account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed?
|
||||
SuspendAccountService.new.call(account)
|
||||
end
|
||||
suspend_accounts!(domain_block.domain)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def silence_accounts!(domain)
|
||||
Account.where(domain: domain).update_all(silenced: true)
|
||||
end
|
||||
|
||||
def clear_media!(domain)
|
||||
Account.where(domain: domain).find_each do |account|
|
||||
account.avatar.destroy
|
||||
account.header.destroy
|
||||
end
|
||||
|
||||
MediaAttachment.where(account: Account.where(domain: domain)).find_each do |attachment|
|
||||
attachment.file.destroy
|
||||
end
|
||||
end
|
||||
|
||||
def suspend_accounts!(domain)
|
||||
Account.where(domain: domain).where(suspended: false).find_each do |account|
|
||||
account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed?
|
||||
SuspendAccountService.new.call(account)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -179,12 +179,12 @@ class ProcessFeedService < BaseService
|
||||
end
|
||||
|
||||
def hashtags_from_xml(parent, xml)
|
||||
tags = xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select { |t| !t.blank? }
|
||||
tags = xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select(&:present?)
|
||||
ProcessHashtagsService.new.call(parent, tags)
|
||||
end
|
||||
|
||||
def media_from_xml(parent, xml)
|
||||
return if DomainBlock.find_by(domain: parent.account.domain)&.reject_media?
|
||||
do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media?
|
||||
|
||||
xml.xpath('./xmlns:link[@rel="enclosure"]', xmlns: TagManager::XMLNS).each do |link|
|
||||
next unless link['href']
|
||||
@ -192,7 +192,11 @@ class ProcessFeedService < BaseService
|
||||
media = MediaAttachment.where(status: parent, remote_url: link['href']).first_or_initialize(account: parent.account, status: parent, remote_url: link['href'])
|
||||
parsed_url = URI.parse(link['href'])
|
||||
|
||||
next if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.empty?
|
||||
next if !%w[http https].include?(parsed_url.scheme) || parsed_url.host.empty?
|
||||
|
||||
media.save
|
||||
|
||||
next if do_not_download
|
||||
|
||||
begin
|
||||
media.file_remote_url = link['href']
|
||||
|
@ -13,6 +13,7 @@ class SuspendAccountService < BaseService
|
||||
|
||||
def purge_content
|
||||
@account.statuses.reorder(nil).find_each do |status|
|
||||
# This federates out deletes to previous followers
|
||||
RemoveStatusService.new.call(status)
|
||||
end
|
||||
|
||||
@ -29,9 +30,7 @@ class SuspendAccountService < BaseService
|
||||
@account.display_name = ''
|
||||
@account.note = ''
|
||||
@account.avatar.destroy
|
||||
@account.avatar.clear
|
||||
@account.header.destroy
|
||||
@account.header.clear
|
||||
@account.save!
|
||||
end
|
||||
|
||||
|
15
app/services/unblock_domain_service.rb
Normal file
15
app/services/unblock_domain_service.rb
Normal file
@ -0,0 +1,15 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UnblockDomainService < BaseService
|
||||
def call(domain_block, retroactive)
|
||||
if retroactive
|
||||
if domain_block.silence?
|
||||
Account.where(domain: domain_block.domain).update_all(silenced: false)
|
||||
else
|
||||
Account.where(domain: domain_block.domain).update_all(suspended: false)
|
||||
end
|
||||
end
|
||||
|
||||
domain_block.destroy
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user