forked from cybrespace/mastodon
Limit maximum visibility of local silenced users to unlisted (#9583)
Fixes #9580
This commit is contained in:
parent
e25947db4a
commit
5f387995d9
|
@ -23,13 +23,16 @@ class PostStatusService < BaseService
|
||||||
status = nil
|
status = nil
|
||||||
text = options.delete(:spoiler_text) if text.blank? && options[:spoiler_text].present?
|
text = options.delete(:spoiler_text) if text.blank? && options[:spoiler_text].present?
|
||||||
|
|
||||||
|
visibility = options[:visibility] || account.user&.setting_default_privacy
|
||||||
|
visibility = :unlisted if visibility == :public && account.silenced
|
||||||
|
|
||||||
ApplicationRecord.transaction do
|
ApplicationRecord.transaction do
|
||||||
status = account.statuses.create!(text: text,
|
status = account.statuses.create!(text: text,
|
||||||
media_attachments: media || [],
|
media_attachments: media || [],
|
||||||
thread: in_reply_to,
|
thread: in_reply_to,
|
||||||
sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]) || options[:spoiler_text].present?,
|
sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]) || options[:spoiler_text].present?,
|
||||||
spoiler_text: options[:spoiler_text] || '',
|
spoiler_text: options[:spoiler_text] || '',
|
||||||
visibility: options[:visibility] || account.user&.setting_default_privacy,
|
visibility: visibility,
|
||||||
language: language_from_option(options[:language]) || account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(text, account),
|
language: language_from_option(options[:language]) || account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(text, account),
|
||||||
application: options[:application])
|
application: options[:application])
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,6 +68,13 @@ RSpec.describe PostStatusService, type: :service do
|
||||||
expect(status.visibility).to eq "private"
|
expect(status.visibility).to eq "private"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'creates a status with limited visibility for silenced users' do
|
||||||
|
status = subject.call(Fabricate(:account, silenced: true), 'test', nil, visibility: :public)
|
||||||
|
|
||||||
|
expect(status).to be_persisted
|
||||||
|
expect(status.visibility).to eq "unlisted"
|
||||||
|
end
|
||||||
|
|
||||||
it 'creates a status for the given application' do
|
it 'creates a status for the given application' do
|
||||||
application = Fabricate(:application)
|
application = Fabricate(:application)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue