diff --git a/lib/feed_reader/collector.ex b/lib/feed_reader/collector.ex index f66bdd6..9c751ed 100644 --- a/lib/feed_reader/collector.ex +++ b/lib/feed_reader/collector.ex @@ -123,8 +123,7 @@ defmodule FeedReader.Collector do do: {:ok, %ParseResult{feed: feed, items: Enum.reverse(items)}} defp temporary_path do - path = - Path.join(System.tmp_dir!(), "feed_reader-parse-#{System.unique_integer([:positive])}.xml") + path = FeedReader.TempFile.random_file("feed_reader-parse") case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> diff --git a/lib/feed_reader/downloader.ex b/lib/feed_reader/downloader.ex index 877c2a8..5007b6d 100644 --- a/lib/feed_reader/downloader.ex +++ b/lib/feed_reader/downloader.ex @@ -233,11 +233,7 @@ defmodule FeedReader.Downloader do defp open_temp_file(0), do: {:error, :eexist} defp open_temp_file(attempts) do - path = - Path.join( - System.tmp_dir!(), - "feed_reader-download-#{System.unique_integer([:positive])}.xml" - ) + path = FeedReader.TempFile.random_file("feed_reader-download") case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> {:ok, path, file} diff --git a/lib/feed_reader/temp_file.ex b/lib/feed_reader/temp_file.ex new file mode 100644 index 0000000..c482985 --- /dev/null +++ b/lib/feed_reader/temp_file.ex @@ -0,0 +1,11 @@ +defmodule FeedReader.TempFile do + @moduledoc false + + @spec random_file(String.t()) :: String.t() + def random_file(base_name \\ "feed_reader") do + filename = + "#{base_name}-#{:crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)}.xml" + + Path.join(System.tmp_dir!(), filename) + end +end