about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/accounts_controller.rb6
-rw-r--r--app/controllers/settings/preferences/privacy_controller.rb9
-rw-r--r--app/controllers/settings/preferences_controller.rb1
-rw-r--r--app/lib/user_settings_decorator.rb5
-rw-r--r--app/models/user.rb4
-rw-r--r--app/views/settings/preferences/appearance/show.html.haml3
-rw-r--r--app/views/settings/preferences/other/show.html.haml22
-rw-r--r--app/views/settings/preferences/privacy/show.html.haml32
8 files changed, 58 insertions, 24 deletions
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 232a5fc71..d648e1a08 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -43,7 +43,7 @@ class AccountsController < ApplicationController
       end
 
       format.rss do
-        return forbidden if unauthorized?
+        return render xml: '', status: 404 if rss_disabled? || unauthorized?
 
         expires_in 1.minute, public: !current_account?
 
@@ -198,4 +198,8 @@ class AccountsController < ApplicationController
   def unauthorized?
     @unauthorized ||= blocked? || (@account.private? && !following?(@account))
   end
+
+  def rss_disabled?
+    current_user.setting_rss_disabled
+  end
 end
diff --git a/app/controllers/settings/preferences/privacy_controller.rb b/app/controllers/settings/preferences/privacy_controller.rb
new file mode 100644
index 000000000..f447fa598
--- /dev/null
+++ b/app/controllers/settings/preferences/privacy_controller.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class Settings::Preferences::PrivacyController < Settings::PreferencesController
+  private
+
+  def after_update_redirect_path
+    settings_preferences_privacy_path
+  end
+end
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb
index ddbf89665..bbfd82869 100644
--- a/app/controllers/settings/preferences_controller.rb
+++ b/app/controllers/settings/preferences_controller.rb
@@ -77,6 +77,7 @@ class Settings::PreferencesController < Settings::BaseController
       :setting_filter_to_unknown,
       :setting_filter_from_unknown,
       :setting_unpublish_on_delete,
+      :setting_rss_disabled,
       notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag),
       interactions: %i(must_be_follower must_be_following must_be_following_dm)
     )
diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb
index 386b1dcf6..a58a17166 100644
--- a/app/lib/user_settings_decorator.rb
+++ b/app/lib/user_settings_decorator.rb
@@ -63,6 +63,7 @@ class UserSettingsDecorator
     user.settings['filter_to_unknown']   = filter_to_unknown_preference if change?('setting_filter_to_unknown')
     user.settings['filter_from_unknown'] = filter_from_unknown_preference if change?('setting_filter_from_unknown')
     user.settings['unpublish_on_delete'] = unpublish_on_delete_preference if change?('setting_unpublish_on_delete')
+    user.settings['rss_disabled']        = rss_disabled_preference if change?('setting_rss_disabled')
   end
 
   def merged_notification_emails
@@ -241,6 +242,10 @@ class UserSettingsDecorator
     boolean_cast_setting 'setting_unpublish_on_delete'
   end
 
+  def rss_disabled_preference
+    boolean_cast_setting 'setting_rss_disabled'
+  end
+
   def boolean_cast_setting(key)
     ActiveModel::Type::Boolean.new.cast(settings[key])
   end
diff --git a/app/models/user.rb b/app/models/user.rb
index 0b2d61862..07a4c9ab8 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -123,8 +123,8 @@ class User < ApplicationRecord
            :style_css_profile_errors, :style_css_webapp, :style_css_webapp_errors,
            :style_wide_media,
            :publish_in, :unpublish_in, :unpublish_delete, :boost_every, :boost_jitter,
-           :boost_random,
-           :filter_to_unknown, :filter_from_unknown, :unpublish_on_delete,
+           :boost_random, :filter_to_unknown, :filter_from_unknown, :unpublish_on_delete,
+           :rss_disabled,
            to: :settings, prefix: :setting, allow_nil: false
 
   attr_reader :invite_code, :sign_in_token_attempt
diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml
index 48031a973..87e7b91c5 100644
--- a/app/views/settings/preferences/appearance/show.html.haml
+++ b/app/views/settings/preferences/appearance/show.html.haml
@@ -17,6 +17,9 @@
   %p.hint= t 'appearance.advanced_web_interface_hint'
 
   .fields-group
+    = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true
+
+  .fields-group
     = f.input :setting_advanced_layout, as: :boolean, wrapper: :with_label, hint: false
 
   %h4= t 'appearance.animations_and_accessibility'
diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml
index a1d3d4357..b85b24a58 100644
--- a/app/views/settings/preferences/other/show.html.haml
+++ b/app/views/settings/preferences/other/show.html.haml
@@ -7,33 +7,13 @@
 = simple_form_for current_user, url: settings_preferences_other_path, html: { method: :put, id: 'edit_preferences' } do |f|
   = render 'shared/error_messages', object: current_user
 
-  .fields-group
-    = f.input :setting_noindex, as: :boolean, wrapper: :with_label
-
-  .fields-group
-    = f.input :setting_hide_network, as: :boolean, wrapper: :with_label
-
-  .fields-group
-    = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true
-
-  - unless Setting.hide_followers_count
-    .fields-group
-      = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label
-
   %h4= t 'preferences.posting_defaults'
 
-  .fields-row
-    .fields-group.fields-row__column.fields-row__column-6
-      = f.input :setting_default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false
-
-    .fields-group.fields-row__column.fields-row__column-6
-      = f.input :setting_default_language, collection: [nil] + filterable_languages.sort, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.language_detection') : human_locale(locale) }, required: false, include_blank: false, hint: false
-
   .fields-group
     = f.input :setting_default_sensitive, as: :boolean, wrapper: :with_label
 
   .fields-group
-    = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true
+    = f.input :setting_default_language, collection: [nil] + filterable_languages.sort, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.language_detection') : human_locale(locale) }, required: false, include_blank: false, hint: false
 
   .fields-group
     = f.input :setting_default_content_type, collection: ['text/plain', 'text/markdown', 'text/html'], wrapper: :with_label, include_blank: false, label_method: lambda { |item| safe_join([t("simple_form.labels.defaults.setting_default_content_type_#{item.split('/')[1]}"), content_tag(:span, t("simple_form.hints.defaults.setting_default_content_type_#{item.split('/')[1]}"), class: 'hint')]) }, required: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
diff --git a/app/views/settings/preferences/privacy/show.html.haml b/app/views/settings/preferences/privacy/show.html.haml
new file mode 100644
index 000000000..fa65c969e
--- /dev/null
+++ b/app/views/settings/preferences/privacy/show.html.haml
@@ -0,0 +1,32 @@
+- content_for :page_title do
+  = t('settings.preferences')
+
+- content_for :heading_actions do
+  = button_tag t('generic.save_changes'), class: 'button', form: 'edit_preferences'
+
+= simple_form_for current_user, url: settings_preferences_privacy_path, html: { method: :put, id: 'edit_preferences' } do |f|
+  = render 'shared/error_messages', object: current_user
+
+  %h4= t 'preferences.privacy'
+
+  .fields-group
+    = f.input :setting_default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false
+
+  .fields-group
+    = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true
+
+  .fields-group
+    = f.input :setting_noindex, as: :boolean, wrapper: :with_label
+
+  .fields-group
+    = f.input :setting_hide_network, as: :boolean, wrapper: :with_label
+
+  .fields-group
+    = f.input :setting_rss_disabled, as: :boolean, wrapper: :with_label
+
+  - unless Setting.hide_followers_count
+    .fields-group
+      = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label
+
+  .actions
+    = f.button :button, t('generic.save_changes'), type: :submit