diff options
author | Jenkins <jenkins@jenkins.ninjawedding.org> | 2018-06-12 13:17:21 +0000 |
---|---|---|
committer | Jenkins <jenkins@jenkins.ninjawedding.org> | 2018-06-12 13:17:21 +0000 |
commit | 4d8d1fa129b5f8692311de211203bc18c614951f (patch) | |
tree | e9a1130c9a9e5a5b8babd2ba3153e4ed03a4581e /db/migrate/20180608213548_reject_following_blocked_users.rb | |
parent | 34f1fd2a621ca869c17009487e2f10063812fbd0 (diff) | |
parent | 6151308c47efb0e05bcb2c54aa1693f5ff04da5c (diff) |
Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
Diffstat (limited to 'db/migrate/20180608213548_reject_following_blocked_users.rb')
-rw-r--r-- | db/migrate/20180608213548_reject_following_blocked_users.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/db/migrate/20180608213548_reject_following_blocked_users.rb b/db/migrate/20180608213548_reject_following_blocked_users.rb new file mode 100644 index 000000000..302db6b68 --- /dev/null +++ b/db/migrate/20180608213548_reject_following_blocked_users.rb @@ -0,0 +1,40 @@ +class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + blocked_follows = Follow.find_by_sql(<<-SQL) + select f.* from follows f + inner join blocks b on + f.account_id = b.target_account_id and + f.target_account_id = b.account_id + SQL + + domain_blocked_follows = Follow.find_by_sql(<<-SQL) + select f.* from follows f + inner join accounts following on f.account_id = following.id + inner join account_domain_blocks b on + lower(b.domain) = lower(following.domain) and + f.target_account_id = b.account_id + SQL + + follows = (blocked_follows + domain_blocked_follows).uniq + say "Destroying #{follows.size} blocked follow relationships..." + + follows.each do |follow| + blocked_account = follow.account + followed_acccount = follow.target_account + + next follow.destroy! if blocked_account.local? + + reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_acccount)) + + ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_acccount, blocked_account.inbox_url) + + follow.destroy! + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end |