Do not try to re-subscribe to unsubscribed accounts (#4653)

This commit is contained in:
Eugen Rochko 2017-08-21 17:32:41 +02:00 committed by GitHub
parent ea958cae7f
commit 3534e115e5
4 changed files with 5 additions and 6 deletions

View File

@ -91,7 +91,7 @@ class Account < ApplicationRecord
scope :local, -> { where(domain: nil) } scope :local, -> { where(domain: nil) }
scope :without_followers, -> { where(followers_count: 0) } scope :without_followers, -> { where(followers_count: 0) }
scope :with_followers, -> { where('followers_count > 0') } scope :with_followers, -> { where('followers_count > 0') }
scope :expiring, ->(time) { where(subscription_expires_at: nil).or(where('subscription_expires_at < ?', time)).remote.with_followers } scope :expiring, ->(time) { remote.where.not(subscription_expires_at: nil).where('subscription_expires_at < ?', time) }
scope :partitioned, -> { order('row_number() over (partition by domain)') } scope :partitioned, -> { order('row_number() over (partition by domain)') }
scope :silenced, -> { where(silenced: true) } scope :silenced, -> { where(silenced: true) }
scope :suspended, -> { where(suspended: true) } scope :suspended, -> { where(suspended: true) }
@ -134,11 +134,11 @@ class Account < ApplicationRecord
end end
def keypair def keypair
OpenSSL::PKey::RSA.new(private_key || public_key) @keypair ||= OpenSSL::PKey::RSA.new(private_key || public_key)
end end
def subscription(webhook_url) def subscription(webhook_url)
OStatus2::Subscription.new(remote_url, secret: secret, lease_seconds: 30.days.seconds, webhook: webhook_url, hub: hub_url) @subscription ||= OStatus2::Subscription.new(remote_url, secret: secret, webhook: webhook_url, hub: hub_url)
end end
def save_with_optional_media! def save_with_optional_media!

View File

@ -30,7 +30,7 @@ class BlockDomainService < BaseService
def suspend_accounts! def suspend_accounts!
blocked_domain_accounts.where(suspended: false).find_each do |account| blocked_domain_accounts.where(suspended: false).find_each do |account|
account.subscription(api_subscription_url(account.id)).unsubscribe if account.subscribed? UnsubscribeService.new.call(account) if account.subscribed?
SuspendAccountService.new.call(account) SuspendAccountService.new.call(account)
end end
end end

View File

@ -2,7 +2,7 @@
class SubscribeService < BaseService class SubscribeService < BaseService
def call(account) def call(account)
return unless account.ostatus? return if account.hub_url.blank?
@account = account @account = account
@account.secret = SecureRandom.hex @account.secret = SecureRandom.hex

View File

@ -642,7 +642,6 @@ RSpec.describe Account, type: :model do
it 'returns remote accounts with followers whose subscription expiration date is past or not given' do it 'returns remote accounts with followers whose subscription expiration date is past or not given' do
local = Fabricate(:account, domain: nil) local = Fabricate(:account, domain: nil)
matches = [ matches = [
{ domain: 'remote', subscription_expires_at: nil },
{ domain: 'remote', subscription_expires_at: '2000-01-01T00:00:00Z' }, { domain: 'remote', subscription_expires_at: '2000-01-01T00:00:00Z' },
].map(&method(:Fabricate).curry(2).call(:account)) ].map(&method(:Fabricate).curry(2).call(:account))
matches.each(&local.method(:follow!)) matches.each(&local.method(:follow!))