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

master
Eugen Rochko 7 years ago committed by GitHub
parent ea958cae7f
commit 3534e115e5
  1. 6
      app/models/account.rb
  2. 2
      app/services/block_domain_service.rb
  3. 2
      app/services/subscribe_service.rb
  4. 1
      spec/models/account_spec.rb

@ -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!

@ -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

@ -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

@ -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!))

Loading…
Cancel
Save