forked from asonix/mastodon
HTTP connections must be explicitly closed in many cases, and letting perform method close connections makes its callers less redundant and prevent them from forgetting to close connections.
39 lines
1 KiB
Ruby
39 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SendInteractionService < BaseService
|
|
# Send an Atom representation of an interaction to a remote Salmon endpoint
|
|
# @param [String] Entry XML
|
|
# @param [Account] source_account
|
|
# @param [Account] target_account
|
|
def call(xml, source_account, target_account)
|
|
@xml = xml
|
|
@source_account = source_account
|
|
@target_account = target_account
|
|
|
|
return if !target_account.ostatus? || block_notification?
|
|
|
|
build_request.perform do |delivery|
|
|
raise Mastodon::UnexpectedResponseError, delivery unless delivery.code > 199 && delivery.code < 300
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def build_request
|
|
request = Request.new(:post, @target_account.salmon_url, body: envelope)
|
|
request.add_headers('Content-Type' => 'application/magic-envelope+xml')
|
|
request
|
|
end
|
|
|
|
def envelope
|
|
salmon.pack(@xml, @source_account.keypair)
|
|
end
|
|
|
|
def block_notification?
|
|
DomainBlock.blocked?(@target_account.domain)
|
|
end
|
|
|
|
def salmon
|
|
@salmon ||= OStatus2::Salmon.new
|
|
end
|
|
end
|