forked from cybrespace/mastodon
Do not try to re-subscribe to unsubscribed accounts (#4653)
This commit is contained in:
parent
ea958cae7f
commit
3534e115e5
|
@ -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…
Reference in New Issue