gearheads
/
mastodon
Archived
2
0
Fork 0

Follow-up to #4582 and #5027, removing dead code (#5101)

gh/stable
Eugen Rochko 2017-09-26 01:06:27 +02:00 committed by GitHub
parent cf7fbf2c56
commit e528114c53
4 changed files with 7 additions and 63 deletions

View File

@ -39,7 +39,7 @@ class ProcessMentionsService < BaseService
if mentioned_account.local? if mentioned_account.local?
NotifyService.new.call(mentioned_account, mention) NotifyService.new.call(mentioned_account, mention)
elsif mentioned_account.ostatus? && (Rails.configuration.x.use_ostatus_privacy || !status.stream_entry.hidden?) elsif mentioned_account.ostatus? && !status.stream_entry.hidden?
NotificationWorker.perform_async(stream_entry_to_xml(status.stream_entry), status.account_id, mentioned_account.id) NotificationWorker.perform_async(stream_entry_to_xml(status.stream_entry), status.account_id, mentioned_account.id)
elsif mentioned_account.activitypub? elsif mentioned_account.activitypub?
ActivityPub::DeliveryWorker.perform_async(build_json(mention.status), mention.status.account_id, mentioned_account.inbox_url) ActivityPub::DeliveryWorker.perform_async(build_json(mention.status), mention.status.account_id, mentioned_account.inbox_url)

View File

@ -6,45 +6,27 @@ class Pubsubhubbub::DistributionWorker
sidekiq_options queue: 'push' sidekiq_options queue: 'push'
def perform(stream_entry_ids) def perform(stream_entry_ids)
stream_entries = StreamEntry.where(id: stream_entry_ids).includes(:status).reject { |e| e.status.nil? || e.status.direct_visibility? } stream_entries = StreamEntry.where(id: stream_entry_ids).includes(:status).reject { |e| e.status.nil? || e.status.hidden? }
return if stream_entries.empty? return if stream_entries.empty?
@account = stream_entries.first.account @account = stream_entries.first.account
@subscriptions = active_subscriptions.to_a @subscriptions = active_subscriptions.to_a
distribute_public!(stream_entries.reject(&:hidden?)) distribute_public!(stream_entries)
distribute_hidden!(stream_entries.select(&:hidden?)) if Rails.configuration.x.use_ostatus_privacy
end end
private private
def distribute_public!(stream_entries) def distribute_public!(stream_entries)
return if stream_entries.empty?
@payload = OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, stream_entries)) @payload = OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, stream_entries))
Pubsubhubbub::DeliveryWorker.push_bulk(@subscriptions) do |subscription| Pubsubhubbub::DeliveryWorker.push_bulk(@subscriptions) do |subscription_id|
[subscription.id, @payload] [subscription_id, @payload]
end
end
def distribute_hidden!(stream_entries)
return if stream_entries.empty?
@payload = OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, stream_entries))
@domains = @account.followers.domains
Pubsubhubbub::DeliveryWorker.push_bulk(@subscriptions.select { |s| allowed_to_receive?(s.callback_url, s.domain) }) do |subscription|
[subscription.id, @payload]
end end
end end
def active_subscriptions def active_subscriptions
Subscription.where(account: @account).active.select('id, callback_url, domain') Subscription.where(account: @account).active.pluck(:id)
end
def allowed_to_receive?(callback_url, domain)
(!domain.nil? && @domains.include?(domain)) || @domains.include?(Addressable::URI.parse(callback_url).host)
end end
end end

View File

@ -18,7 +18,6 @@ Rails.application.configure do
config.action_mailer.default_url_options = { host: web_host, protocol: https ? 'https://' : 'http://', trailing_slash: false } config.action_mailer.default_url_options = { host: web_host, protocol: https ? 'https://' : 'http://', trailing_slash: false }
config.x.streaming_api_base_url = 'ws://localhost:4000' config.x.streaming_api_base_url = 'ws://localhost:4000'
config.x.use_ostatus_privacy = false
if Rails.env.production? if Rails.env.production?
config.x.streaming_api_base_url = ENV.fetch('STREAMING_API_BASE_URL') { "ws#{https ? 's' : ''}://#{web_host}" } config.x.streaming_api_base_url = ENV.fetch('STREAMING_API_BASE_URL') { "ws#{https ? 's' : ''}://#{web_host}" }

View File

@ -18,48 +18,11 @@ describe Pubsubhubbub::DistributionWorker do
it 'delivers payload to all subscriptions' do it 'delivers payload to all subscriptions' do
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk) allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
subject.perform(status.stream_entry.id) subject.perform(status.stream_entry.id)
expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([anonymous_subscription, subscription_with_follower]) expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([anonymous_subscription.id, subscription_with_follower.id])
end
end
context 'when OStatus privacy is used' do
around do |example|
before_val = Rails.configuration.x.use_ostatus_privacy
Rails.configuration.x.use_ostatus_privacy = true
example.run
Rails.configuration.x.use_ostatus_privacy = before_val
end
describe 'with private status' do
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) }
it 'delivers payload only to subscriptions with followers' do
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
subject.perform(status.stream_entry.id)
expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([subscription_with_follower])
expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk).with([anonymous_subscription])
end
end
describe 'with direct status' do
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :direct) }
it 'does not deliver payload' do
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
subject.perform(status.stream_entry.id)
expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk)
end
end end
end end
context 'when OStatus privacy is not used' do context 'when OStatus privacy is not used' do
around do |example|
before_val = Rails.configuration.x.use_ostatus_privacy
Rails.configuration.x.use_ostatus_privacy = false
example.run
Rails.configuration.x.use_ostatus_privacy = before_val
end
describe 'with private status' do describe 'with private status' do
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) } let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) }