mirror of
https://git.kescher.at/CatCatNya/catstodon.git
synced 2024-11-25 20:11:37 +01:00
Fix #2, add rake task for PuSH-unsubscribing from remote users who have no
local followers. Remote users' usernames SHOULD be case-sensitive
This commit is contained in:
parent
af7ae348d7
commit
323474c97e
3 changed files with 22 additions and 3 deletions
|
@ -19,12 +19,17 @@ class Api::AccountsController < ApiController
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow
|
def follow
|
||||||
@follow = current_user.account.follow!(@account)
|
if @account.local?
|
||||||
|
@follow = current_user.account.follow!(@account)
|
||||||
|
else
|
||||||
|
@follow = FollowService.new.(current_user.account, @account.acct)
|
||||||
|
end
|
||||||
|
|
||||||
render action: :show
|
render action: :show
|
||||||
end
|
end
|
||||||
|
|
||||||
def unfollow
|
def unfollow
|
||||||
@unfollow = current_user.account.unfollow!(@account)
|
@unfollow = UnfollowService.new.(current_user.account, @account)
|
||||||
render action: :show
|
render action: :show
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
class Account < ActiveRecord::Base
|
class Account < ActiveRecord::Base
|
||||||
# Local users
|
# Local users
|
||||||
has_one :user, inverse_of: :account
|
has_one :user, inverse_of: :account
|
||||||
validates :username, uniqueness: { scope: :domain, case_sensitive: false }
|
validates :username, uniqueness: { scope: :domain, case_sensitive: false }, if: 'local?'
|
||||||
|
validates :username, uniqueness: { scope: :domain, case_sensitive: true }, unless: 'local?'
|
||||||
|
|
||||||
# Avatar upload
|
# Avatar upload
|
||||||
attr_reader :avatar_remote_url
|
attr_reader :avatar_remote_url
|
||||||
|
|
13
lib/tasks/subscriptions.rake
Normal file
13
lib/tasks/subscriptions.rake
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
namespace :subscriptions do
|
||||||
|
|
||||||
|
desc "For all remote accounts that have no local followers, unsubscribe from PuSH"
|
||||||
|
task clear: :environment do
|
||||||
|
accounts = Account.where('(select count(f.id) from follows as f where f.target_account_id = accounts.id) = 0').where.not(domain: nil)
|
||||||
|
|
||||||
|
accounts.each do |a|
|
||||||
|
a.subscription(api_subscription_url(a.id)).unsubscribe
|
||||||
|
a.update!(verify_token: '', secret: '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue