Compare commits
4 Commits
2b67d2abc1
...
b7258f6d06
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b7258f6d06 | ||
|
|
8965e1bfa9 | ||
|
|
1e27ab0885 | ||
|
|
cef2c50a71 |
@@ -2,6 +2,14 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [4.4.7] - 2025-10-15
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix forwarder being called with `nil` status when quote post is soft-deleted (#36463 by @ClearlyClaire)
|
||||||
|
- Fix moderation warning e-mails that include posts (#36462 by @ClearlyClaire)
|
||||||
|
- Fix allow_referrer_origin typo (#36460 by @ShadowJonathan)
|
||||||
|
|
||||||
## [4.4.6] - 2025-10-13
|
## [4.4.6] - 2025-10-13
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|||||||
@@ -59,9 +59,11 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||||||
@quote = Quote.find_by(approval_uri: object_uri, quoted_account: @account)
|
@quote = Quote.find_by(approval_uri: object_uri, quoted_account: @account)
|
||||||
return if @quote.nil?
|
return if @quote.nil?
|
||||||
|
|
||||||
ActivityPub::Forwarder.new(@account, @json, @quote.status).forward!
|
ActivityPub::Forwarder.new(@account, @json, @quote.status).forward! if @quote.status.present?
|
||||||
|
|
||||||
@quote.reject!
|
@quote.reject!
|
||||||
DistributionWorker.perform_async(@quote.status_id, { 'update' => true })
|
|
||||||
|
DistributionWorker.perform_async(@quote.status_id, { 'update' => true }) if @quote.status.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def forwarder
|
def forwarder
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
|||||||
|
|
||||||
attributes :domain, :title, :version, :source_url, :description,
|
attributes :domain, :title, :version, :source_url, :description,
|
||||||
:usage, :thumbnail, :icon, :languages, :configuration,
|
:usage, :thumbnail, :icon, :languages, :configuration,
|
||||||
:registrations, :api_versions
|
:registrations, :api_versions, :max_toot_chars
|
||||||
|
|
||||||
has_one :contact, serializer: ContactSerializer
|
has_one :contact, serializer: ContactSerializer
|
||||||
has_many :rules, serializer: REST::RuleSerializer
|
has_many :rules, serializer: REST::RuleSerializer
|
||||||
@@ -119,6 +119,10 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
|||||||
Mastodon::Version.api_versions
|
Mastodon::Version.api_versions
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def max_toot_chars
|
||||||
|
StatusLengthValidator::MAX_CHARS
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def registrations_enabled?
|
def registrations_enabled?
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class StatusLengthValidator < ActiveModel::Validator
|
class StatusLengthValidator < ActiveModel::Validator
|
||||||
MAX_CHARS = 500
|
MAX_CHARS = 1024
|
||||||
URL_PLACEHOLDER_CHARS = 23
|
URL_PLACEHOLDER_CHARS = 23
|
||||||
URL_PLACEHOLDER = 'x' * 23
|
URL_PLACEHOLDER = 'x' * 23
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-status-content
|
%td.email-status-content
|
||||||
= render 'status_content', status: status
|
= render 'notification_mailer/status_content', status: status
|
||||||
|
|
||||||
%p.email-status-footer
|
%p.email-status-footer
|
||||||
= link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
= link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
||||||
|
|||||||
@@ -11,12 +11,12 @@
|
|||||||
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-status-content
|
%td.email-status-content
|
||||||
= render 'status_content', status: status
|
= render 'notification_mailer/status_content', status: status
|
||||||
|
|
||||||
- if status.local? && status.quote
|
- if status.local? && status.quote
|
||||||
%table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
%table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
|
||||||
%tr
|
%tr
|
||||||
%td.email-inner-nested-card-td
|
%td.email-inner-nested-card-td
|
||||||
= render 'nested_quote', status: status.quote.quoted_status, time_zone: time_zone
|
= render 'notification_mailer/nested_quote', status: status.quote.quoted_status, time_zone: time_zone
|
||||||
%p.email-status-footer
|
%p.email-status-footer
|
||||||
= link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
= link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}")
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ defaults: &defaults
|
|||||||
require_invite_text: false
|
require_invite_text: false
|
||||||
backups_retention_period: 7
|
backups_retention_period: 7
|
||||||
captcha_enabled: false
|
captcha_enabled: false
|
||||||
allow_referer_origin: false
|
allow_referrer_origin: false
|
||||||
|
|
||||||
development:
|
development:
|
||||||
<<: *defaults
|
<<: *defaults
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ services:
|
|||||||
web:
|
web:
|
||||||
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
|
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
|
||||||
# build: .
|
# build: .
|
||||||
image: ghcr.io/mastodon/mastodon:v4.4.6
|
image: ghcr.io/mastodon/mastodon:v4.4.7
|
||||||
restart: always
|
restart: always
|
||||||
env_file: .env.production
|
env_file: .env.production
|
||||||
command: bundle exec puma -C config/puma.rb
|
command: bundle exec puma -C config/puma.rb
|
||||||
@@ -83,7 +83,7 @@ services:
|
|||||||
# build:
|
# build:
|
||||||
# dockerfile: ./streaming/Dockerfile
|
# dockerfile: ./streaming/Dockerfile
|
||||||
# context: .
|
# context: .
|
||||||
image: ghcr.io/mastodon/mastodon-streaming:v4.4.6
|
image: ghcr.io/mastodon/mastodon-streaming:v4.4.7
|
||||||
restart: always
|
restart: always
|
||||||
env_file: .env.production
|
env_file: .env.production
|
||||||
command: node ./streaming/index.js
|
command: node ./streaming/index.js
|
||||||
@@ -102,7 +102,7 @@ services:
|
|||||||
sidekiq:
|
sidekiq:
|
||||||
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
|
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
|
||||||
# build: .
|
# build: .
|
||||||
image: ghcr.io/mastodon/mastodon:v4.4.6
|
image: ghcr.io/mastodon/mastodon:v4.4.7
|
||||||
restart: always
|
restart: always
|
||||||
env_file: .env.production
|
env_file: .env.production
|
||||||
command: bundle exec sidekiq
|
command: bundle exec sidekiq
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ module Mastodon
|
|||||||
end
|
end
|
||||||
|
|
||||||
def patch
|
def patch
|
||||||
6
|
7
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_prerelease
|
def default_prerelease
|
||||||
|
|||||||
@@ -141,7 +141,9 @@ RSpec.describe UserMailer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe '#warning' do
|
describe '#warning' do
|
||||||
let(:strike) { Fabricate(:account_warning, target_account: receiver.account, text: 'dont worry its just the testsuite', action: 'suspend') }
|
let(:status) { Fabricate(:status, account: receiver.account) }
|
||||||
|
let(:quote) { Fabricate(:quote, state: :accepted, status: status) }
|
||||||
|
let(:strike) { Fabricate(:account_warning, target_account: receiver.account, text: 'dont worry its just the testsuite', action: 'suspend', status_ids: [quote.status_id]) }
|
||||||
let(:mail) { described_class.warning(receiver, strike) }
|
let(:mail) { described_class.warning(receiver, strike) }
|
||||||
|
|
||||||
it 'renders warning notification' do
|
it 'renders warning notification' do
|
||||||
|
|||||||
Reference in New Issue
Block a user