1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
module ModerationHelper
include LogHelper
POLICIES = %w(silence unsilence suspend unsuspend force_unlisted mark_known mark_unknown reject_unknown manual_only auto_trust allow_public force_sensitive allow_nonsensitive reset)
EXCLUDED_DOMAINS = %w(tailma.ws monsterpit.net monsterpit.cloud monsterpit.gallery monsterpit.blog)
def janitor_account
account_id = ENV.fetch('JANITOR_USER', '').to_i
return if account_id.zero?
Account.find_by(id: account_id)
end
def account_policy(username, domain, policy, reason = nil)
return if policy.blank?
policy = policy.to_s
return false unless policy.in?(POLICIES)
username, domain = username.split('@')[1..2] if username.start_with?('@')
domain&.downcase!
acct = Account.find_by(username: username, domain: domain)
return false if acct.nil?
if policy == 'reset'
Admin::ActionLog.create(account: @account, action: 'unsuspend', target: acct)
user_friendly_action_log(@account, :unsuspend, acct, reason)
else
Admin::ActionLog.create(account: @account, action: policy, target: acct)
user_friendly_action_log(@account, policy.to_sym, acct, reason)
end
case policy
when 'mark_unknown', 'reject_unknown'
acct.mark_unknown!
when 'mark_known'
acct.mark_known!
when 'manual_only'
acct.manual_only!
when 'auto_trust'
acct.auto_trust!
when 'silence'
acct.silence!
when 'unsilence'
acct.unsilence!
when 'suspend'
SuspendAccountService.new.call(acct, include_user: true)
return true
when 'unsuspend'
acct.unsuspend!
when 'force_unlisted'
acct.force_unlisted
when 'allow_public'
acct.allow_public!
when 'force_sensitive'
acct.force_sensitive!
when 'allow_nonsensitive'
acct.allow_nonsensitive!
when 'reset'
acct.unsuspend!
acct.unsilence!
acct.allow_public!
acct.allow_nonsensitive!
acct.mark_known!
end
acct.save
return true unless reason && reason.strip.present?
AccountModerationNote.create(
account_id: @account.id,
target_account_id: acct.id,
content: reason.strip
)
true
end
def domain_exists?(domain)
begin
code = Request.new(:head, "https://#{domain}").perform(&:code)
rescue
return false
end
return false if [404, 410].include?(code)
true
end
def domain_policy(domain, policy, reason = nil, force_sensitive: false, reject_unknown: false, reject_media: false, manual_only: false, reject_reports: false)
return if policy.blank?
policy = policy.to_s
return false unless policy.in?(POLICIES)
return false unless domain.match?(/\A[\w\-]+\.[\w\-]+(?:\.[\w\-]+)*\Z/)
domain.downcase!
return false if domain.in?(EXCLUDED_DOMAINS)
policy = 'noop' if %w(force_sensitive reject_unknown).include?(policy)
force_sensitive = true if policy == 'force_sensitive'
reject_unknown = true if policy == 'reject_unknown'
manual_only = true if policy == 'manual_only'
if policy.in? %w(silence suspend force_unlisted)
domain_block = DomainBlock.find_or_create_by(domain: domain)
domain_block.severity = policy
domain_block.force_sensitive = force_sensitive
domain_block.reject_unknown = reject_unknown
domain_block.manual_only = manual_only
domain_block.reject_media = reject_media
domain_block.reject_reports = reject_reports
domain_block.reason = reason.strip if reason && reason.strip.present?
domain_block.save
Admin::ActionLog.create(account: @account, action: :create, target: domain_block)
user_friendly_action_log(@account, :create, domain_block)
else
domain_block = DomainBlock.find_by(domain: domain)
return false if domain_block.nil?
Admin::ActionLog.create(account: @account, action: :destroy, target: domain_block)
user_friendly_action_log(@account, :destroy, domain_block)
DomainUnblockWorker.perform_async(domain_block.id)
end
true
end
end
|