]> cat aescling's git repositories - mastodon.git/commitdiff
Limit maximum visibility of local silenced users to unlisted (#9583)
authorThibG <thib@sitedethib.com>
Mon, 24 Dec 2018 18:06:14 +0000 (19:06 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Mon, 24 Dec 2018 18:06:14 +0000 (19:06 +0100)
Fixes #9580

app/services/post_status_service.rb
spec/services/post_status_service_spec.rb

index 300eae547a0eac1b2f768448c6048ec33b855fd1..d0c4fe146eb368c78ef83421ebae48c4a511f04a 100644 (file)
@@ -23,13 +23,16 @@ class PostStatusService < BaseService
     status = nil
     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
       status = account.statuses.create!(text: text,
                                         media_attachments: media || [],
                                         thread: in_reply_to,
                                         sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]) || options[:spoiler_text].present?,
                                         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),
                                         application: options[:application])
     end
index 349ad861b9d36924e79193805878af4b0c16b150..8f35522245e1c71a91e962a1436e4e1220384c8c 100644 (file)
@@ -68,6 +68,13 @@ RSpec.describe PostStatusService, type: :service do
     expect(status.visibility).to eq "private"
   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
     application = Fabricate(:application)