From: Sergey Suprunenko <suprunenko.s@gmail.com>
Date: Tue, 2 Apr 2019 09:25:51 +0000 (+0200)
Subject: Ignore dates in wrong formats
X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=3db923515057b7da23e4bb58a1696cd14df7ed52;p=akkoma

Ignore dates in wrong formats
---

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