Ignore dates in wrong formats
authorSergey Suprunenko <suprunenko.s@gmail.com>
Tue, 2 Apr 2019 09:25:51 +0000 (11:25 +0200)
committerSergey Suprunenko <suprunenko.s@gmail.com>
Tue, 2 Apr 2019 09:32:36 +0000 (11:32 +0200)
lib/pleroma/web/common_api/utils.ex
test/web/common_api/common_api_utils_test.exs

index 3f5348d66fdfbe518dffaa0b99c35e075167617f..0bf4de2f6f87b9696fc305311fb96413c07cae7a 100644 (file)
@@ -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
index 0f8b28d9cf47d10e3b85009445f9d8985acfc5fc..f0c59d5c33dc71aaff97334590ce766ae35e1a89 100644 (file)
@@ -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