This commit is contained in:
parent
9a3c8c5bda
commit
a6b5e64e15
11 changed files with 163 additions and 8 deletions
|
@ -146,6 +146,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
valid = !Admin::NgWord.reject?("#{@params[:spoiler_text]}\n#{@params[:text]}", uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?)
|
||||
valid = !Admin::NgWord.hashtag_reject?(@tags.size) if valid
|
||||
valid = !Admin::NgWord.mention_reject?(@mentions.count { |m| !m.silent }) if valid
|
||||
valid = !Admin::NgWord.stranger_mention_reject_with_count?(@mentions.count { |m| !m.silent }) if valid && (mention_to_local_stranger? || reference_to_local_stranger?)
|
||||
valid = !Admin::NgWord.stranger_mention_reject?("#{@params[:spoiler_text]}\n#{@params[:text]}", uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?) if valid && (mention_to_local_stranger? || reference_to_local_stranger?)
|
||||
|
||||
valid
|
||||
|
|
|
@ -34,6 +34,14 @@ class Admin::NgWord
|
|||
mention_reject?(text.gsub(Account::MENTION_RE)&.count || 0)
|
||||
end
|
||||
|
||||
def stranger_mention_reject_with_count?(mention_count)
|
||||
post_stranger_mentions_max.positive? && post_stranger_mentions_max < mention_count
|
||||
end
|
||||
|
||||
def stranger_mention_reject_with_extractor?(text)
|
||||
stranger_mention_reject_with_count?(text.gsub(Account::MENTION_RE)&.count || 0)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def include?(text, word)
|
||||
|
@ -62,6 +70,11 @@ class Admin::NgWord
|
|||
value.is_a?(Integer) && value.positive? ? value : 0
|
||||
end
|
||||
|
||||
def post_stranger_mentions_max
|
||||
value = Setting.post_stranger_mentions_max
|
||||
value.is_a?(Integer) && value.positive? ? value : 0
|
||||
end
|
||||
|
||||
def record!(type, text, keyword, options)
|
||||
return unless options[:uri] && options[:target_type]
|
||||
return if options.key?(:public) && !options.delete(:public)
|
||||
|
|
|
@ -50,6 +50,7 @@ class Form::AdminSettings
|
|||
hide_local_users_for_anonymous
|
||||
post_hash_tags_max
|
||||
post_mentions_max
|
||||
post_stranger_mentions_max
|
||||
sensitive_words
|
||||
sensitive_words_for_full
|
||||
authorized_fetch
|
||||
|
@ -71,6 +72,7 @@ class Form::AdminSettings
|
|||
backups_retention_period
|
||||
post_hash_tags_max
|
||||
post_mentions_max
|
||||
post_stranger_mentions_max
|
||||
registrations_limit
|
||||
registrations_limit_per_day
|
||||
registrations_start_hour
|
||||
|
|
|
@ -161,11 +161,16 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
|||
end
|
||||
|
||||
def valid_status?
|
||||
!Admin::NgWord.reject?("#{@status_parser.spoiler_text}\n#{@status_parser.text}", uri: @status.uri, target_type: :status) && !Admin::NgWord.hashtag_reject?(@raw_tags.size) && !Admin::NgWord.mention_reject?(@raw_mentions.size)
|
||||
valid = !Admin::NgWord.reject?("#{@status_parser.spoiler_text}\n#{@status_parser.text}", uri: @status.uri, target_type: :status)
|
||||
valid = !Admin::NgWord.hashtag_reject?(@raw_tags.size) if valid
|
||||
|
||||
valid
|
||||
end
|
||||
|
||||
def validate_status_mentions!
|
||||
raise AbortError if (mention_to_stranger? || reference_to_stranger?) && Admin::NgWord.stranger_mention_reject?("#{@status.spoiler_text}\n#{@status.text}", uri: @status.uri, target_type: :status)
|
||||
raise AbortError if Admin::NgWord.mention_reject?(@raw_mentions.size)
|
||||
raise AbortError if (mention_to_stranger? || reference_to_stranger?) && Admin::NgWord.stranger_mention_reject_with_count?(@raw_mentions.size)
|
||||
end
|
||||
|
||||
def mention_to_stranger?
|
||||
|
|
|
@ -210,10 +210,11 @@ class PostStatusService < BaseService
|
|||
def validate_status!
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.contains_ng_words') if Admin::NgWord.reject?("#{@options[:spoiler_text]}\n#{@options[:text]}")
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_hashtags') if Admin::NgWord.hashtag_reject_with_extractor?(@text)
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_mentions') if Admin::NgWord.mention_reject_with_extractor?(@text)
|
||||
end
|
||||
|
||||
def validate_status_mentions!
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_mentions') if Admin::NgWord.mention_reject_with_extractor?(@text)
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_mentions') if (mention_to_stranger? || reference_to_stranger?) && Admin::NgWord.stranger_mention_reject_with_extractor?(@text)
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.contains_ng_words') if (mention_to_stranger? || reference_to_stranger?) && Setting.stranger_mention_from_local_ng && Admin::NgWord.stranger_mention_reject?("#{@options[:spoiler_text]}\n#{@options[:text]}")
|
||||
end
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ class UpdateStatusService < BaseService
|
|||
raise Mastodon::ValidationError, I18n.t('statuses.contains_ng_words') if Admin::NgWord.reject?("#{@options[:spoiler_text]}\n#{@options[:text]}")
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_hashtags') if Admin::NgWord.hashtag_reject_with_extractor?(@options[:text] || '')
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_mentions') if Admin::NgWord.mention_reject_with_extractor?(@options[:text] || '')
|
||||
raise Mastodon::ValidationError, I18n.t('statuses.too_many_mentions') if (mention_to_stranger? || reference_to_stranger?) && Admin::NgWord.stranger_mention_reject_with_extractor?(@options[:text] || '')
|
||||
end
|
||||
|
||||
def validate_status_mentions!
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
.fields-group
|
||||
= f.input :post_hash_tags_max, wrapper: :with_label, as: :integer, label: t('admin.ng_words.post_hash_tags_max')
|
||||
|
||||
.fields-group
|
||||
= f.input :post_stranger_mentions_max, wrapper: :with_label, as: :integer, label: t('admin.ng_words.post_stranger_mentions_max')
|
||||
|
||||
.fields-group
|
||||
= f.input :post_mentions_max, wrapper: :with_label, as: :integer, label: t('admin.ng_words.post_mentions_max')
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue