Use actual ISO8601 timestamps for masto API
ci/woodpecker/pr/woodpecker Pipeline is pending Details

Elixir uses an incompatible superset of ISO8601 that breaks some clients
This commit is contained in:
Charlotte 🦝 Delenk 2023-01-07 21:58:56 +01:00
parent b98fe4476c
commit 2ce4f96f6e
Signed by untrusted user: darkkirb
GPG Key ID: AB2BD8DAF2E37122
2 changed files with 18 additions and 3 deletions

View File

@ -328,9 +328,16 @@ defmodule Pleroma.Web.CommonAPI.Utils do
end
def to_masto_date(%NaiveDateTime{} = date) do
date
|> NaiveDateTime.to_iso8601()
|> String.replace(~r/(\.\d+)?$/, ".000Z", global: false)
# NOTE: Elixirs ISO 8601 format is a superset of the real standard
# It supports negative years for example.
# ISO8601 only supports years before 1583 with mutual agreement
if date.year < 1583 do
""
else
date
|> NaiveDateTime.to_iso8601()
|> String.replace(~r/(\.\d+)?$/, ".000Z", global: false)
end
end
def to_masto_date(date) when is_binary(date) do

View File

@ -498,6 +498,14 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do
test "returns empty string when date invalid" do
assert Utils.to_masto_date("2015-01?23T23:50:07.123Z") == ""
end
test "returns empty string when date is before the introduction of the Gregorian Calendar" do
assert Utils.to_masto_date("0621-01-01T00:00:00Z") == ""
end
test "returns empty string when date is BCE" do
assert Utils.to_masto_date("-420-01-01T00:00:00Z") == ""
end
end
describe "maybe_notify_mentioned_recipients/2" do