Files
.circleci
.github
app
chewy
controllers
helpers
javascript
lib
mailers
models
admin
concerns
form
account_batch.rb
admin_settings.rb
challenge.rb
custom_emoji_batch.rb
delete_confirmation.rb
redirect.rb
status_batch.rb
tag_batch.rb
two_factor_confirmation.rb
web
account.rb
account_alias.rb
account_conversation.rb
account_deletion_request.rb
account_domain_block.rb
account_filter.rb
account_identity_proof.rb
account_migration.rb
account_moderation_note.rb
account_note.rb
account_pin.rb
account_stat.rb
account_tag_stat.rb
account_warning.rb
account_warning_preset.rb
admin.rb
announcement.rb
announcement_filter.rb
announcement_mute.rb
announcement_reaction.rb
application_record.rb
backup.rb
block.rb
bookmark.rb
context.rb
conversation.rb
conversation_mute.rb
custom_emoji.rb
custom_emoji_category.rb
custom_emoji_filter.rb
custom_filter.rb
device.rb
domain_allow.rb
domain_block.rb
email_domain_block.rb
encrypted_message.rb
export.rb
favourite.rb
featured_tag.rb
feed.rb
follow.rb
follow_request.rb
home_feed.rb
identity.rb
import.rb
instance.rb
instance_filter.rb
invite.rb
invite_filter.rb
list.rb
list_account.rb
list_feed.rb
marker.rb
media_attachment.rb
mention.rb
message_franking.rb
mute.rb
notification.rb
one_time_key.rb
poll.rb
poll_vote.rb
preview_card.rb
public_feed.rb
relationship_filter.rb
relay.rb
remote_follow.rb
report.rb
report_filter.rb
report_note.rb
scheduled_status.rb
search.rb
session_activation.rb
setting.rb
site_upload.rb
status.rb
status_pin.rb
status_stat.rb
system_key.rb
tag.rb
tag_feed.rb
tag_filter.rb
tombstone.rb
trending_tags.rb
unavailable_domain.rb
user.rb
user_invite_request.rb
web.rb
webauthn_credential.rb
policies
presenters
serializers
services
validators
views
workers
bin
chart
config
db
dist
lib
log
nanobox
public
spec
streaming
vendor
.buildpacks
.codeclimate.yml
.dockerignore
.editorconfig
.env.nanobox
.env.production.sample
.env.test
.env.vagrant
.eslintignore
.eslintrc.js
.foreman
.gitattributes
.gitignore
.haml-lint.yml
.nanoignore
.nvmrc
.profile
.rspec
.rubocop.yml
.ruby-version
.sass-lint.yml
.slugignore
.yarnclean
AUTHORS.md
Aptfile
CHANGELOG.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Capfile
Dockerfile
Gemfile
Gemfile.lock
LICENSE
Procfile
Procfile.dev
README.md
Rakefile
SECURITY.md
Vagrantfile
app.json
babel.config.js
boxfile.yml
config.ru
crowdin.yml
docker-compose.yml
ide-helper.js
package.json
postcss.config.js
priv-config
scalingo.json
yarn.lock
hometown/app/models/form/account_batch.rb

75 lines
1.7 KiB
Ruby

# frozen_string_literal: true
class Form::AccountBatch
include ActiveModel::Model
include Authorization
include Payloadable
attr_accessor :account_ids, :action, :current_account
def save
case action
when 'unfollow'
unfollow!
when 'remove_from_followers'
remove_from_followers!
when 'block_domains'
block_domains!
when 'approve'
approve!
when 'reject'
reject!
end
end
private
def unfollow!
accounts.find_each do |target_account|
UnfollowService.new.call(current_account, target_account)
end
end
def remove_from_followers!
current_account.passive_relationships.where(account_id: account_ids).find_each do |follow|
reject_follow!(follow)
end
end
def block_domains!
AfterAccountDomainBlockWorker.push_bulk(account_domains) do |domain|
[current_account.id, domain]
end
end
def account_domains
accounts.pluck(Arel.sql('distinct domain')).compact
end
def accounts
Account.where(id: account_ids)
end
def reject_follow!(follow)
follow.destroy
return unless follow.account.activitypub?
ActivityPub::DeliveryWorker.perform_async(Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), current_account.id, follow.account.inbox_url)
end
def approve!
users = accounts.includes(:user).map(&:user)
users.each { |user| authorize(user, :approve?) }
.each(&:approve!)
end
def reject!
records = accounts.includes(:user)
records.each { |account| authorize(account.user, :reject?) }
.each { |account| DeleteAccountService.new.call(account, reserve_email: false, reserve_username: false) }
end
end