Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `README.md`:
  Upstream added a link to the roadmap, but we have a completely different README.
  Kept ours.
- `app/models/media_attachment.rb`:
  Upstream upped media attachment limits.
  Updated the default according to upstream's.
- `db/migrate/20180831171112_create_bookmarks.rb`:
  Upstream changed the migration compatibility level.
  Did so too.
- `config/initializers/content_security_policy.rb`:
  Upstream refactored this file but we have a different version.
  Kept our version.
- `app/controllers/settings/preferences_controller.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file does not directly references individual settings anymore.
  Applied upstream changes.
- `app/lib/user_settings_decorator.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file got removed entirely.
  Removed it as well.
- `app/models/user.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  References to individual settings have been removed from the file.
  Removed them as well.
- `app/views/settings/preferences/appearance/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/notifications/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/other/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `config/settings.yml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  In particular, upstream removed user-specific and unused settings.
  Did the same in glitch-soc.
- `spec/controllers/application_controller_spec.rb`:
  Conflicts due to glitch-soc's theming system.
  Mostly kept our version, as upstream messed up the tests.
This commit is contained in:
Claire
2023-03-31 21:30:27 +02:00
341 changed files with 4055 additions and 2756 deletions

View File

@ -1,7 +1,9 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
require_relative '../../lib/mastodon/migration_helpers'
require_relative '../../lib/mastodon/migration_warning'
class IdsToBigints < ActiveRecord::Migration[5.1]
include Mastodon::MigrationHelpers
include Mastodon::MigrationWarning
disable_ddl_transaction!
@ -69,24 +71,12 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
]
included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
# Print out a warning that this will probably take a while.
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
say 'This migration has some sections that can be safely interrupted'
say 'and restarted later, and will tell you when those are occurring.'
say ''
say 'For more information, see https://github.com/mastodon/mastodon/pull/5088'
migration_duration_warning(<<~EXPLANATION)
This migration has some sections that can be safely interrupted
and restarted later, and will tell you when those are occurring.
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
For more information, see https://github.com/mastodon/mastodon/pull/5088
EXPLANATION
tables = included_columns.map(&:first).uniq
table_sizes = {}

View File

@ -1,4 +1,4 @@
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.1]
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.2]
def change
add_column :media_attachments, :description, :text
end

View File

@ -1,4 +1,4 @@
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.1]
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.2]
def change
create_table :email_domain_blocks do |t|
t.string :domain, null: false

View File

@ -1,4 +1,4 @@
class CreateAccountModerationNotes < ActiveRecord::Migration[5.1]
class CreateAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
create_table :account_moderation_notes do |t|
t.text :content, null: false

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.1]
class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,4 +1,4 @@
class AddUriToCustomEmojis < ActiveRecord::Migration[5.1]
class AddUriToCustomEmojis < ActiveRecord::Migration[5.2]
def change
add_column :custom_emojis, :uri, :string
add_column :custom_emojis, :image_remote_url, :string

View File

@ -1,4 +1,4 @@
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.1]
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
safety_assured { add_foreign_key :account_moderation_notes, :accounts }
end

View File

@ -1,4 +1,4 @@
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.1]
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :account_moderation_notes, :account_id, false

View File

@ -1,4 +1,4 @@
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.1]
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.2]
def change
safety_assured do
add_column :custom_emojis, :visible_in_picker, :boolean, default: true, null: false

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddReblogsToFollows < ActiveRecord::Migration[5.1]
class AddReblogsToFollows < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddMemorialToAccounts < ActiveRecord::Migration[5.1]
class AddMemorialToAccounts < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddDisabledToUsers < ActiveRecord::Migration[5.1]
class AddDisabledToUsers < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddModeratorToAccounts < ActiveRecord::Migration[5.1]
class AddModeratorToAccounts < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,4 +1,4 @@
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.1]
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,4 +1,4 @@
class CreateLists < ActiveRecord::Migration[5.1]
class CreateLists < ActiveRecord::Migration[5.2]
def change
create_table :lists do |t|
t.references :account, foreign_key: { on_delete: :cascade }

View File

@ -1,4 +1,4 @@
class CreateListAccounts < ActiveRecord::Migration[5.1]
class CreateListAccounts < ActiveRecord::Migration[5.2]
def change
create_table :list_accounts do |t|
t.belongs_to :list, foreign_key: { on_delete: :cascade }, null: false

View File

@ -1,4 +1,4 @@
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.1]
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :moved_to_account_id, :bigint, null: true, default: nil
safety_assured { add_foreign_key :accounts, :accounts, column: :moved_to_account_id, on_delete: :nullify }

View File

@ -1,4 +1,4 @@
class CreateAdminActionLogs < ActiveRecord::Migration[5.1]
class CreateAdminActionLogs < ActiveRecord::Migration[5.2]
def change
create_table :admin_action_logs do |t|
t.belongs_to :account, foreign_key: { on_delete: :cascade }

View File

@ -1,4 +1,4 @@
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.1]
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up

View File

@ -1,4 +1,4 @@
class CreateInvites < ActiveRecord::Migration[5.1]
class CreateInvites < ActiveRecord::Migration[5.2]
def change
create_table :invites do |t|
t.belongs_to :user, foreign_key: { on_delete: :cascade }

View File

@ -1,4 +1,4 @@
class AddInviteIdToUsers < ActiveRecord::Migration[5.1]
class AddInviteIdToUsers < ActiveRecord::Migration[5.2]
def change
safety_assured { add_reference :users, :invite, null: true, default: nil, foreign_key: { on_delete: :nullify }, index: false }
end

View File

@ -1,4 +1,4 @@
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.1]
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,4 +1,4 @@
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.1]
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up

View File

@ -1,4 +1,4 @@
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.1]
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.1]
class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,4 +1,4 @@
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.1]
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :lists, :account_id, false

View File

@ -1,4 +1,4 @@
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.1]
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.2]
def change
remove_index :list_accounts, name: 'index_list_accounts_on_account_id'
remove_index :list_accounts, name: 'index_list_accounts_on_list_id'

View File

@ -1,4 +1,4 @@
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.1]
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,4 +1,4 @@
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,4 +1,4 @@
class AddRememberTokenToUsers < ActiveRecord::Migration[5.1]
class AddRememberTokenToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :remember_token, :string, null: true
end

View File

@ -1,7 +1,7 @@
class CreateIdentities < ActiveRecord::Migration[5.0]
class CreateIdentities < ActiveRecord::Migration[5.2]
def change
create_table :identities do |t|
t.references :user, foreign_key: { on_delete: :cascade }
create_table :identities, id: :integer do |t|
t.references :user, type: :integer, foreign_key: { on_delete: :cascade }
t.string :provider, null: false, default: ''
t.string :uid, null: false, default: ''

View File

@ -1,4 +1,4 @@
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.1]
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :invites, :user_id, false

View File

@ -1,4 +1,4 @@
class CreateBackups < ActiveRecord::Migration[5.1]
class CreateBackups < ActiveRecord::Migration[5.2]
def change
create_table :backups do |t|
t.references :user, foreign_key: { on_delete: :nullify }

View File

@ -1,4 +1,4 @@
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.1]
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :featured_collection_url, :string
end

View File

@ -1,4 +1,4 @@
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.1]
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :notifications, :activity_id, false

View File

@ -1,4 +1,4 @@
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.1]
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.2]
def change
safety_assured { add_reference :reports, :assigned_account, null: true, default: nil, foreign_key: { on_delete: :nullify, to_table: :accounts }, index: false }
end

View File

@ -1,4 +1,4 @@
class CreateReportNotes < ActiveRecord::Migration[5.1]
class CreateReportNotes < ActiveRecord::Migration[5.2]
def change
create_table :report_notes do |t|
t.text :content, null: false

View File

@ -1,4 +1,4 @@
class AddFieldsToAccounts < ActiveRecord::Migration[5.1]
class AddFieldsToAccounts < ActiveRecord::Migration[5.2]
def change
add_column :accounts, :fields, :jsonb
end

View File

@ -1,10 +1,10 @@
# frozen_string_literal: true
class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
# These changes ware reverted by migration 20180514140000.
# These changes were reverted by migration 20180514140000.
# add_index :statuses, [:account_id, :id, :visibility], where: 'visibility IN (0, 1, 2)', algorithm: :concurrently
# add_index :statuses, [:account_id, :id], where: 'visibility = 3', algorithm: :concurrently
# remove_index :statuses, column: [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true
class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change

View File

@ -1,4 +1,8 @@
require_relative '../../lib/mastodon/migration_warning'
class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
include Mastodon::MigrationWarning
class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
has_one :user, inverse_of: :account
@ -35,22 +39,11 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
say 'This migration will irreversibly delete user accounts with duplicate'
say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
say 'task to manually deal with such accounts before running this migration.'
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
migration_duration_warning(<<~EXPLANATION)
This migration will irreversibly delete user accounts with duplicate
usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`
task to manually deal with such accounts before running this migration.
EXPLANATION
duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_ary

View File

@ -1,7 +1,7 @@
# This migration is a duplicate of 20180410220657 and may get ignored, see
# config/initializers/0_duplicate_migrations.rb
class CreateBookmarks < ActiveRecord::Migration[5.1]
class CreateBookmarks < ActiveRecord::Migration[5.2]
def change
create_table :bookmarks do |t|
t.references :account, null: false

View File

@ -1,4 +1,8 @@
require_relative '../../lib/mastodon/migration_warning'
class MigrateAccountConversations < ActiveRecord::Migration[5.2]
include Mastodon::MigrationWarning
disable_ddl_transaction!
class Mention < ApplicationRecord
@ -62,19 +66,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
end
def up
if $stdout.isatty
say ''
say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run'
say 'for a very long time. We will pause for 10 seconds to allow you to'
say 'interrupt this migration if you are not ready.'
say ''
10.downto(1) do |i|
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1
end
end
migration_duration_warning
migrated = 0
last_time = Time.zone.now

View File

@ -1,4 +1,4 @@
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.1]
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_column_null :list_accounts, :follow_id, true

View File

@ -1,4 +1,4 @@
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.1]
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.2]
def up
# Set up the media_attachments.id column to use our timestamp-based IDs.
safety_assured do

View File

@ -1,6 +1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
class AddNotifyToFollows < ActiveRecord::Migration[5.1]
class AddNotifyToFollows < ActiveRecord::Migration[5.2]
include Mastodon::MigrationHelpers
disable_ddl_transaction!

View File

@ -1,4 +1,4 @@
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.1]
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.2]
def up
# Set up the accounts.id column to use our timestamp-based IDs.
safety_assured do

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddSettingsToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :settings, :text
end
end

View File

@ -0,0 +1,84 @@
# frozen_string_literal: true
class MoveUserSettings < ActiveRecord::Migration[6.1]
class User < ApplicationRecord; end
MAPPING = {
default_privacy: 'default_privacy',
default_sensitive: 'web.default_sensitive',
default_language: 'default_language',
noindex: 'noindex',
theme: 'theme',
trends: 'web.trends',
unfollow_modal: 'web.unfollow_modal',
boost_modal: 'web.reblog_modal',
delete_modal: 'web.delete_modal',
auto_play_gif: 'web.auto_play',
display_media: 'web.display_media',
expand_spoilers: 'web.expand_content_warnings',
reduce_motion: 'web.reduce_motion',
disable_swiping: 'web.disable_swiping',
show_application: 'show_application',
system_font_ui: 'web.use_system_font',
aggregate_reblogs: 'aggregate_reblogs',
advanced_layout: 'web.advanced_layout',
use_blurhash: 'web.use_blurhash',
use_pending_items: 'web.use_pending_items',
crop_images: 'web.crop_images',
notification_emails: {
follow: 'notification_emails.follow',
reblog: 'notification_emails.reblog',
favourite: 'notification_emails.favourite',
mention: 'notification_emails.mention',
follow_request: 'notification_emails.follow_request',
report: 'notification_emails.report',
pending_account: 'notification_emails.pending_account',
trending_tag: 'notification_emails.trends',
appeal: 'notification_emails.appeal',
}.freeze,
always_send_emails: 'always_send_emails',
interactions: {
must_be_follower: 'interactions.must_be_follower',
must_be_following: 'interactions.must_be_following',
must_be_following_dm: 'interactions.must_be_following_dm',
}.freeze,
}.freeze
class LegacySetting < ApplicationRecord
self.table_name = 'settings'
def var
self[:var]&.to_sym
end
def value
YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present?
end
end
def up
User.find_each do |user|
previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var)
user_settings = {}
MAPPING.each do |legacy_key, new_key|
value = previous_settings[legacy_key]&.value
next if value.blank?
if value.is_a?(Hash)
value.each do |nested_key, nested_value|
user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
end
else
user_settings[new_key] = value
end
end
user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
end
end
def down; end
end

View File

@ -34,6 +34,7 @@ class RemoveSuspendedSilencedAccountFields < ActiveRecord::Migration[5.2]
remove_column :accounts, :suspended, :boolean, null: false, default: false
remove_column :accounts, :silenced, :boolean, null: false, default: false
end
Account.reset_column_information
end
def down

View File

@ -1,7 +1,7 @@
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.0]
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.2]
def change
safety_assured do
remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil
remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil, precision: nil
end
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2022_12_06_114142) do
ActiveRecord::Schema.define(version: 2023_02_15_074423) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -1063,6 +1063,7 @@ ActiveRecord::Schema.define(version: 2022_12_06_114142) do
t.inet "sign_up_ip"
t.boolean "skip_sign_in_token"
t.bigint "role_id"
t.text "settings"
t.index ["account_id"], name: "index_users_on_account_id"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id", where: "(created_by_application_id IS NOT NULL)"

View File

@ -1,5 +1,7 @@
# frozen_string_literal: true
Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
load seed
Chewy.strategy(:mastodon) do
Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
load seed
end
end