From 0dfb417fcf98bcf97643706418f0dcd278d6ccff Mon Sep 17 00:00:00 2001 From: Nicholas La Roux Date: Fri, 6 Feb 2026 18:42:40 +0000 Subject: [PATCH] Replace oj gem with Ruby stdlib json gem in app, db, lib directories --- app/controllers/activitypub/inboxes_controller.rb | 4 ++-- app/controllers/api/v1/accounts_controller.rb | 2 +- .../api/v1/donation_campaigns_controller.rb | 8 ++++---- app/controllers/api/v1/markers_controller.rb | 2 +- app/controllers/api/v1/statuses/pins_controller.rb | 4 ++-- app/helpers/json_ld_helper.rb | 4 ++-- app/helpers/react_component_helper.rb | 4 ++-- app/lib/access_token_extension.rb | 2 +- app/lib/activitypub/activity/create.rb | 2 +- app/lib/activitypub/activity/follow.rb | 2 +- app/lib/activitypub/activity/quote_request.rb | 4 ++-- app/lib/activitypub/forwarder.rb | 2 +- .../dimension/software_versions_dimension.rb | 4 ++-- app/lib/application_extension.rb | 2 +- app/lib/feed_manager.rb | 4 ++-- app/lib/link_details_extractor.rb | 4 ++-- app/lib/translation_service/deepl.rb | 6 +++--- app/lib/translation_service/libre_translate.rb | 8 ++++---- app/lib/user_settings_serializer.rb | 4 ++-- app/lib/video_metadata_extractor.rb | 4 ++-- app/lib/webfinger.rb | 4 ++-- app/lib/webhooks/payload_renderer.rb | 4 ++-- app/models/concerns/account/suspensions.rb | 2 +- app/models/custom_filter.rb | 4 ++-- app/models/relay.rb | 4 ++-- app/models/user.rb | 4 ++-- .../activitypub/fetch_remote_actor_service.rb | 2 +- .../activitypub/process_account_service.rb | 2 +- .../activitypub/process_collection_service.rb | 4 ++-- .../activitypub/synchronize_followers_service.rb | 2 +- .../after_block_domain_from_account_service.rb | 2 +- app/services/authorize_follow_service.rb | 2 +- app/services/backup_service.rb | 14 +++++++------- app/services/batched_remove_status_service.rb | 2 +- app/services/block_service.rb | 2 +- app/services/create_featured_tag_service.rb | 2 +- app/services/delete_account_service.rb | 6 +++--- app/services/fan_out_on_write_service.rb | 2 +- app/services/favourite_service.rb | 2 +- app/services/fetch_oembed_service.rb | 4 ++-- app/services/follow_service.rb | 2 +- app/services/notify_service.rb | 2 +- app/services/reject_follow_service.rb | 2 +- .../remove_domains_from_followers_service.rb | 2 +- app/services/remove_featured_tag_service.rb | 2 +- app/services/remove_from_followers_service.rb | 2 +- app/services/remove_status_service.rb | 4 ++-- app/services/report_service.rb | 2 +- app/services/revoke_collection_item_service.rb | 2 +- app/services/revoke_quote_service.rb | 2 +- app/services/software_update_check_service.rb | 4 ++-- app/services/suspend_account_service.rb | 4 ++-- app/services/unblock_service.rb | 2 +- app/services/unfavourite_service.rb | 2 +- app/services/unfollow_service.rb | 4 ++-- app/services/unsuspend_account_service.rb | 2 +- app/services/vote_service.rb | 2 +- app/services/webhook_service.rb | 2 +- app/validators/reaction_validator.rb | 2 +- app/views/shared/_web_app.html.haml | 2 +- app/views/shares/show.html.haml | 2 +- app/views/statuses/embed.html.haml | 2 +- .../activitypub/distribute_poll_update_worker.rb | 2 +- app/workers/activitypub/distribution_worker.rb | 2 +- app/workers/activitypub/feature_request_worker.rb | 2 +- .../activitypub/move_distribution_worker.rb | 2 +- app/workers/activitypub/quote_request_worker.rb | 2 +- .../activitypub/update_distribution_worker.rb | 2 +- .../publish_announcement_reaction_worker.rb | 2 +- .../publish_scheduled_announcement_worker.rb | 2 +- app/workers/push_conversation_worker.rb | 2 +- app/workers/push_update_worker.rb | 2 +- app/workers/scheduler/self_destruct_scheduler.rb | 2 +- app/workers/unfilter_notifications_worker.rb | 2 +- app/workers/unpublish_announcement_worker.rb | 2 +- app/workers/web/push_notification_worker.rb | 2 +- ...0180608213548_reject_following_blocked_users.rb | 2 +- db/migrate/20230215074423_move_user_settings.rb | 2 +- ...90449_migrate_interaction_settings_to_policy.rb | 2 +- ...0911163952_fill_default_quote_policy_setting.rb | 4 ++-- db/migrate/20260209143308_migrate_user_theme.rb | 4 ++-- .../20230904134623_fix_kmr_locale_settings.rb | 4 ++-- ...migrate_interaction_settings_to_policy_again.rb | 2 +- lib/mastodon/cli/domains.rb | 8 ++++---- lib/tasks/emojis.rake | 6 +++--- lib/tasks/repo.rake | 4 ++-- lib/vite_ruby/sri_extensions.rb | 2 +- 87 files changed, 133 insertions(+), 133 deletions(-) diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index cf46bf21b5e..b5926d94fda 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -26,9 +26,9 @@ class ActivityPub::InboxesController < ActivityPub::BaseController end def unknown_affected_account? - json = Oj.load(body, mode: :strict) + json = JSON.parse(body) json.is_a?(Hash) && %w(Delete Update).include?(json['type']) && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.exists?(uri: json['actor']) - rescue Oj::ParseError + rescue JSON::ParserError false end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 936cd56eb8e..6d335699ba6 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -38,7 +38,7 @@ class Api::V1::AccountsController < Api::BaseController headers.merge!(response.headers) - self.response_body = Oj.dump(response.body) + self.response_body = JSON.generate(response.body) self.status = response.status rescue ActiveRecord::RecordInvalid => e render json: ValidationErrorFormatter.new(e, 'account.username': :username, 'invite_request.text': :reason).as_json, status: 422 diff --git a/app/controllers/api/v1/donation_campaigns_controller.rb b/app/controllers/api/v1/donation_campaigns_controller.rb index cdd7503b304..040f41be75e 100644 --- a/app/controllers/api/v1/donation_campaigns_controller.rb +++ b/app/controllers/api/v1/donation_campaigns_controller.rb @@ -35,7 +35,7 @@ class Api::V1::DonationCampaignsController < Api::BaseController return if key.blank? campaign = Rails.cache.read("donation_campaign:#{key}", raw: true) - Oj.load(campaign) if campaign.present? + JSON.parse(campaign) if campaign.present? end def save_to_cache!(campaign) @@ -44,7 +44,7 @@ class Api::V1::DonationCampaignsController < Api::BaseController Rails.cache.write_multi( { request_key => campaign_key(campaign), - "donation_campaign:#{campaign_key(campaign)}" => Oj.dump(campaign), + "donation_campaign:#{campaign_key(campaign)}" => JSON.generate(campaign), }, expires_in: 1.hour, raw: true @@ -57,10 +57,10 @@ class Api::V1::DonationCampaignsController < Api::BaseController url.query_values = { platform: 'web', seed: seed, locale: locale, environment: Rails.configuration.x.donation_campaigns.environment }.compact Request.new(:get, url.to_s).perform do |res| - return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200 + return JSON.parse(res.body_with_limit) if res.code == 200 end end - rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, JSON::ParserError nil end diff --git a/app/controllers/api/v1/markers_controller.rb b/app/controllers/api/v1/markers_controller.rb index 8eaf7767df8..1fc42cab0f0 100644 --- a/app/controllers/api/v1/markers_controller.rb +++ b/app/controllers/api/v1/markers_controller.rb @@ -38,7 +38,7 @@ class Api::V1::MarkersController < Api::BaseController serialized[key] = ActiveModelSerializers::SerializableResource.new(value, serializer: REST::MarkerSerializer).as_json end - Oj.dump(serialized) + JSON.generate(serialized) end def resource_params diff --git a/app/controllers/api/v1/statuses/pins_controller.rb b/app/controllers/api/v1/statuses/pins_controller.rb index 32a5f71293d..ea63ddecdc0 100644 --- a/app/controllers/api/v1/statuses/pins_controller.rb +++ b/app/controllers/api/v1/statuses/pins_controller.rb @@ -30,7 +30,7 @@ class Api::V1::Statuses::PinsController < Api::V1::Statuses::BaseController adapter: ActivityPub::Adapter ).as_json - ActivityPub::RawDistributionWorker.perform_async(Oj.dump(json), current_account.id) + ActivityPub::RawDistributionWorker.perform_async(JSON.generate(json), current_account.id) end def distribute_remove_activity! @@ -40,6 +40,6 @@ class Api::V1::Statuses::PinsController < Api::V1::Statuses::BaseController adapter: ActivityPub::Adapter ).as_json - ActivityPub::RawDistributionWorker.perform_async(Oj.dump(json), current_account.id) + ActivityPub::RawDistributionWorker.perform_async(JSON.generate(json), current_account.id) end end diff --git a/app/helpers/json_ld_helper.rb b/app/helpers/json_ld_helper.rb index 3ab00819d82..83a083469a9 100644 --- a/app/helpers/json_ld_helper.rb +++ b/app/helpers/json_ld_helper.rb @@ -309,12 +309,12 @@ module JsonLdHelper end def body_to_json(body, compare_id: nil) - json = body.is_a?(String) ? Oj.load(body, mode: :strict) : body + json = body.is_a?(String) ? JSON.parse(body) : body return if compare_id.present? && json['id'] != compare_id json - rescue Oj::ParseError + rescue JSON::ParserError nil end diff --git a/app/helpers/react_component_helper.rb b/app/helpers/react_component_helper.rb index 821a6f1e2d4..7a82741bfdd 100644 --- a/app/helpers/react_component_helper.rb +++ b/app/helpers/react_component_helper.rb @@ -2,7 +2,7 @@ module ReactComponentHelper def react_component(name, props = {}, &block) - data = { component: name.to_s.camelcase, props: Oj.dump(props) } + data = { component: name.to_s.camelcase, props: JSON.generate(props) } if block.nil? div_tag_with_data(data) else @@ -11,7 +11,7 @@ module ReactComponentHelper end def react_admin_component(name, props = {}) - data = { 'admin-component': name.to_s.camelcase, props: Oj.dump(props) } + data = { 'admin-component': name.to_s.camelcase, props: JSON.generate(props) } div_tag_with_data(data) end diff --git a/app/lib/access_token_extension.rb b/app/lib/access_token_extension.rb index 6e06f988a5e..81b044180b5 100644 --- a/app/lib/access_token_extension.rb +++ b/app/lib/access_token_extension.rb @@ -24,6 +24,6 @@ module AccessTokenExtension end def push_to_streaming_api - redis.publish("timeline:access_token:#{id}", Oj.dump(event: :kill)) if revoked? || destroyed? + redis.publish("timeline:access_token:#{id}", JSON.generate(event: :kill)) if revoked? || destroyed? end end diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 24ea62510b6..cd4e1a34219 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -440,7 +440,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def forward_for_reply return unless @status.distributable? && @json['signature'].present? && reply_to_local? - ActivityPub::RawDistributionWorker.perform_async(Oj.dump(@json), replied_to_status.account_id, [@account.preferred_inbox_url]) + ActivityPub::RawDistributionWorker.perform_async(JSON.generate(@json), replied_to_status.account_id, [@account.preferred_inbox_url]) end def increment_voters_count! diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index 97e41ab7895..164d8c38266 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -39,7 +39,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity end def reject_follow_request!(target_account) - json = Oj.dump(serialize_payload(FollowRequest.new(account: @account, target_account: target_account, uri: @json['id']), ActivityPub::RejectFollowSerializer)) + json = JSON.generate(serialize_payload(FollowRequest.new(account: @account, target_account: target_account, uri: @json['id']), ActivityPub::RejectFollowSerializer)) ActivityPub::DeliveryWorker.perform_async(json, target_account.id, @account.inbox_url) end end diff --git a/app/lib/activitypub/activity/quote_request.rb b/app/lib/activitypub/activity/quote_request.rb index 46c45cde276..274a01f10cc 100644 --- a/app/lib/activitypub/activity/quote_request.rb +++ b/app/lib/activitypub/activity/quote_request.rb @@ -31,7 +31,7 @@ class ActivityPub::Activity::QuoteRequest < ActivityPub::Activity status.quote.update!(activity_uri: @json['id']) status.quote.accept! - json = Oj.dump(serialize_payload(status.quote, ActivityPub::AcceptQuoteRequestSerializer)) + json = JSON.generate(serialize_payload(status.quote, ActivityPub::AcceptQuoteRequestSerializer)) ActivityPub::DeliveryWorker.perform_async(json, quoted_status.account_id, @account.inbox_url) # Ensure the user is notified @@ -60,7 +60,7 @@ class ActivityPub::Activity::QuoteRequest < ActivityPub::Activity account: @account, activity_uri: @json['id'] ) - json = Oj.dump(serialize_payload(quote, ActivityPub::RejectQuoteRequestSerializer)) + json = JSON.generate(serialize_payload(quote, ActivityPub::RejectQuoteRequestSerializer)) ActivityPub::DeliveryWorker.perform_async(json, quoted_status.account_id, @account.inbox_url) end diff --git a/app/lib/activitypub/forwarder.rb b/app/lib/activitypub/forwarder.rb index c5ff59fa5ae..43bbe013b33 100644 --- a/app/lib/activitypub/forwarder.rb +++ b/app/lib/activitypub/forwarder.rb @@ -20,7 +20,7 @@ class ActivityPub::Forwarder private def payload - @payload ||= Oj.dump(@json) + @payload ||= JSON.generate(@json) end def reblogged_by_account_ids diff --git a/app/lib/admin/metrics/dimension/software_versions_dimension.rb b/app/lib/admin/metrics/dimension/software_versions_dimension.rb index 032abb75250..3e815795841 100644 --- a/app/lib/admin/metrics/dimension/software_versions_dimension.rb +++ b/app/lib/admin/metrics/dimension/software_versions_dimension.rb @@ -80,7 +80,7 @@ class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dim def ffmpeg_version version_output = Terrapin::CommandLine.new(Rails.configuration.x.ffprobe_binary, '-show_program_version -v 0 -of json').run - version = Oj.load(version_output, mode: :strict, symbol_keys: true).dig(:program_version, :version) + version = JSON.parse(version_output, symbolize_names: true).dig(:program_version, :version) { key: 'ffmpeg', @@ -88,7 +88,7 @@ class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dim value: version, human_value: version, } - rescue Terrapin::CommandNotFoundError, Terrapin::ExitStatusError, Oj::ParseError + rescue Terrapin::CommandNotFoundError, Terrapin::ExitStatusError, JSON::ParserError nil end end diff --git a/app/lib/application_extension.rb b/app/lib/application_extension.rb index bc6c7561cca..89be41a684a 100644 --- a/app/lib/application_extension.rb +++ b/app/lib/application_extension.rb @@ -35,7 +35,7 @@ module ApplicationExtension def close_streaming_sessions(resource_owner = nil) # TODO: #28793 Combine into a single topic - payload = Oj.dump(event: :kill) + payload = JSON.generate(event: :kill) scope = access_tokens scope = scope.where(resource_owner_id: resource_owner.id) unless resource_owner.nil? scope.in_batches do |tokens| diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 18a58156c39..726f0a59a56 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -90,7 +90,7 @@ class FeedManager def unpush_from_home(account, status, update: false) return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) - redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update + redis.publish("timeline:#{account.id}", JSON.generate(event: :delete, payload: status.id.to_s)) unless update true end @@ -117,7 +117,7 @@ class FeedManager def unpush_from_list(list, status, update: false) return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) - redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update + redis.publish("timeline:list:#{list.id}", JSON.generate(event: :delete, payload: status.id.to_s)) unless update true end diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb index a8004f2925f..5dba1350ef0 100644 --- a/app/lib/link_details_extractor.rb +++ b/app/lib/link_details_extractor.rb @@ -101,7 +101,7 @@ class LinkDetailsExtractor end def json - @json ||= root_array(Oj.load(@data)).compact.find { |obj| SUPPORTED_TYPES.include?(obj['@type']) } || {} + @json ||= root_array(JSON.parse(@data)).compact.find { |obj| SUPPORTED_TYPES.include?(obj['@type']) } || {} end end @@ -265,7 +265,7 @@ class LinkDetailsExtractor next unless structured_data.valid? structured_data - rescue Oj::ParseError, EncodingError + rescue JSON::ParserError, EncodingError Rails.logger.debug { "Invalid JSON-LD in #{@original_url}" } next end.first diff --git a/app/lib/translation_service/deepl.rb b/app/lib/translation_service/deepl.rb index 7761dbe626d..98536fe2dec 100644 --- a/app/lib/translation_service/deepl.rb +++ b/app/lib/translation_service/deepl.rb @@ -31,7 +31,7 @@ class TranslationService::DeepL < TranslationService def fetch_languages(type) request(:get, "/v2/languages?type=#{type}") do |res| - Oj.load(res.body_with_limit).map { |language| normalize_language(language['language']) } + JSON.parse(res.body_with_limit).map { |language| normalize_language(language['language']) } end end @@ -68,7 +68,7 @@ class TranslationService::DeepL < TranslationService end def transform_response(json) - data = Oj.load(json, mode: :strict) + data = JSON.parse(json) raise UnexpectedResponseError unless data.is_a?(Hash) data['translations'].map do |translation| @@ -78,7 +78,7 @@ class TranslationService::DeepL < TranslationService provider: 'DeepL.com' ) end - rescue Oj::ParseError + rescue JSON::ParserError raise UnexpectedResponseError end end diff --git a/app/lib/translation_service/libre_translate.rb b/app/lib/translation_service/libre_translate.rb index 0df8590f870..cc730cc85e5 100644 --- a/app/lib/translation_service/libre_translate.rb +++ b/app/lib/translation_service/libre_translate.rb @@ -9,7 +9,7 @@ class TranslationService::LibreTranslate < TranslationService end def translate(texts, source_language, target_language) - body = Oj.dump(q: texts, source: source_language.presence || 'auto', target: target_language, format: 'html', api_key: @api_key) + body = JSON.generate(q: texts, source: source_language.presence || 'auto', target: target_language, format: 'html', api_key: @api_key) request(:post, '/translate', body: body) do |res| transform_response(res.body_with_limit, source_language) end @@ -17,7 +17,7 @@ class TranslationService::LibreTranslate < TranslationService def languages request(:get, '/languages') do |res| - languages = Oj.load(res.body_with_limit).to_h do |language| + languages = JSON.parse(res.body_with_limit).to_h do |language| [language['code'], language['targets'].without(language['code'])] end languages[nil] = languages.values.flatten.uniq.sort @@ -45,7 +45,7 @@ class TranslationService::LibreTranslate < TranslationService end def transform_response(json, source_language) - data = Oj.load(json, mode: :strict) + data = JSON.parse(json) raise UnexpectedResponseError unless data.is_a?(Hash) data['translatedText'].map.with_index do |text, index| @@ -55,7 +55,7 @@ class TranslationService::LibreTranslate < TranslationService provider: 'LibreTranslate' ) end - rescue Oj::ParseError + rescue JSON::ParserError raise UnexpectedResponseError end end diff --git a/app/lib/user_settings_serializer.rb b/app/lib/user_settings_serializer.rb index 10d1be04d5a..e6bf6e20145 100644 --- a/app/lib/user_settings_serializer.rb +++ b/app/lib/user_settings_serializer.rb @@ -6,7 +6,7 @@ class UserSettingsSerializer if value.blank? {} else - Oj.load(value, symbol_keys: true) + JSON.parse(value, symbolize_names: true) end end @@ -14,6 +14,6 @@ class UserSettingsSerializer end def self.dump(value) - Oj.dump(value.as_json) + JSON.generate(value.as_json) end end diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb index 33a6264b4f5..3a0f5063682 100644 --- a/app/lib/video_metadata_extractor.rb +++ b/app/lib/video_metadata_extractor.rb @@ -6,10 +6,10 @@ class VideoMetadataExtractor def initialize(path) @path = path - @metadata = Oj.load(ffmpeg_command_output, mode: :strict, symbol_keys: true) + @metadata = JSON.parse(ffmpeg_command_output, symbolize_names: true) parse_metadata - rescue Terrapin::ExitStatusError, Oj::ParseError + rescue Terrapin::ExitStatusError, JSON::ParserError @invalid = true rescue Terrapin::CommandNotFoundError raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffprobe` command. Please install ffmpeg.' # rubocop:disable I18n/RailsI18n/DecorateString -- This error is not user-facing diff --git a/app/lib/webfinger.rb b/app/lib/webfinger.rb index c39c25e994a..aa5bcbe2a7b 100644 --- a/app/lib/webfinger.rb +++ b/app/lib/webfinger.rb @@ -12,7 +12,7 @@ class Webfinger def initialize(uri, body) @uri = uri - @json = Oj.load(body, mode: :strict) + @json = JSON.parse(body) validate_response! end @@ -57,7 +57,7 @@ class Webfinger def perform Response.new(@uri, body_from_webfinger) - rescue Oj::ParseError + rescue JSON::ParserError raise Webfinger::Error, "Invalid JSON in response for #{@uri}" rescue Addressable::URI::InvalidURIError raise Webfinger::Error, "Invalid URI for #{@uri}" diff --git a/app/lib/webhooks/payload_renderer.rb b/app/lib/webhooks/payload_renderer.rb index 73ae30b5725..1be4842cbfd 100644 --- a/app/lib/webhooks/payload_renderer.rb +++ b/app/lib/webhooks/payload_renderer.rb @@ -10,7 +10,7 @@ class Webhooks::PayloadRenderer def get(path) value = @document.dig(*parse_path(path)) - string = Oj.dump(value) + string = JSON.generate(value) # We want to make sure people can use the variable inside # other strings, so it can't be wrapped in quotes. @@ -58,7 +58,7 @@ class Webhooks::PayloadRenderer /iox def initialize(json) - @document = DocumentTraverser.new(Oj.load(json)) + @document = DocumentTraverser.new(JSON.parse(json)) end def render(template) diff --git a/app/models/concerns/account/suspensions.rb b/app/models/concerns/account/suspensions.rb index 4c9ca593ad0..264527baf03 100644 --- a/app/models/concerns/account/suspensions.rb +++ b/app/models/concerns/account/suspensions.rb @@ -35,7 +35,7 @@ module Account::Suspensions # This terminates all connections for the given account with the streaming # server: - redis.publish("timeline:system:#{id}", Oj.dump(event: :kill)) if local? + redis.publish("timeline:system:#{id}", JSON.generate(event: :kill)) if local? end def unsuspend! diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 1151c7de985..0a7fc6478c3 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -115,8 +115,8 @@ class CustomFilter < ApplicationRecord @should_invalidate_cache = false Rails.cache.delete("filters:v3:#{account_id}") - redis.publish("timeline:#{account_id}", Oj.dump(event: :filters_changed)) - redis.publish("timeline:system:#{account_id}", Oj.dump(event: :filters_changed)) + redis.publish("timeline:#{account_id}", JSON.generate(event: :filters_changed)) + redis.publish("timeline:system:#{account_id}", JSON.generate(event: :filters_changed)) end private diff --git a/app/models/relay.rb b/app/models/relay.rb index 8a9524e9b37..43919ecd1af 100644 --- a/app/models/relay.rb +++ b/app/models/relay.rb @@ -31,7 +31,7 @@ class Relay < ApplicationRecord def enable! activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) - payload = Oj.dump(follow_activity(activity_id)) + payload = JSON.generate(follow_activity(activity_id)) update!(state: :pending, follow_activity_id: activity_id) reset_delivery_tracker @@ -40,7 +40,7 @@ class Relay < ApplicationRecord def disable! activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) - payload = Oj.dump(unfollow_activity(activity_id)) + payload = JSON.generate(unfollow_activity(activity_id)) update!(state: :idle, follow_activity_id: nil) reset_delivery_tracker diff --git a/app/models/user.rb b/app/models/user.rb index 88599ab75c4..eaaf098abac 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -173,7 +173,7 @@ class User < ApplicationRecord # This terminates all connections for the given account with the streaming # server: - redis.publish("timeline:system:#{account.id}", Oj.dump(event: :kill)) + redis.publish("timeline:system:#{account.id}", JSON.generate(event: :kill)) end def enable! @@ -345,7 +345,7 @@ class User < ApplicationRecord # Revoke each access token for the Streaming API, since `update_all`` # doesn't trigger ActiveRecord Callbacks: # TODO: #28793 Combine into a single topic - payload = Oj.dump(event: :kill) + payload = JSON.generate(event: :kill) redis.pipelined do |pipeline| batch.ids.each do |id| pipeline.publish("timeline:access_token:#{id}", payload) diff --git a/app/services/activitypub/fetch_remote_actor_service.rb b/app/services/activitypub/fetch_remote_actor_service.rb index 560cf424e15..1fb3f45ce58 100644 --- a/app/services/activitypub/fetch_remote_actor_service.rb +++ b/app/services/activitypub/fetch_remote_actor_service.rb @@ -19,7 +19,7 @@ class ActivityPub::FetchRemoteActorService < BaseService else body_to_json(prefetched_body, compare_id: uri) end - rescue Oj::ParseError + rescue JSON::ParserError raise Error, "Error parsing JSON-LD document #{uri}" end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index efdaa269747..75de92aae8b 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -64,7 +64,7 @@ class ActivityPub::ProcessAccountService < BaseService end @account - rescue Oj::ParseError + rescue JSON::ParserError nil end diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index cadc7d2d10e..2b5043dc664 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -6,7 +6,7 @@ class ActivityPub::ProcessCollectionService < BaseService def call(body, actor, **options) @account = actor - @json = original_json = Oj.load(body, mode: :strict) + @json = original_json = JSON.parse(body) @options = options return unless @json.is_a?(Hash) @@ -38,7 +38,7 @@ class ActivityPub::ProcessCollectionService < BaseService else process_items [@json] end - rescue Oj::ParseError + rescue JSON::ParserError nil end diff --git a/app/services/activitypub/synchronize_followers_service.rb b/app/services/activitypub/synchronize_followers_service.rb index 9e0b452929d..98488f6497b 100644 --- a/app/services/activitypub/synchronize_followers_service.rb +++ b/app/services/activitypub/synchronize_followers_service.rb @@ -62,7 +62,7 @@ class ActivityPub::SynchronizeFollowersService < BaseService end def build_undo_follow_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)) + JSON.generate(serialize_payload(follow, ActivityPub::UndoFollowSerializer)) end # Only returns true if the whole collection has been processed diff --git a/app/services/after_block_domain_from_account_service.rb b/app/services/after_block_domain_from_account_service.rb index fc5dc656810..a051a7da30d 100644 --- a/app/services/after_block_domain_from_account_service.rb +++ b/app/services/after_block_domain_from_account_service.rb @@ -54,7 +54,7 @@ class AfterBlockDomainFromAccountService < BaseService return unless follow.account.activitypub? - ActivityPub::DeliveryWorker.perform_async(Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), @account.id, follow.account.inbox_url) + ActivityPub::DeliveryWorker.perform_async(JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), @account.id, follow.account.inbox_url) end def notify_of_severed_relationships! diff --git a/app/services/authorize_follow_service.rb b/app/services/authorize_follow_service.rb index 49bef727e6a..55f647a3e48 100644 --- a/app/services/authorize_follow_service.rb +++ b/app/services/authorize_follow_service.rb @@ -22,6 +22,6 @@ class AuthorizeFollowService < BaseService end def build_json(follow_request) - Oj.dump(serialize_payload(follow_request, ActivityPub::AcceptFollowSerializer)) + JSON.generate(serialize_payload(follow_request, ActivityPub::AcceptFollowSerializer)) end end diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb index 299b5df234e..bbe655b71a4 100644 --- a/app/services/backup_service.rb +++ b/app/services/backup_service.rb @@ -23,7 +23,7 @@ class BackupService < BaseService skeleton = serialize(collection_presenter, ActivityPub::CollectionSerializer) skeleton[:@context] = full_context skeleton[:orderedItems] = ['!PLACEHOLDER!'] - skeleton = Oj.dump(skeleton) + skeleton = JSON.generate(skeleton) prepend, append = skeleton.split('"!PLACEHOLDER!"') add_comma = false @@ -44,7 +44,7 @@ class BackupService < BaseService end end - Oj.dump(item) + JSON.generate(item) end.join(',')) GC.start @@ -107,7 +107,7 @@ class BackupService < BaseService download_to_zip(zipfile, account.avatar, "avatar#{File.extname(account.avatar.path)}") if account.avatar.exists? download_to_zip(zipfile, account.header, "header#{File.extname(account.header.path)}") if account.header.exists? - json = Oj.dump(actor) + json = JSON.generate(actor) zipfile.get_output_stream('actor.json') do |io| io.write(json) @@ -118,7 +118,7 @@ class BackupService < BaseService skeleton = serialize(ActivityPub::CollectionPresenter.new(id: 'likes.json', type: :ordered, size: 0, items: []), ActivityPub::CollectionSerializer) skeleton.delete(:totalItems) skeleton[:orderedItems] = ['!PLACEHOLDER!'] - skeleton = Oj.dump(skeleton) + skeleton = JSON.generate(skeleton) prepend, append = skeleton.split('"!PLACEHOLDER!"') zipfile.get_output_stream('likes.json') do |io| @@ -131,7 +131,7 @@ class BackupService < BaseService add_comma = true io.write(statuses.map do |status| - Oj.dump(ActivityPub::TagManager.instance.uri_for(status)) + JSON.generate(ActivityPub::TagManager.instance.uri_for(status)) end.join(',')) GC.start @@ -145,7 +145,7 @@ class BackupService < BaseService skeleton = serialize(ActivityPub::CollectionPresenter.new(id: 'bookmarks.json', type: :ordered, size: 0, items: []), ActivityPub::CollectionSerializer) skeleton.delete(:totalItems) skeleton[:orderedItems] = ['!PLACEHOLDER!'] - skeleton = Oj.dump(skeleton) + skeleton = JSON.generate(skeleton) prepend, append = skeleton.split('"!PLACEHOLDER!"') zipfile.get_output_stream('bookmarks.json') do |io| @@ -157,7 +157,7 @@ class BackupService < BaseService add_comma = true io.write(statuses.map do |status| - Oj.dump(ActivityPub::TagManager.instance.uri_for(status)) + JSON.generate(ActivityPub::TagManager.instance.uri_for(status)) end.join(',')) GC.start diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 826dbcc720e..4b449d26cef 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -82,7 +82,7 @@ class BatchedRemoveStatusService < BaseService def unpush_from_public_timelines(status, pipeline) return unless status.public_visibility? && status.id > @status_id_cutoff - payload = Oj.dump(event: :delete, payload: status.id.to_s) + payload = JSON.generate(event: :delete, payload: status.id.to_s) pipeline.publish('timeline:public', payload) pipeline.publish(status.local? ? 'timeline:public:local' : 'timeline:public:remote', payload) diff --git a/app/services/block_service.rb b/app/services/block_service.rb index 98229d98c0e..0981907bb8b 100644 --- a/app/services/block_service.rb +++ b/app/services/block_service.rb @@ -26,6 +26,6 @@ class BlockService < BaseService end def build_json(block) - Oj.dump(serialize_payload(block, ActivityPub::BlockSerializer)) + JSON.generate(serialize_payload(block, ActivityPub::BlockSerializer)) end end diff --git a/app/services/create_featured_tag_service.rb b/app/services/create_featured_tag_service.rb index 298bdb5928c..3f850570fa1 100644 --- a/app/services/create_featured_tag_service.rb +++ b/app/services/create_featured_tag_service.rb @@ -26,6 +26,6 @@ class CreateFeaturedTagService < BaseService private def build_json(featured_tag) - Oj.dump(serialize_payload(featured_tag, ActivityPub::AddHashtagSerializer, signer: @account)) + JSON.generate(serialize_payload(featured_tag, ActivityPub::AddHashtagSerializer, signer: @account)) end end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 6557dda48fb..f199e3ad04a 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -114,7 +114,7 @@ class DeleteAccountService < BaseService # we have to force it to unfollow them. ActivityPub::DeliveryWorker.push_bulk(Follow.where(account: @account)) do |follow| - [Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] + [JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] end end @@ -126,7 +126,7 @@ class DeleteAccountService < BaseService # if the remote account gets un-suspended. ActivityPub::DeliveryWorker.push_bulk(Follow.where(target_account: @account)) do |follow| - [Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)), follow.account_id, @account.inbox_url] + [JSON.generate(serialize_payload(follow, ActivityPub::UndoFollowSerializer)), follow.account_id, @account.inbox_url] end end @@ -285,7 +285,7 @@ class DeleteAccountService < BaseService end def delete_actor_json - @delete_actor_json ||= Oj.dump(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account, always_sign: true)) + @delete_actor_json ||= JSON.generate(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account, always_sign: true)) end def delivery_inboxes diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 727a6a63c4b..a94d3e054ce 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -171,7 +171,7 @@ class FanOutOnWriteService < BaseService end def anonymous_payload - @anonymous_payload ||= Oj.dump( + @anonymous_payload ||= JSON.generate( event: update? ? :'status.update' : :update, payload: rendered_status ) diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb index ded50187f77..4d6fd83f36d 100644 --- a/app/services/favourite_service.rb +++ b/app/services/favourite_service.rb @@ -42,6 +42,6 @@ class FavouriteService < BaseService end def build_json(favourite) - Oj.dump(serialize_payload(favourite, ActivityPub::LikeSerializer)) + JSON.generate(serialize_payload(favourite, ActivityPub::LikeSerializer)) end end diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index c7d4f7e2927..cc71a5f92bb 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -86,14 +86,14 @@ class FetchOEmbedService end validate(parse_for_format(body)) if body.present? - rescue Oj::ParseError, Ox::ParseError + rescue JSON::ParserError, Ox::ParseError nil end def parse_for_format(body) case @format when :json - Oj.load(body, mode: :strict)&.with_indifferent_access + JSON.parse(body)&.with_indifferent_access when :xml Ox.load(body, mode: :hash_no_attrs)&.with_indifferent_access&.dig(:oembed) end diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 5ff1b63503c..93e83bf9949 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -90,7 +90,7 @@ class FollowService < BaseService end def build_json(follow_request) - Oj.dump(serialize_payload(follow_request, ActivityPub::FollowSerializer)) + JSON.generate(serialize_payload(follow_request, ActivityPub::FollowSerializer)) end def follow_options diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 2f009d5a23b..b7c05ac25e6 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -259,7 +259,7 @@ class NotifyService < BaseService end def push_to_streaming_api! - redis.publish("timeline:#{@recipient.id}:notifications", Oj.dump(event: :notification, payload: InlineRenderer.render(@notification, @recipient, :notification))) + redis.publish("timeline:#{@recipient.id}:notifications", JSON.generate(event: :notification, payload: InlineRenderer.render(@notification, @recipient, :notification))) end def subscribed_to_streaming_api? diff --git a/app/services/reject_follow_service.rb b/app/services/reject_follow_service.rb index bc0000c8c88..6d30a9fff59 100644 --- a/app/services/reject_follow_service.rb +++ b/app/services/reject_follow_service.rb @@ -17,6 +17,6 @@ class RejectFollowService < BaseService end def build_json(follow_request) - Oj.dump(serialize_payload(follow_request, ActivityPub::RejectFollowSerializer)) + JSON.generate(serialize_payload(follow_request, ActivityPub::RejectFollowSerializer)) end end diff --git a/app/services/remove_domains_from_followers_service.rb b/app/services/remove_domains_from_followers_service.rb index d76763409d3..e7b9c7c5b9e 100644 --- a/app/services/remove_domains_from_followers_service.rb +++ b/app/services/remove_domains_from_followers_service.rb @@ -18,6 +18,6 @@ class RemoveDomainsFromFollowersService < BaseService end def build_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) + JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) end end diff --git a/app/services/remove_featured_tag_service.rb b/app/services/remove_featured_tag_service.rb index 4fdd43eb6a6..6f0f1f02f62 100644 --- a/app/services/remove_featured_tag_service.rb +++ b/app/services/remove_featured_tag_service.rb @@ -26,6 +26,6 @@ class RemoveFeaturedTagService < BaseService private def build_json(featured_tag) - Oj.dump(serialize_payload(featured_tag, ActivityPub::RemoveHashtagSerializer, signer: @account)) + JSON.generate(serialize_payload(featured_tag, ActivityPub::RemoveHashtagSerializer, signer: @account)) end end diff --git a/app/services/remove_from_followers_service.rb b/app/services/remove_from_followers_service.rb index 007d5b1fdd4..e9b283e7237 100644 --- a/app/services/remove_from_followers_service.rb +++ b/app/services/remove_from_followers_service.rb @@ -18,6 +18,6 @@ class RemoveFromFollowersService < BaseService end def build_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) + JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) end end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index caa22b47291..da82bbb9ea6 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -14,7 +14,7 @@ class RemoveStatusService < BaseService # @option [Boolean] :original_removed # @option [Boolean] :skip_streaming def call(status, **options) - @payload = Oj.dump(event: :delete, payload: status.id.to_s) + @payload = JSON.generate(event: :delete, payload: status.id.to_s) @status = status @account = status.account @options = options @@ -103,7 +103,7 @@ class RemoveStatusService < BaseService end def signed_activity_json - @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteNoteSerializer, signer: @account, always_sign: true)) + @signed_activity_json ||= JSON.generate(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteNoteSerializer, signer: @account, always_sign: true)) end def remove_reblogs diff --git a/app/services/report_service.rb b/app/services/report_service.rb index a666450af0a..95b2777765c 100644 --- a/app/services/report_service.rb +++ b/app/services/report_service.rb @@ -98,7 +98,7 @@ class ReportService < BaseService end def payload - Oj.dump(serialize_payload(@report, ActivityPub::FlagSerializer, account: some_local_account)) + JSON.generate(serialize_payload(@report, ActivityPub::FlagSerializer, account: some_local_account)) end def some_local_account diff --git a/app/services/revoke_collection_item_service.rb b/app/services/revoke_collection_item_service.rb index d299b567f22..02c60c21c00 100644 --- a/app/services/revoke_collection_item_service.rb +++ b/app/services/revoke_collection_item_service.rb @@ -19,6 +19,6 @@ class RevokeCollectionItemService < BaseService end def signed_activity_json - @signed_activity_json ||= Oj.dump(serialize_payload(@collection_item, ActivityPub::DeleteFeatureAuthorizationSerializer, signer: @account, always_sign: true)) + @signed_activity_json ||= JSON.generate(serialize_payload(@collection_item, ActivityPub::DeleteFeatureAuthorizationSerializer, signer: @account, always_sign: true)) end end diff --git a/app/services/revoke_quote_service.rb b/app/services/revoke_quote_service.rb index 346fba89709..9a21510ba4c 100644 --- a/app/services/revoke_quote_service.rb +++ b/app/services/revoke_quote_service.rb @@ -39,6 +39,6 @@ class RevokeQuoteService < BaseService end def signed_activity_json - @signed_activity_json ||= Oj.dump(serialize_payload(@quote, ActivityPub::DeleteQuoteAuthorizationSerializer, signer: @account, always_sign: true, force_approval_id: true)) + @signed_activity_json ||= JSON.generate(serialize_payload(@quote, ActivityPub::DeleteQuoteAuthorizationSerializer, signer: @account, always_sign: true, force_approval_id: true)) end end diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index 45ec1f50db5..aa2eadd94c8 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -20,9 +20,9 @@ class SoftwareUpdateCheckService < BaseService def fetch_update_notices Request.new(:get, "#{api_url}?version=#{version}").add_headers('Accept' => 'application/json', 'User-Agent' => 'Mastodon update checker').perform do |res| - return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200 + return JSON.parse(res.body_with_limit) if res.code == 200 end - rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, JSON::ParserError nil end diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 666b64cacfb..3bed593f113 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -34,7 +34,7 @@ class SuspendAccountService < BaseService Follow.where(account: @account).find_in_batches do |follows| ActivityPub::DeliveryWorker.push_bulk(follows) do |follow| - [Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] + [JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), follow.target_account_id, @account.inbox_url] end follows.each(&:destroy) @@ -72,6 +72,6 @@ class SuspendAccountService < BaseService end def signed_activity_json - @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account)) + @signed_activity_json ||= JSON.generate(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account)) end end diff --git a/app/services/unblock_service.rb b/app/services/unblock_service.rb index c263ac8afe0..96e858d9d42 100644 --- a/app/services/unblock_service.rb +++ b/app/services/unblock_service.rb @@ -18,6 +18,6 @@ class UnblockService < BaseService end def build_json(unblock) - Oj.dump(serialize_payload(unblock, ActivityPub::UndoBlockSerializer)) + JSON.generate(serialize_payload(unblock, ActivityPub::UndoBlockSerializer)) end end diff --git a/app/services/unfavourite_service.rb b/app/services/unfavourite_service.rb index 37917a64f1b..269b78baff6 100644 --- a/app/services/unfavourite_service.rb +++ b/app/services/unfavourite_service.rb @@ -18,6 +18,6 @@ class UnfavouriteService < BaseService end def build_json(favourite) - Oj.dump(serialize_payload(favourite, ActivityPub::UndoLikeSerializer)) + JSON.generate(serialize_payload(favourite, ActivityPub::UndoLikeSerializer)) end end diff --git a/app/services/unfollow_service.rb b/app/services/unfollow_service.rb index 1ea8af69926..103bf3fdec6 100644 --- a/app/services/unfollow_service.rb +++ b/app/services/unfollow_service.rb @@ -63,10 +63,10 @@ class UnfollowService < BaseService end def build_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)) + JSON.generate(serialize_payload(follow, ActivityPub::UndoFollowSerializer)) end def build_reject_json(follow) - Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) + JSON.generate(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) end end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index 1a52e80d246..d48200e97bb 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -63,6 +63,6 @@ class UnsuspendAccountService < BaseService end def signed_activity_json - @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account)) + @signed_activity_json ||= JSON.generate(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account)) end end diff --git a/app/services/vote_service.rb b/app/services/vote_service.rb index 878350388b8..95c8ba53e19 100644 --- a/app/services/vote_service.rb +++ b/app/services/vote_service.rb @@ -65,7 +65,7 @@ class VoteService < BaseService end def build_json(vote) - Oj.dump(serialize_payload(vote, ActivityPub::VoteSerializer)) + JSON.generate(serialize_payload(vote, ActivityPub::VoteSerializer)) end def increment_voters_count! diff --git a/app/services/webhook_service.rb b/app/services/webhook_service.rb index aafa3831817..462522f0736 100644 --- a/app/services/webhook_service.rb +++ b/app/services/webhook_service.rb @@ -17,6 +17,6 @@ class WebhookService < BaseService end def serialize_event - Oj.dump(ActiveModelSerializers::SerializableResource.new(@event, serializer: REST::Admin::WebhookEventSerializer, scope: nil, scope_name: :current_user).as_json) + JSON.generate(ActiveModelSerializers::SerializableResource.new(@event, serializer: REST::Admin::WebhookEventSerializer, scope: nil, scope_name: :current_user).as_json) end end diff --git a/app/validators/reaction_validator.rb b/app/validators/reaction_validator.rb index 89d83de5a2c..0f15cd912e0 100644 --- a/app/validators/reaction_validator.rb +++ b/app/validators/reaction_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ReactionValidator < ActiveModel::Validator - SUPPORTED_EMOJIS = Oj.load_file(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json').to_s).keys.freeze + SUPPORTED_EMOJIS = JSON.parse(File.read(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json').to_s)).keys.freeze LIMIT = 8 diff --git a/app/views/shared/_web_app.html.haml b/app/views/shared/_web_app.html.haml index 5e6815165f4..3b039fcf3c8 100644 --- a/app/views/shared/_web_app.html.haml +++ b/app/views/shared/_web_app.html.haml @@ -8,7 +8,7 @@ = render_initial_state = vite_typescript_tag 'application.ts', crossorigin: 'anonymous' -.notranslate.app-holder#mastodon{ data: { props: Oj.dump(default_props) } } +.notranslate.app-holder#mastodon{ data: { props: JSON.generate(default_props) } } %noscript = image_tag frontend_asset_path('images/logo.svg'), alt: 'Mastodon' diff --git a/app/views/shares/show.html.haml b/app/views/shares/show.html.haml index c12b43031e5..3354f6b28e0 100644 --- a/app/views/shares/show.html.haml +++ b/app/views/shares/show.html.haml @@ -2,4 +2,4 @@ = render_initial_state = vite_typescript_tag 'share.tsx', crossorigin: 'anonymous' -#mastodon-compose{ data: { props: Oj.dump(default_props) } } +#mastodon-compose{ data: { props: JSON.generate(default_props) } } diff --git a/app/views/statuses/embed.html.haml b/app/views/statuses/embed.html.haml index 09d0792ea25..bba227b31c2 100644 --- a/app/views/statuses/embed.html.haml +++ b/app/views/statuses/embed.html.haml @@ -1 +1 @@ -#mastodon-status{ data: { props: Oj.dump(default_props.merge(id: @status.id.to_s)) } } +#mastodon-status{ data: { props: JSON.generate(default_props.merge(id: @status.id.to_s)) } } diff --git a/app/workers/activitypub/distribute_poll_update_worker.rb b/app/workers/activitypub/distribute_poll_update_worker.rb index 8c1eefd93d5..93f62c9fc8d 100644 --- a/app/workers/activitypub/distribute_poll_update_worker.rb +++ b/app/workers/activitypub/distribute_poll_update_worker.rb @@ -43,7 +43,7 @@ class ActivityPub::DistributePollUpdateWorker end def payload - @payload ||= Oj.dump(serialize_payload(@status, ActivityPub::UpdatePollSerializer, signer: @account)) + @payload ||= JSON.generate(serialize_payload(@status, ActivityPub::UpdatePollSerializer, signer: @account)) end def relay! diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb index 63013bdc69a..e68a8aba836 100644 --- a/app/workers/activitypub/distribution_worker.rb +++ b/app/workers/activitypub/distribution_worker.rb @@ -24,7 +24,7 @@ class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker end def payload - @payload ||= Oj.dump(serialize_payload(@status, activity_serializer, serializer_options.merge(signer: @account))) + @payload ||= JSON.generate(serialize_payload(@status, activity_serializer, serializer_options.merge(signer: @account))) end def activity_serializer diff --git a/app/workers/activitypub/feature_request_worker.rb b/app/workers/activitypub/feature_request_worker.rb index fa895a546d7..3ce801a1ff4 100644 --- a/app/workers/activitypub/feature_request_worker.rb +++ b/app/workers/activitypub/feature_request_worker.rb @@ -17,6 +17,6 @@ class ActivityPub::FeatureRequestWorker < ActivityPub::RawDistributionWorker end def payload - @payload ||= Oj.dump(serialize_payload(@collection_item, ActivityPub::FeatureRequestSerializer, signer: @account)) + @payload ||= JSON.generate(serialize_payload(@collection_item, ActivityPub::FeatureRequestSerializer, signer: @account)) end end diff --git a/app/workers/activitypub/move_distribution_worker.rb b/app/workers/activitypub/move_distribution_worker.rb index 1680fcc76ec..19774c72a09 100644 --- a/app/workers/activitypub/move_distribution_worker.rb +++ b/app/workers/activitypub/move_distribution_worker.rb @@ -28,6 +28,6 @@ class ActivityPub::MoveDistributionWorker end def signed_payload - @signed_payload ||= Oj.dump(serialize_payload(@migration, ActivityPub::MoveSerializer, signer: @account)) + @signed_payload ||= JSON.generate(serialize_payload(@migration, ActivityPub::MoveSerializer, signer: @account)) end end diff --git a/app/workers/activitypub/quote_request_worker.rb b/app/workers/activitypub/quote_request_worker.rb index 0540492f863..3354f5be97f 100644 --- a/app/workers/activitypub/quote_request_worker.rb +++ b/app/workers/activitypub/quote_request_worker.rb @@ -17,6 +17,6 @@ class ActivityPub::QuoteRequestWorker < ActivityPub::RawDistributionWorker end def payload - @payload ||= Oj.dump(serialize_payload(@quote, ActivityPub::QuoteRequestSerializer, signer: @account, allow_post_inlining: true)) + @payload ||= JSON.generate(serialize_payload(@quote, ActivityPub::QuoteRequestSerializer, signer: @account, allow_post_inlining: true)) end end diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb index 976f516498d..18b7802b0a6 100644 --- a/app/workers/activitypub/update_distribution_worker.rb +++ b/app/workers/activitypub/update_distribution_worker.rb @@ -23,6 +23,6 @@ class ActivityPub::UpdateDistributionWorker < ActivityPub::RawDistributionWorker end def payload - @payload ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account, sign_with: @options[:sign_with])) + @payload ||= JSON.generate(serialize_payload(@account, ActivityPub::UpdateActorSerializer, signer: @account, sign_with: @options[:sign_with])) end end diff --git a/app/workers/publish_announcement_reaction_worker.rb b/app/workers/publish_announcement_reaction_worker.rb index 03da56550aa..950a7d5c410 100644 --- a/app/workers/publish_announcement_reaction_worker.rb +++ b/app/workers/publish_announcement_reaction_worker.rb @@ -11,7 +11,7 @@ class PublishAnnouncementReactionWorker reaction ||= announcement.announcement_reactions.new(name: name) payload = InlineRenderer.render(reaction, nil, :reaction).tap { |h| h[:announcement_id] = announcement_id.to_s } - payload = Oj.dump(event: :'announcement.reaction', payload: payload) + payload = JSON.generate(event: :'announcement.reaction', payload: payload) FeedManager.instance.with_active_accounts do |account| redis.publish("timeline:#{account.id}", payload) if redis.exists?("subscribed:timeline:#{account.id}") diff --git a/app/workers/publish_scheduled_announcement_worker.rb b/app/workers/publish_scheduled_announcement_worker.rb index c23eae6af7c..d3ece82cd31 100644 --- a/app/workers/publish_scheduled_announcement_worker.rb +++ b/app/workers/publish_scheduled_announcement_worker.rb @@ -12,7 +12,7 @@ class PublishScheduledAnnouncementWorker @announcement.publish! unless @announcement.published? payload = InlineRenderer.render(@announcement, nil, :announcement) - payload = Oj.dump(event: :announcement, payload: payload) + payload = JSON.generate(event: :announcement, payload: payload) FeedManager.instance.with_active_accounts do |account| redis.publish("timeline:#{account.id}", payload) if redis.exists?("subscribed:timeline:#{account.id}") diff --git a/app/workers/push_conversation_worker.rb b/app/workers/push_conversation_worker.rb index 23b1469f111..54488828a6d 100644 --- a/app/workers/push_conversation_worker.rb +++ b/app/workers/push_conversation_worker.rb @@ -9,7 +9,7 @@ class PushConversationWorker message = InlineRenderer.render(conversation, conversation.account, :conversation) timeline_id = "timeline:direct:#{conversation.account_id}" - redis.publish(timeline_id, Oj.dump(event: :conversation, payload: message)) + redis.publish(timeline_id, JSON.generate(event: :conversation, payload: message)) rescue ActiveRecord::RecordNotFound true end diff --git a/app/workers/push_update_worker.rb b/app/workers/push_update_worker.rb index c32975a986c..6bbdd0b4dbf 100644 --- a/app/workers/push_update_worker.rb +++ b/app/workers/push_update_worker.rb @@ -23,7 +23,7 @@ class PushUpdateWorker end def message - Oj.dump( + JSON.generate( event: update? ? :'status.update' : :update, payload: @payload ) diff --git a/app/workers/scheduler/self_destruct_scheduler.rb b/app/workers/scheduler/self_destruct_scheduler.rb index d7aaef56e73..93f8d19f16c 100644 --- a/app/workers/scheduler/self_destruct_scheduler.rb +++ b/app/workers/scheduler/self_destruct_scheduler.rb @@ -61,7 +61,7 @@ class Scheduler::SelfDestructScheduler adapter: ActivityPub::Adapter ).as_json - json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(account)) + json = JSON.generate(ActivityPub::LinkedDataSignature.new(payload).sign!(account)) ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url| [json, account.id, inbox_url] diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb index cb8a46b8f4e..6a2456e6d4d 100644 --- a/app/workers/unfilter_notifications_worker.rb +++ b/app/workers/unfilter_notifications_worker.rb @@ -39,7 +39,7 @@ class UnfilterNotificationsWorker end def push_streaming_event! - redis.publish("timeline:#{@recipient.id}:notifications", Oj.dump(event: :notifications_merged, payload: '1')) + redis.publish("timeline:#{@recipient.id}:notifications", JSON.generate(event: :notifications_merged, payload: '1')) end def subscribed_to_streaming_api? diff --git a/app/workers/unpublish_announcement_worker.rb b/app/workers/unpublish_announcement_worker.rb index e58c07554a7..feb57bb6211 100644 --- a/app/workers/unpublish_announcement_worker.rb +++ b/app/workers/unpublish_announcement_worker.rb @@ -5,7 +5,7 @@ class UnpublishAnnouncementWorker include Redisable def perform(announcement_id) - payload = Oj.dump(event: :'announcement.delete', payload: announcement_id.to_s) + payload = JSON.generate(event: :'announcement.delete', payload: announcement_id.to_s) FeedManager.instance.with_active_accounts do |account| redis.publish("timeline:#{account.id}", payload) if redis.exists?("subscribed:timeline:#{account.id}") diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index a1f4e46690c..c9a8a73c316 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -101,7 +101,7 @@ class Web::PushNotificationWorker def push_notification_json I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do - Oj.dump(serialized_notification.as_json) + JSON.generate(serialized_notification.as_json) end end diff --git a/db/migrate/20180608213548_reject_following_blocked_users.rb b/db/migrate/20180608213548_reject_following_blocked_users.rb index a82bff62b41..3a765803f77 100644 --- a/db/migrate/20180608213548_reject_following_blocked_users.rb +++ b/db/migrate/20180608213548_reject_following_blocked_users.rb @@ -28,7 +28,7 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2] next follow.destroy! if blocked_account.local? - reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_account)) + reject_follow_json = JSON.generate(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_account)) ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_account, blocked_account.inbox_url) diff --git a/db/migrate/20230215074423_move_user_settings.rb b/db/migrate/20230215074423_move_user_settings.rb index 86231e49e87..ce73941da58 100644 --- a/db/migrate/20230215074423_move_user_settings.rb +++ b/db/migrate/20230215074423_move_user_settings.rb @@ -80,7 +80,7 @@ class MoveUserSettings < ActiveRecord::Migration[6.1] end end - user.update_column('settings', Oj.dump(user_settings)) + user.update_column('settings', JSON.generate(user_settings)) end end end diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb index ea4cfccdf93..1736d1b17d6 100644 --- a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -21,7 +21,7 @@ class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1] private def policy_for_user(user) - deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + deserialized_settings = JSON.parse(user.attributes_before_type_cast['settings']) return if deserialized_settings.nil? requires_new_policy = false diff --git a/db/migrate/20250911163952_fill_default_quote_policy_setting.rb b/db/migrate/20250911163952_fill_default_quote_policy_setting.rb index c3d08e68c9e..d1aefaf758e 100644 --- a/db/migrate/20250911163952_fill_default_quote_policy_setting.rb +++ b/db/migrate/20250911163952_fill_default_quote_policy_setting.rb @@ -8,7 +8,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0] def up User.where.not(settings: nil).find_each do |user| - settings = Oj.load(user.attributes_before_type_cast['settings']) + settings = JSON.parse(user.attributes_before_type_cast['settings']) next if settings.nil? should_update_settings = false @@ -26,7 +26,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0] should_update_settings = true end - user.update_column('settings', Oj.dump(settings)) if should_update_settings + user.update_column('settings', JSON.generate(settings)) if should_update_settings end end end diff --git a/db/migrate/20260209143308_migrate_user_theme.rb b/db/migrate/20260209143308_migrate_user_theme.rb index 93870055db7..71f69705b9e 100644 --- a/db/migrate/20260209143308_migrate_user_theme.rb +++ b/db/migrate/20260209143308_migrate_user_theme.rb @@ -8,7 +8,7 @@ class MigrateUserTheme < ActiveRecord::Migration[8.0] def up User.where.not(settings: nil).find_each do |user| - settings = Oj.load(user.attributes_before_type_cast['settings']) + settings = JSON.parse(user.attributes_before_type_cast['settings']) next if settings.nil? || settings['theme'].blank? || %w(system default mastodon-light contrast).exclude?(settings['theme']) case settings['theme'] @@ -25,7 +25,7 @@ class MigrateUserTheme < ActiveRecord::Migration[8.0] settings['theme'] = 'default' - user.update_column('settings', Oj.dump(settings)) + user.update_column('settings', JSON.generate(settings)) end end end diff --git a/db/post_migrate/20230904134623_fix_kmr_locale_settings.rb b/db/post_migrate/20230904134623_fix_kmr_locale_settings.rb index 10e3f1da993..21c69c35212 100644 --- a/db/post_migrate/20230904134623_fix_kmr_locale_settings.rb +++ b/db/post_migrate/20230904134623_fix_kmr_locale_settings.rb @@ -11,11 +11,11 @@ class FixKmrLocaleSettings < ActiveRecord::Migration[7.0] MigrationUser.reset_column_information MigrationUser.where.not(settings: [nil, '{}']).find_each do |user| - user_settings = Oj.load(user.settings) + user_settings = JSON.parse(user.settings) next unless user_settings['default_language'] == 'kmr' user_settings['default_language'] = 'ku' - user.update!(settings: Oj.dump(user_settings)) + user.update!(settings: JSON.generate(user_settings)) end MigrationUser.where.not(chosen_languages: nil).where('chosen_languages && ?', '{kmr}').find_each do |user| diff --git a/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb b/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb index c789b639517..92dbd90c795 100644 --- a/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb +++ b/db/post_migrate/20240321160706_migrate_interaction_settings_to_policy_again.rb @@ -21,7 +21,7 @@ class MigrateInteractionSettingsToPolicyAgain < ActiveRecord::Migration[7.1] private def policy_for_user(user) - deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + deserialized_settings = JSON.parse(user.attributes_before_type_cast['settings']) return if deserialized_settings.nil? return if user.notification_policy.present? diff --git a/lib/mastodon/cli/domains.rb b/lib/mastodon/cli/domains.rb index c247463af52..c9b0daffd4a 100644 --- a/lib/mastodon/cli/domains.rb +++ b/lib/mastodon/cli/domains.rb @@ -140,13 +140,13 @@ module Mastodon::CLI Request.new(:get, "https://#{domain}/api/v1/instance").perform do |res| next unless res.code == 200 - stats[domain] = Oj.load(res.to_s) + stats[domain] = JSON.parse(res.to_s) end Request.new(:get, "https://#{domain}/api/v1/instance/peers").perform do |res| next unless res.code == 200 - Oj.load(res.to_s).reject { |peer| stats.key?(peer) }.each do |peer| + JSON.parse(res.to_s).reject { |peer| stats.key?(peer) }.each do |peer| pool.post(peer, &work_unit) end end @@ -154,7 +154,7 @@ module Mastodon::CLI Request.new(:get, "https://#{domain}/api/v1/instance/activity").perform do |res| next unless res.code == 200 - stats[domain]['activity'] = Oj.load(res.to_s) + stats[domain]['activity'] = JSON.parse(res.to_s) end rescue failed.increment @@ -214,7 +214,7 @@ module Mastodon::CLI def stats_to_json(stats) stats.compact! - say(Oj.dump(stats)) + say(JSON.generate(stats)) end end end diff --git a/lib/tasks/emojis.rake b/lib/tasks/emojis.rake index 053dfd83bd0..cd806e55d63 100644 --- a/lib/tasks/emojis.rake +++ b/lib/tasks/emojis.rake @@ -99,7 +99,7 @@ namespace :emojis do map = map.sort { |a, b| a[0].size <=> b[0].size }.to_h - File.write(dest, Oj.dump(map)) + File.write(dest, JSON.generate(map)) puts "Wrote emojo to destination! (#{dest})" end @@ -109,7 +109,7 @@ namespace :emojis do emojis_light = 'đŸ‘ŊâšžđŸ”â˜ī¸đŸ’¨đŸ•Šī¸đŸ‘€đŸĨđŸ‘ģđŸâ•â”â›¸ī¸đŸŒŠī¸đŸ”ŠđŸ”‡đŸ“ƒđŸŒ§ī¸đŸđŸšđŸ™đŸ“đŸ‘đŸ’€â˜ ī¸đŸŒ¨ī¸đŸ”‰đŸ”ˆđŸ’ŦđŸ’­đŸđŸŗī¸âšĒâŦœâ—Ŋâ—ģī¸â–Ģī¸đŸĒŊđŸĒŋ' emojis_dark = '🎱🐜âšĢ🖤âŦ›â—ŧī¸â—žâ—ŧī¸âœ’ī¸â–Ēī¸đŸ’ŖđŸŽŗđŸ“ˇđŸ“¸â™Ŗī¸đŸ•ļī¸âœ´ī¸đŸ”ŒđŸ’‚â€â™€ī¸đŸ“Ŋī¸đŸŗđŸĻđŸ’‚đŸ”ĒđŸ•ŗī¸đŸ•šī¸đŸ•‹đŸ–Šī¸đŸ–‹ī¸đŸ’‚â€â™‚ī¸đŸŽ¤đŸŽ“đŸŽĨđŸŽŧâ™ ī¸đŸŽŠđŸĻƒđŸ“ŧ📹🎮🐃🏴🐞đŸ•ē📱📲🚲đŸĒŽđŸĻ‍âŦ›' - map = Oj.load(File.read(src)) + map = JSON.parse(File.read(src)) emojis_light.each_grapheme_cluster do |emoji| gen_border map[emoji], 'black' @@ -193,7 +193,7 @@ namespace :emojis do require 'vips' src = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_data.json') - sheet = Oj.load(File.read(src)) + sheet = JSON.parse(File.read(src)) max = 0 sheet['emojis'].each_value do |row| diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake index 6c696a90971..85c7bc43f36 100644 --- a/lib/tasks/repo.rake +++ b/lib/tasks/repo.rake @@ -22,7 +22,7 @@ namespace :repo do while url.present? response = HTTP.get(url) - contributors = Oj.load(response.body) + contributors = JSON.parse(response.body) contributors.each do |c| file << "* [#{c['login']}](#{c['html_url']})\n" if c['login'] @@ -68,7 +68,7 @@ namespace :repo do end end - pull_request = Oj.load(response.to_s) + pull_request = JSON.parse(response.to_s) pull_request['user']['login'] end diff --git a/lib/vite_ruby/sri_extensions.rb b/lib/vite_ruby/sri_extensions.rb index 31363272bfa..eca12cb3239 100644 --- a/lib/vite_ruby/sri_extensions.rb +++ b/lib/vite_ruby/sri_extensions.rb @@ -15,7 +15,7 @@ module ViteRuby::ManifestIntegrityExtension end def load_name_lookup_cache - Oj.load(config.build_output_dir.join('.vite/manifest-lookup.json').read) + JSON.parse(config.build_output_dir.join('.vite/manifest-lookup.json').read) end # Upstream's `virtual` type is a hack, re-implement it with efficient exact name lookup