From 3db923515057b7da23e4bb58a1696cd14df7ed52 Mon Sep 17 00:00:00 2001 From: Sergey Suprunenko Date: Tue, 2 Apr 2019 11:25:51 +0200 Subject: [PATCH] Ignore dates in wrong formats --- lib/pleroma/web/common_api/utils.ex | 21 ++++-------- test/web/common_api/common_api_utils_test.exs | 33 +++++++++---------- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 3f5348d66..0bf4de2f6 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -15,6 +15,8 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.Web.Endpoint alias Pleroma.Web.MediaProxy + require Logger + # This is a hack for twidere. def get_by_id_or_ap_id(id) do activity = @@ -240,28 +242,19 @@ defmodule Pleroma.Web.CommonAPI.Utils do Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") end - def date_to_asctime(date) when is_float(date) do - date - |> trunc() - |> date_to_asctime() - end - - def date_to_asctime(date) when is_integer(date) do - with {:ok, date} <- DateTime.from_unix(date) do + def date_to_asctime(date) when is_binary(date) do + with {:ok, date, _offset} <- DateTime.from_iso8601(date) do format_asctime(date) else _e -> + Logger.warn("Date #{date} in wrong format, must be ISO 8601") "" end end def date_to_asctime(date) do - with {:ok, date, _offset} <- DateTime.from_iso8601(date) do - format_asctime(date) - else - _e -> - "" - end + Logger.warn("Date #{date} in wrong format, must be ISO 8601") + "" end def to_masto_date(%NaiveDateTime{} = date) do diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 0f8b28d9c..f0c59d5c3 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -155,39 +155,38 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do end describe "formats date to asctime" do - test "when date is an integer Unix timestamp" do - date = DateTime.utc_now() |> DateTime.to_unix() + test "when date is in ISO 8601 format" do + date = DateTime.utc_now() |> DateTime.to_iso8601() expected = date - |> DateTime.from_unix!() + |> DateTime.from_iso8601() + |> elem(1) |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") assert Utils.date_to_asctime(date) == expected end - test "when date is a float Unix timestamp" do - date = 1_553_808_404.602961 + test "when date is a binary in wrong format" do + date = DateTime.utc_now() - expected = - date - |> trunc() - |> DateTime.from_unix!() - |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") + expected = "" assert Utils.date_to_asctime(date) == expected end - test "when date is in ISO 8601 format" do - date = DateTime.utc_now() |> DateTime.to_iso8601() + test "when date is a Unix timestamp" do + date = DateTime.utc_now() |> DateTime.to_unix() - expected = - date - |> DateTime.from_iso8601() - |> elem(1) - |> Calendar.Strftime.strftime!("%a %b %d %H:%M:%S %z %Y") + expected = "" assert Utils.date_to_asctime(date) == expected end + + test "when date is nil" do + expected = "" + + assert Utils.date_to_asctime(nil) == expected + end end end -- 2.45.2