2016-11-28 13:36:47 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-11-28 18:14:49 +01:00
|
|
|
class Pubsubhubbub::UnsubscribeService < BaseService
|
2017-05-10 02:55:43 +02:00
|
|
|
attr_reader :account, :callback
|
2016-11-28 13:36:47 +01:00
|
|
|
|
2017-05-10 02:55:43 +02:00
|
|
|
def call(account, callback)
|
|
|
|
@account = account
|
|
|
|
@callback = Addressable::URI.parse(callback).normalize.to_s
|
2016-11-28 13:36:47 +01:00
|
|
|
|
2017-05-09 19:58:18 +02:00
|
|
|
process_unsubscribe
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def process_unsubscribe
|
|
|
|
if account.nil?
|
|
|
|
['Invalid topic URL', 422]
|
|
|
|
else
|
|
|
|
confirm_unsubscribe unless subscription.nil?
|
|
|
|
['', 202]
|
2016-11-28 13:36:47 +01:00
|
|
|
end
|
2017-05-09 19:58:18 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def confirm_unsubscribe
|
|
|
|
Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'unsubscribe')
|
|
|
|
end
|
2016-11-28 13:36:47 +01:00
|
|
|
|
2017-05-09 19:58:18 +02:00
|
|
|
def subscription
|
2017-05-10 02:55:43 +02:00
|
|
|
@_subscription ||= Subscription.find_by(account: account, callback_url: callback)
|
2016-11-28 13:36:47 +01:00
|
|
|
end
|
|
|
|
end
|