about summary refs log tree commit diff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/application.rb6
-rw-r--r--config/environments/development.rb2
-rw-r--r--config/environments/production.rb2
-rw-r--r--config/environments/test.rb4
-rw-r--r--config/initializers/2_whitelist_mode.rb2
-rw-r--r--config/initializers/doorkeeper.rb9
-rw-r--r--config/initializers/inflections.rb2
-rw-r--r--config/initializers/locale.rb1
-rw-r--r--config/initializers/rack_attack.rb4
-rw-r--r--config/initializers/sidekiq.rb4
-rw-r--r--config/locales/en-MP.yml190
-rw-r--r--config/locales/en.yml2
-rw-r--r--config/locales/simple_form.en-MP.yml90
-rw-r--r--config/navigation.rb11
-rw-r--r--config/routes.rb45
-rw-r--r--config/settings.yml2
-rw-r--r--config/sidekiq.yml12
17 files changed, 366 insertions, 22 deletions
diff --git a/config/application.rb b/config/application.rb
index af7735221..1fb79a4aa 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -47,6 +47,7 @@ module Mastodon
     # All translations from config/locales/*.rb,yml are auto loaded.
     # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
     config.i18n.available_locales = [
+      :'en-MP',
       :ar,
       :ast,
       :bg,
@@ -122,10 +123,11 @@ module Mastodon
       :'zh-TW',
     ]
 
-    config.i18n.default_locale = ENV['DEFAULT_LOCALE']&.to_sym
+    config.i18n.default_locale = ENV.fetch('DEFAULT_LOCALE', 'en-MP')&.to_sym
+    config.i18n.fallbacks = [:'en-MP', :en]
 
     unless config.i18n.available_locales.include?(config.i18n.default_locale)
-      config.i18n.default_locale = :en
+      config.i18n.default_locale = :'en-MP'
     end
 
     # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 0791b82ab..a1a9bad5b 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -7,7 +7,7 @@ Rails.application.configure do
   config.cache_classes = false
 
   # Do not eager load code on boot.
-  config.eager_load = false
+  config.eager_load = true
 
   # Show full error reports.
   config.consider_all_requests_local = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index c2e8210f8..e5900a0bb 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -60,7 +60,7 @@ Rails.application.configure do
 
   # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
   # English when a translation cannot be found).
-  config.i18n.fallbacks = [:en]
+  config.i18n.fallbacks = [:'en-MP', :en]
 
   # Send deprecation notices to registered listeners.
   config.active_support.deprecation = :notify
diff --git a/config/environments/test.rb b/config/environments/test.rb
index a35cadcfa..7bdfe15e7 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -54,8 +54,8 @@ Rails.application.configure do
   # Raises error for missing translations
   # config.action_view.raise_on_missing_translations = true
 
-  config.i18n.default_locale = :en
-  config.i18n.fallbacks = true
+  config.i18n.default_locale = :'en-MP'
+  config.i18n.fallbacks = [:'en-MP', :en]
 end
 
 Paperclip::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"
diff --git a/config/initializers/2_whitelist_mode.rb b/config/initializers/2_whitelist_mode.rb
index 1cc6a8e72..3ac6d7a09 100644
--- a/config/initializers/2_whitelist_mode.rb
+++ b/config/initializers/2_whitelist_mode.rb
@@ -1,5 +1,5 @@
 # frozen_string_literal: true
 
 Rails.application.configure do
-  config.x.whitelist_mode = (ENV['LIMITED_FEDERATION_MODE'] || ENV['WHITELIST_MODE']) == 'true'
+  config.x.whitelist_mode = true
 end
diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb
index 63cff7c59..1c790e90a 100644
--- a/config/initializers/doorkeeper.rb
+++ b/config/initializers/doorkeeper.rb
@@ -76,6 +76,10 @@ Doorkeeper.configure do
                   :'write:notifications',
                   :'write:reports',
                   :'write:statuses',
+                  :'write:statuses:publish',
+                  :'write:domain_permissions',
+                  :'write:domain_permissions:account',
+                  :'write:domain_permissions:statuses',
                   :read,
                   :'read:accounts',
                   :'read:blocks',
@@ -88,11 +92,16 @@ Doorkeeper.configure do
                   :'read:notifications',
                   :'read:search',
                   :'read:statuses',
+                  :'read:domain_permissions',
+                  :'read:domain_permissions:account',
+                  :'read:domain_permissions:statuses',
                   :follow,
                   :push,
                   :'admin:read',
                   :'admin:read:accounts',
                   :'admin:read:reports',
+                  :'admin:read:domain_blocks',
+                  :'admin:read:domain_allows',
                   :'admin:write',
                   :'admin:write:accounts',
                   :'admin:write:reports',
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index ebb7541eb..4170b69ba 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -22,4 +22,6 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.acronym 'Ed25519'
 
   inflect.singular 'data', 'data'
+
+  inflect.irregular 'publish', 'publishing'
 end
diff --git a/config/initializers/locale.rb b/config/initializers/locale.rb
index fed182a71..aa271dc56 100644
--- a/config/initializers/locale.rb
+++ b/config/initializers/locale.rb
@@ -5,3 +5,4 @@ I18n.load_path += Dir[Rails.root.join('app', 'javascript', 'flavours', '*', 'nam
 I18n.load_path += Dir[Rails.root.join('app', 'javascript', 'skins', '*', '*', 'names.{rb,yml}').to_s]
 I18n.load_path += Dir[Rails.root.join('app', 'javascript', 'skins', '*', '*', 'names', '*.{rb,yml}').to_s]
 I18n.load_path += Dir[Rails.root.join('config', 'locales-glitch', '*.{rb,yml}').to_s]
+I18n.load_path += Dir[Rails.root.join('config', 'locales-monsterfork', '*.{rb,yml}').to_s]
diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb
index 6662ef40b..4904b8d57 100644
--- a/config/initializers/rack_attack.rb
+++ b/config/initializers/rack_attack.rb
@@ -109,6 +109,10 @@ class Rack::Attack
     req.session[:attempt_user_id] || req.params.dig('user', 'email').presence if req.post? && req.path == '/auth/sign_in'
   end
 
+  throttle('throttle_matrix_auth_attempts/ip', limit: 5, period: 1.minute) do |req|
+    req.remote_ip if req.path == '/_matrix-internal/identity/v1/check_credentials'
+  end
+
   self.throttled_response = lambda do |env|
     now        = Time.now.utc
     match_data = env['rack.attack.match_data']
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index f2733562f..2ed0554de 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -15,8 +15,8 @@ Sidekiq.configure_server do |config|
   end
 
   config.death_handlers << lambda do |job, _ex|
-    digest = job['lock_digest']
-    SidekiqUniqueJobs::Digests.delete_by_digest(digest) if digest
+    SidekiqUniqueJobs::Digests.delete_by_digest(job['lock_digest']) if job['lock_digest']
+    SidekiqUniqueJobs::Digests.delete_by_digest(job['unique_digest']) if job['unique_digest']
   end
 end
 
diff --git a/config/locales/en-MP.yml b/config/locales/en-MP.yml
new file mode 100644
index 000000000..5cab7771c
--- /dev/null
+++ b/config/locales/en-MP.yml
@@ -0,0 +1,190 @@
+---
+en-MP:
+  about:
+    about_hashtag_html: These are public roars tagged with <strong>#%{hashtag}</strong> from around the fediverse.
+    available_content: Connected servers
+    available_content_html: 'Users and content from these servers can be interacted with from here:'
+    browse_local_posts: Browse a live stream of public roars from Monsterpit
+    browse_public_posts: Browse a live stream of public roars on the fediverse
+    federation_hint_html: Join Monsterpit and meet creatures around the fediverse.
+    hosted_on: Monsterfork hosted on %{domain}
+    instance_actor_flash: This account is a virtual actor used to represent the server itself. It is used for federation purposes and should not be blocked unless you want to block the whole server, in which case you should use a domain block.
+    unavailable_content: Admin overrides
+    unavailable_content_description:
+      silenced: "Posts from these servers will be hidden in public timelines and no notifications will be generated from their users' interactions, unless you are following them or vise-versa.  These are typically set for curation purposes rather than "
+  accounts:
+    endorsements_hint: You can endorse creatures you follow from the web interface, and they will show up here.
+    location:
+      claimed: Claimed
+      unclaimed: Unclaimed
+    people_followed_by: Creatures whom %{name} follows
+    people_who_follow: Creatures who follow %{name}
+    pin_errors:
+      following: You must be already following the creature you want to endorse
+    posts:
+      one: Roar
+      other: Roars
+    posts_tab_heading: Blog
+    posts_with_replies: Replies
+    reblogs: Boosts
+    threads: Threads
+    mentions: Mentions
+  admin:
+    accounts:
+      search_same_email_domain: Other creatures with the same e-mail domain
+      search_same_ip: Other creatures with the same IP
+    action_logs:
+      actions:
+        update_status: "%{name} updated roar by %{target}"
+      deleted_status: "(deleted roar)"
+    custom_emojis:
+      claim: Claim
+      owner: Contributor
+      ownership_warning: "NOTE: You can only make changes to custom emoji that you upload or copy unless you are a moderator."
+      unclaim: Unclaim
+      unclaimed: (unclaimed)
+    dashboard:
+      pending_users: creatures waiting for review
+      feature_hcaptcha: hCaptcha
+      recent_users: Recent creatures
+      single_user_mode: Single creature mode
+      total_users: creatures in total
+      week_users_new: creatures this week
+    domain_allows:
+      hidden: Exclude from public server list
+    relays:
+      description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public roars between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
+      enable_hint: Once enabled, your server will subscribe to all public roars from this relay, and will begin sending this server's public toots to it.
+    settings:
+      activity_api_enabled:
+        desc_html: Counts of locally posted roars, active creatures, and new registrations in weekly buckets
+        title: Publish aggregate statistics about creature activity
+      bootstrap_timeline_accounts:
+        title: Default follows for new creatures
+      default_noindex:
+        desc_html: Affects all creatures who have not changed this setting themselves
+        title: Opt creatures out of search engine indexing by default
+      domain_allows:
+        title: Show allowed domains
+      domain_blocks:
+        users: To logged-in local creatures
+      enable_bootstrap_timeline_accounts:
+        title: Enable default follows for new creatures
+      profile_directory:
+        desc_html: Allow creatures to be discoverable
+      registrations:
+        errors:
+          captcha_fail: Captcha verification failed
+      show_staff_badge:
+        desc_html: Display staff badges on profiles
+  appearance:
+    toot_layout: Roar layout
+    custom_css: Custom CSS
+    custom_css_error: "There are problems with the above CSS that must be fixed before it can be applied:"
+    advanced_web_interface: Web interface
+  auth:
+    description:
+      prefix_invited_by_user: "@%{name} invites you to join Monsterpit!"
+      prefix_sign_up: Roar with Monsterpit!
+      suffix: On Monsterpit, you'll be able to commune with creatures across the fediverse!
+  authorize_follow:
+    already_following: You are already following this creature
+    already_requested: You have already sent a follow request to that creature
+    error: Unfortunately, there was an error looking up that creature's account
+    post_follow:
+      return: Show the creature's profile
+  domain_permissions:
+    success: Domain permissions saved!
+  existing_username_validator:
+    not_found: could not find a local creature with that username
+  exports:
+    archive_takeout:
+      hint_html: You can request an archive of your <strong>roars and media</strong>. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.
+  history:
+    '0': All
+    1: 1 week
+    2: 2 weeks
+    3: 3 weeks
+    6: 6 weeks
+    12: 12 weeks
+    18: 18 weeks
+    24: 24 weeks
+    36: 36 weeks
+    52: 52 weeks
+    104: 104 weeks
+    156: 156 weeks
+  notifications:
+    web_settings: "Web interface options"
+  notification_mailer:
+    favourite:
+      body: 'Your status was admired by %{name}:'
+      subject: "%{name} admired your roar"
+      title: New admiration
+    reblog:
+      body: 'Your roar was boosted by %{name}:'
+      subject: "%{name} boosted your roar"
+      title: New roar
+  preferences:
+    advanced_publishing: Advanced publishing options
+    filtering: Filtering options
+    publishing: Advanced publishing
+    privacy: Privacy options
+  remote_interaction:
+    favourite:
+      proceed: Proceed to admire
+      prompt: 'You want to admire this roar:'
+    reblog:
+      proceed: Proceed to boost
+      prompt: 'You want to boost this roar:'
+    reply:
+      proceed: Proceed to reply
+      prompt: 'You want to reply to this roar:'
+  scheduled_statuses:
+    over_daily_limit: You have exceeded the limit of %{limit} scheduled roars for that day
+    over_total_limit: You have exceeded the limit of %{limit} scheduled roars
+  stream_entries:
+    pinned: ''
+    reblogged: ''
+  pin_errors:
+      limit: You have already pinned the maximum number of roars
+      ownership: Someone else's roar cannot be pinned
+      private: Non-public roar cannot be pinned
+  settings:
+    monsterfork: Monsterfork
+    profiles:
+      privacy: Privacy
+      privacy_html: These options allow you to adjust how much information is visible on your public profile on Monsterpit.  <strong>Note that the "show replies" and "show unlisted" settings are only honored by servers that support Monsterfork privacy extensions.</strong>
+      compatibility: Compatability
+      compatibility_html: These options will increase the compatability of your account and roars with older Fediverse servers at the expense of your privacy. <strong>Only use them if you're fully aware of their possible side effects, which are beyond the scope of support from Monsterpit's developers!</strong>
+  timer:
+    '0': Never
+    1: 1 minute
+    2: 2 minutes
+    3: 3 minutes
+    5: 5 minutes
+    10: 10 minutes
+    15: 15 minutes
+    30: 30 minutes
+    60: 1 hour
+    120: 2 hours
+    180: 3 hours
+    360: 6 hours
+    720: 12 hours
+    1440: 1 day
+    2880: 2 days
+    4320: 3 days
+    7200: 5 days
+    10080: 1 week
+    20160: 2 weeks
+    30240: 3 weeks
+    60480: 6 weeks
+    120960: 12 weeks
+    181440: 18 weeks
+    241920: 24 weeks
+    362880: 36 weeks
+    524160: 52 weeks
+  user_mailer:
+    warning:
+      explanation:
+        silence: While your account is limited, only creatures who are already following you will see your roars on this server, and you may be excluded from various public listings. However, others may still manually follow you.
+        suspend: Your account has been suspended, and all of your roars and your uploaded media files have been irreversibly removed from this server, and servers where you had followers.
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 263ffcdc7..ee855cc98 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -51,6 +51,8 @@ en:
       other: users
     user_count_before: Home to
     what_is_mastodon: What is Mastodon?
+    registration:
+      failed_kobold: 'Your application failed our anti-spam check.  You may try registering again.  If you continue to receive this error, contact the admin at the email listed above.'
   accounts:
     choices_html: "%{name}'s choices:"
     endorsements_hint: You can endorse people you follow from the web interface, and they will show up here.
diff --git a/config/locales/simple_form.en-MP.yml b/config/locales/simple_form.en-MP.yml
new file mode 100644
index 000000000..140861102
--- /dev/null
+++ b/config/locales/simple_form.en-MP.yml
@@ -0,0 +1,90 @@
+---
+en-MP:
+  simple_form:
+    hints:
+      account_warning_preset:
+        text: You can use roar syntax, such as URLs, hashtags and mentions
+      admin_account_action:
+        include_statuses: The creature will see which roars have caused the moderation action or warning
+        send_email_notification: The creature will receive an explanation of what happened with their account
+        text_html: Optional. You can use roar syntax. You can <a href="%{path}">add warning presets</a> to save time
+      announcement:
+        text: You can use roar syntax. Please be mindful of the space the announcement will take up on the user's screen
+      defaults:
+        allow_anonymous_html: "If enabled, public and unlisted roars can be read by anyone and any software without authentication. <strong>Be aware that this will allow accounts and servers you've blocked to continue accessing and redistributing your public roars!</strong>"
+        irreversible: Filtered roars will disappear irreversibly, even if filter is later removed
+        no_verify_auth_html: "Deliver roars to participants on other servers without requiring their software to prove the authenticity of their accounts to Monsterpit.  Enabling this option makes it possible to interact with folks on servers using old versions of Mastodon (&lt; 3.2.0), but <strong>doing so can allow an attacker to trick Monsterpit into sending them your private roars</strong>."
+        phrase: Will be matched regardless of casing in text or content warning of a roar
+        private: Limit the visibility of your profile to followers and force other Fediverse servers to make your roars private, reguardless of their local visibility.
+        setting_aggregate_reblogs: Do not show new boosts for roars that have been recently boosted (only affects newly-received boosts)
+        setting_default_content_type_html: When composing roars, assume they are written in raw HTML, unless specified otherwise
+        setting_default_content_type_markdown: When composing roars, assume they are using Markdown for rich text formatting, unless specified otherwise
+        setting_default_content_type_plain: When composing roars, assume they are plain text with no special formatting, unless specified otherwise (default)
+        setting_default_content_type_html_html: "<strong>&lt;strong&gt;Bold&lt;/strong&gt;</strong>, <u>&lt;u&gt;Underline&lt;/u&gt;</u>, <em>&lt;em&gt;Italic&lt;/em&gt;</em>, <code>&lt;code&gt;Console&lt;/code&gt;</code>, ..."
+        setting_default_content_type_markdown_html: "<strong>**Bold**</strong>, <u>_Underline_</u>, <em>*Italic*</em>, <code>`Console`</code>, ..."
+        setting_default_content_type_plain_html: No formatting.
+        setting_default_content_type_console_html: <code>Plain-text console formatting.</code>
+        setting_default_content_type_bbcode_html: "<strong>[b]Bold[/b]</strong>, <u>[u]Underline[/u]</u>, <em>[i]Italic[/i]</em>, <code>[code]Console[/code]</code>, ..."
+        setting_default_language: The language of your roars can be detected automatically, but it's not always accurate
+        setting_filter_unknown: Strictly filter unfollowed authors, including those of boosts, from your home and list timelines.  Takes effect for newly-pushed items.
+        setting_home_reblogs: Allow packmates to boost unfollowed authors and Rowdy Tavern participants to your home timeline.  Note that enabling this option has the potential to place offensive or unsettling Fediverse content in your home timeline without warning!
+        setting_manual_publish: This allows you to draft, proofread, and edit your roars before publishing them.  You can publish a roar from its <strong>action menu</strong> (the three dots).
+        setting_max_history_public: How long public users and other servers may directly access roars on your public profile or ActivityPub outbox.
+        setting_max_history_private: How long followers may directly access roars from your public profile or ActivityPub outbox. Takes precedence if shorter than the public setting. 
+        setting_rss_disabled: Improves privacy by turning off your account's public RSS feed.
+        setting_show_application: The application you use to toot will be displayed in the detailed view of your roars
+        setting_style_lowercase: Forces all but case-sensitive text (input fields, computer code, keycaps, etc.) to be rendered lowercase.
+        setting_skin: Reskins the selected UI flavour
+        setting_unpublish_on_delete: When enabled, deleting a published roar will unpublish it then make it local-only. Deleting an unpublished roar will permanently destroy it.
+        setting_web_push: After changing this option, you will need to reload the Web interface tab or window if you have it open.
+        show_replies: Disable if you'd prefer your replies not be a part of your public profile.
+        show_unlisted: Disable if you'd prefer to only show unlisted roars on your profile page to visitors who are logged-in or are your followers.
+        text: This helps us determine if registrations are made in sincerity and prevents spam. It is only visible to admins.
+      user:
+        chosen_languages: When checked, only roars in selected languages will be displayed in public timelines
+    labels:
+      admin_account_action:
+        include_statuses: Include reported roars in the e-mail
+      defaults:
+        allow_anonymous: Allow anonymous access to public roars
+        bot: This is an automated account
+        no_verify_auth: Do not verify message recipients
+        private: Private mode
+        setting_crop_images: Crop images in non-expanded roars to 16x9
+        setting_default_content_type: Default format for roars
+        setting_default_language: Roar language
+        setting_default_privacy: Roar privacy
+        setting_delete_modal: Show confirmation dialog before deleting a roar
+        setting_display_media_hide_all: Hide all
+        setting_display_media_show_all: Reveal all
+        setting_expand_spoilers: Always expand roars marked with content warnings
+        setting_favourite_modal: Show confirmation dialog before admiring (applies to Glitch flavour only)
+        setting_filter_unknown: Filter unfollowed authors
+        setting_manual_publish: Manually publish roars
+        setting_max_history_public: Roar history visible to public
+        setting_max_history_private: Roar history visible to followers
+        setting_home_reblogs: Allow Rowdy Tavern content in home
+        setting_publish_in: Auto-publish
+        setting_show_application: Disclose application used to send roars
+        setting_style_css_profile: Custom CSS for profile page
+        setting_style_css_webapp: Custom CSS for web interface
+        setting_style_dashed_nest: Use dashed nest level indicators
+        setting_style_underline_a: Underline hyperlinks
+        setting_style_wide_media: Wide media attachments
+        setting_style_lowercase: Lowercase mode
+        setting_boost_every: Automatically queue and space out boosts
+        setting_boost_jitter: Add a random delay up to
+        setting_boost_random: Boost in random order
+        setting_rss_disabled: Disable RSS feed
+        setting_unpublish_delete: Delete after unpublishing
+        setting_unpublish_in: Then unpublish after
+        setting_unpublish_on_delete: Unpublish on delete
+        setting_use_pending_items: Relax mode
+        setting_web_push: Enable desktop push notifications
+        show_replies: Show replies on profile
+        show_unlisted: Show unlisted roars to anonymous visitors
+        username_confirmation: Confirm your username
+      invite_request:
+        text: "Introduce yourself and let the admins know what brings you to Monsterpit."
+      notification_emails:
+        favourite: Someone admired your roar
diff --git a/config/navigation.rb b/config/navigation.rb
index be429cfc4..cb97709d6 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -12,8 +12,11 @@ SimpleNavigation::Configuration.run do |navigation|
 
     n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_url, if: -> { current_user.functional? } do |s|
       s.item :appearance, safe_join([fa_icon('desktop fw'), t('settings.appearance')]), settings_preferences_appearance_url
+      s.item :other, safe_join([fa_icon('cog fw'), t('preferences.posting_defaults')]), settings_preferences_other_url
+      s.item :privacy, safe_join([fa_icon('lock fw'), t('preferences.privacy')]), settings_preferences_privacy_url
+      s.item :publishing, safe_join([fa_icon('pencil-square-o fw'), t('preferences.publishing')]), settings_preferences_publishing_url
       s.item :notifications, safe_join([fa_icon('bell fw'), t('settings.notifications')]), settings_preferences_notifications_url
-      s.item :other, safe_join([fa_icon('cog fw'), t('preferences.other')]), settings_preferences_other_url
+      s.item :filters, safe_join([fa_icon('filter fw'), t('preferences.filters')]), settings_preferences_filters_url, highlights_on: %r{/settings/preferences/filters}
     end
 
     n.item :flavours, safe_join([fa_icon('paint-brush fw'), t('settings.flavours')]), settings_flavours_url do |flavours|
@@ -23,7 +26,7 @@ SimpleNavigation::Configuration.run do |navigation|
     end
 
     n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url, if: -> { current_user.functional? }
-    n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? }
+    n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{^/filters}, if: -> { current_user.functional? }
 
     n.item :security, safe_join([fa_icon('lock fw'), t('settings.account')]), edit_user_registration_url do |s|
       s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases}
@@ -36,6 +39,7 @@ SimpleNavigation::Configuration.run do |navigation|
       s.item :export, safe_join([fa_icon('cloud-download fw'), t('settings.export')]), settings_export_url
     end
 
+    n.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), custom_emojis_url, highlights_on: %r{/custom_emojis}
     n.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: proc { Setting.min_invite_role == 'user' && current_user.functional? }
     n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url, if: -> { current_user.functional? }
 
@@ -45,7 +49,7 @@ SimpleNavigation::Configuration.run do |navigation|
       s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts}
       s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path
       s.item :tags, safe_join([fa_icon('hashtag fw'), t('admin.tags.title')]), admin_tags_path, highlights_on: %r{/admin/tags}
-      s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: whitelist_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.admin? }
+      s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url, highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.admin? }
       s.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? }
       s.item :ip_blocks, safe_join([fa_icon('ban fw'), t('admin.ip_blocks.title')]), admin_ip_blocks_url, highlights_on: %r{/admin/ip_blocks}, if: -> { current_user.admin? }
     end
@@ -54,7 +58,6 @@ SimpleNavigation::Configuration.run do |navigation|
       s.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url
       s.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/settings}
       s.item :announcements, safe_join([fa_icon('bullhorn fw'), t('admin.announcements.title')]), admin_announcements_path, highlights_on: %r{/admin/announcements}
-      s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
       s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? && !whitelist_mode? }, highlights_on: %r{/admin/relays}
       s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? }
       s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? }
diff --git a/config/routes.rb b/config/routes.rb
index b3eef3364..3a591adef 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -35,6 +35,9 @@ Rails.application.routes.draw do
   get 'intent', to: 'intents#show'
   get 'custom.css', to: 'custom_css#show', as: :custom_css
 
+  get '/custom/:id/profile.css', to: 'user_profile_css#show', as: :user_profile_css
+  get '/custom/:id/webapp.css', to: 'user_webapp_css#show', as: :user_webapp_css
+
   resource :instance_actor, path: 'actor', only: [:show] do
     resource :inbox, only: [:create], module: :activitypub
     resource :outbox, only: [:show], module: :activitypub
@@ -89,8 +92,11 @@ Rails.application.routes.draw do
   resource :inbox, only: [:create], module: :activitypub
 
   get '/@:username', to: 'accounts#show', as: :short_account
+  get '/@:username/threads', to: 'accounts#show', as: :short_account_threads
   get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
   get '/@:username/media', to: 'accounts#show', as: :short_account_media
+  get '/@:username/reblogs', to: 'accounts#show', as: :short_account_reblogs
+  get '/@:username/mentions', to: 'accounts#show', as: :short_account_mentions
   get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag
   get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
   get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
@@ -114,6 +120,9 @@ Rails.application.routes.draw do
       resource :appearance, only: [:show, :update], controller: :appearance
       resource :notifications, only: [:show, :update]
       resource :other, only: [:show, :update], controller: :other
+      resource :filters, only: [:show, :update], controller: :filters
+      resource :publishing, only: [:show, :update], controller: :publishing
+      resource :privacy, only: [:show, :update], controller: :privacy
     end
 
     resource :import, only: [:show, :create]
@@ -182,6 +191,12 @@ Rails.application.routes.draw do
   resources :filters, except: [:show]
   resource :relationships, only: [:show, :update]
 
+  resources :custom_emojis, only: [:index, :new, :create] do
+    collection do
+      post :batch
+    end
+  end
+
   get '/public', to: 'public_timelines#show', as: :public_timeline
   get '/media_proxy/:id/(*any)', to: 'media_proxy#show', as: :media_proxy
 
@@ -282,12 +297,6 @@ Rails.application.routes.draw do
       resource :two_factor_authentication, only: [:destroy]
     end
 
-    resources :custom_emojis, only: [:index, :new, :create] do
-      collection do
-        post :batch
-      end
-    end
-
     resources :ip_blocks, only: [:index, :new, :create] do
       collection do
         post :batch
@@ -316,7 +325,7 @@ Rails.application.routes.draw do
 
     # JSON / REST API
     namespace :v1 do
-      resources :statuses, only: [:create, :show, :destroy] do
+      resources :statuses, only: [:create, :update, :show, :destroy] do
         scope module: :statuses do
           resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
           resources :favourited_by, controller: :favourited_by_accounts, only: :index
@@ -329,11 +338,16 @@ Rails.application.routes.draw do
           resource :bookmark, only: :create
           post :unbookmark, to: 'bookmarks#destroy'
 
-          resource :mute, only: :create
+          resource :mute, only: [:create, :update]
           post :unmute, to: 'mutes#destroy'
 
           resource :pin, only: :create
           post :unpin, to: 'pins#destroy'
+
+          resource :hide, only: :create
+          post :unhide, to: 'mutes#destroy'
+
+          resource :publish, only: :create
         end
 
         member do
@@ -413,6 +427,8 @@ Rails.application.routes.draw do
       resource :domain_blocks, only: [:show, :create, :destroy]
       resource :directory, only: [:show]
 
+      resource :domain_permissions, only: [:show, :create, :update, :destroy]
+
       resources :follow_requests, only: [:index] do
         member do
           post :authorize
@@ -492,6 +508,9 @@ Rails.application.routes.draw do
           resource :action, only: [:create], controller: 'account_actions'
         end
 
+        resource :domain_blocks, only: [:show]
+        resource :domain_allows, only: [:show]
+
         resources :reports, only: [:index, :show] do
           member do
             post :assign_to_self
@@ -519,10 +538,18 @@ Rails.application.routes.draw do
     end
   end
 
+  namespace :matrix, path: '_matrix-internal' do
+    namespace :identity do
+      namespace :v1 do
+        resource :check_credentials, only: [:create]
+      end
+    end
+  end
+
   get '/web/(*any)', to: 'home#index', as: :web
 
   get '/about',        to: 'about#show'
-  get '/about/more',   to: 'about#more'
+  get '/about/more',   to: redirect('/about')
   get '/terms',        to: 'about#terms'
 
   match '/', via: [:post, :put, :patch, :delete], to: 'application#raise_not_found', format: false
diff --git a/config/settings.yml b/config/settings.yml
index 4d6a1cffc..0877fe111 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -80,6 +80,8 @@ defaults: &defaults
   show_domain_blocks_rationale: 'disabled'
   outgoing_spoilers: ''
 
+  show_domain_allows: 'disabled'
+
 development:
   <<: *defaults
 
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index 5de25de23..73f87de34 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -36,3 +36,15 @@
   pghero_scheduler:
     cron: '0 0 * * *'
     class: Scheduler::PgheroScheduler
+  ambassador_scheduler:
+    every: '<%= ENV.fetch('AMBASSADOR_DELAY', '30m') %>'
+    class: Scheduler::AmbassadorScheduler
+  database_cleanup_scheduler:
+    every: '1d'
+    class: Scheduler::DatabaseCleanupScheduler
+  status_cleanup_scheduler:
+    every: '1m'
+    class: Scheduler::StatusCleanupScheduler
+  publish_status_scheduler:
+    every: '1m'
+    class: Scheduler::PublishStatusScheduler
\ No newline at end of file