diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/application.rb | 6 | ||||
-rw-r--r-- | config/environments/development.rb | 2 | ||||
-rw-r--r-- | config/environments/production.rb | 2 | ||||
-rw-r--r-- | config/environments/test.rb | 4 | ||||
-rw-r--r-- | config/initializers/2_whitelist_mode.rb | 2 | ||||
-rw-r--r-- | config/initializers/doorkeeper.rb | 9 | ||||
-rw-r--r-- | config/initializers/inflections.rb | 2 | ||||
-rw-r--r-- | config/initializers/locale.rb | 1 | ||||
-rw-r--r-- | config/initializers/rack_attack.rb | 4 | ||||
-rw-r--r-- | config/initializers/sidekiq.rb | 4 | ||||
-rw-r--r-- | config/locales/en-MP.yml | 174 | ||||
-rw-r--r-- | config/locales/simple_form.en-MP.yml | 82 | ||||
-rw-r--r-- | config/navigation.rb | 11 | ||||
-rw-r--r-- | config/routes.rb | 53 | ||||
-rw-r--r-- | config/settings.yml | 2 | ||||
-rw-r--r-- | config/sidekiq.yml | 12 |
16 files changed, 344 insertions, 26 deletions
diff --git a/config/application.rb b/config/application.rb index ad6cf82d7..66f14061a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -45,6 +45,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, @@ -116,10 +117,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 cd29afac5..f11e87b11 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -105,6 +105,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..481787c00 --- /dev/null +++ b/config/locales/en-MP.yml @@ -0,0 +1,174 @@ +--- +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:" + 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. + 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>Be aware that other servers you send your roars to have their own profile systems and may not honor these options. You will need to use <em>followers-only</em> or <em>direct</em> privacy for roars you do not want displayed in other servers' public profiles.</strong> + advanced_privacy: Advanced privacy + advanced_privacy_html: These options can increase your privacy at the expense of compatability with other servers. <strong>They can potentially cause roars to not be delivered to some of your followers. Only enable them if you're fully aware of their side effects.</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/simple_form.en-MP.yml b/config/locales/simple_form.en-MP.yml new file mode 100644 index 000000000..6e992f942 --- /dev/null +++ b/config/locales/simple_form.en-MP.yml @@ -0,0 +1,82 @@ +--- +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: + irreversible: Filtered roars will disappear irreversibly, even if filter is later removed + phrase: Will be matched regardless of casing in text or content warning of a roar + private: Only allow authenticated followers to view your local profile. + require_auth: Require viewers to log in to access your profile, roars, and threads from Monsterpit. + require_dereference_html: "When enabled, Monsterpit will deliver your roars to other servers as pointers and require an authenticated request to access their (non-public) content. This allows permissions and blocks you've set to be enforced more stringently. <strong>This feature will make your roars inaccessible from Mastodon servers older than 3.2.0.</strong>" + 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><strong>Bold</strong></strong>, <u><u>Underline</u></u>, <em><em>Italic</em></em>, <code><code>Console</code></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_to_unknown: Do not show replies to unfollowed accounts on your home timeline. Takes effect for newly-pushed items. + setting_filter_from_unknown: Do not show boosts from unfollowed accounts on your home timeline. Takes effect for newly-pushed items. + 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_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_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. + 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: + bot: This is an automated account + private: Private mode + require_auth: Disallow anonymous access + require_dereference: Indirect federation 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_to_unknown: Filter replies to unfollowed accounts + setting_filter_from_unknown: Filter boosts from unfollowed accounts + setting_manual_publish: Manually publish roars + 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_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 + 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 c82dfbb6d..538e2c8d3 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? } end @@ -53,7 +57,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 48d2718c8..9a862517a 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 @@ -52,10 +55,10 @@ Rails.application.routes.draw do devise_for :users, path: 'auth', controllers: { omniauth_callbacks: 'auth/omniauth_callbacks', - sessions: 'auth/sessions', - registrations: 'auth/registrations', - passwords: 'auth/passwords', - confirmations: 'auth/confirmations', + sessions: 'auth/sessions', + registrations: 'auth/registrations', + passwords: 'auth/passwords', + confirmations: 'auth/confirmations', } get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } @@ -88,8 +91,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 @@ -113,6 +119,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] @@ -180,6 +189,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 @@ -279,12 +294,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 :account_moderation_notes, only: [:create, :destroy] resources :tags, only: [:index, :show, :update] do @@ -307,7 +316,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 @@ -320,11 +329,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 @@ -408,6 +422,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 @@ -486,6 +502,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 @@ -513,10 +532,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 c61454e9e..be9fe093a 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -79,6 +79,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..e1b99ac99 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['AMBASSADOR_DELAY'] || 10 %>m' + 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 |