Merge remote-tracking branch 'pleroma/develop' into feature/disable-account
[akkoma] / lib / mix / tasks / pleroma / emoji.ex
index 92d62b6de376298e8489f3a50c081472775daa84..d2ddf450aeb58f89b4c03fb99c5fe4ec66c38701 100644 (file)
@@ -11,7 +11,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do
 
   ## ls-packs
 
-  mix pleroma.emoji ls-packs [OPTION...]
+      mix pleroma.emoji ls-packs [OPTION...]
 
   Lists the emoji packs and metadata specified in the manifest.
 
@@ -23,10 +23,10 @@ defmodule Mix.Tasks.Pleroma.Emoji do
 
   ## get-packs
 
-  mix pleroma.emoji get-packs [OPTION...] PACKS
+      mix pleroma.emoji get-packs [OPTION...] PACKS
 
   Fetches, verifies and installs the specified PACKS from the
-  manifest into the `STATIC-DIR/emoji/PACK-NAME
+  manifest into the `STATIC-DIR/emoji/PACK-NAME`
 
   ### Options
 
@@ -34,14 +34,14 @@ defmodule Mix.Tasks.Pleroma.Emoji do
 
   ## gen-pack
 
-  mix pleroma.emoji gen-pack PACK-URL
+      mix pleroma.emoji gen-pack PACK-URL
 
   Creates a new manifest entry and a file list from the specified
   remote pack file. Currently, only .zip archives are recognized
   as remote pack files and packs are therefore assumed to be zip
   archives. This command is intended to run interactively and will
   first ask you some basic questions about the pack, then download
-  the remote file and generate an MD5 signature for it, then
+  the remote file and generate an SHA256 checksum for it, then
   generate an emoji file list for you.
 
   The manifest entry will either be written to a newly created
@@ -109,17 +109,17 @@ defmodule Mix.Tasks.Pleroma.Emoji do
           ])
         )
 
-        binary_archive = Tesla.get!(src_url).body
-        archive_md5 = :crypto.hash(:md5, binary_archive) |> Base.encode16()
+        binary_archive = Tesla.get!(client(), src_url).body
+        archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16()
 
-        md5_status_text = ["MD5 of ", :bright, pack_name, :normal, " source file is ", :bright]
+        sha_status_text = ["SHA256 of ", :bright, pack_name, :normal, " source file is ", :bright]
 
-        if archive_md5 == String.upcase(pack["src_md5"]) do
-          IO.puts(IO.ANSI.format(md5_status_text ++ [:green, "OK"]))
+        if archive_sha == String.upcase(pack["src_sha256"]) do
+          IO.puts(IO.ANSI.format(sha_status_text ++ [:green, "OK"]))
         else
-          IO.puts(IO.ANSI.format(md5_status_text ++ [:red, "BAD"]))
+          IO.puts(IO.ANSI.format(sha_status_text ++ [:red, "BAD"]))
 
-          raise "Bad MD5 for #{pack_name}"
+          raise "Bad SHA256 for #{pack_name}"
         end
 
         # The url specified in files should be in the same directory
@@ -137,7 +137,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do
           ])
         )
 
-        files = Tesla.get!(files_url).body |> Poison.decode!()
+        files = Tesla.get!(client(), files_url).body |> Jason.decode!()
 
         IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name]))
 
@@ -211,12 +211,12 @@ defmodule Mix.Tasks.Pleroma.Emoji do
         default_exts
       end
 
-    IO.puts("Downloading the pack and generating MD5")
+    IO.puts("Downloading the pack and generating SHA256")
 
-    binary_archive = Tesla.get!(src).body
-    archive_md5 = :crypto.hash(:md5, binary_archive) |> Base.encode16()
+    binary_archive = Tesla.get!(client(), src).body
+    archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16()
 
-    IO.puts("MD5 is #{archive_md5}")
+    IO.puts("SHA256 is #{archive_sha}")
 
     pack_json = %{
       name => %{
@@ -224,7 +224,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do
         homepage: homepage,
         description: description,
         src: src,
-        src_md5: archive_md5,
+        src_sha256: archive_sha,
         files: files_name
       }
     }
@@ -239,7 +239,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do
 
     emoji_map = Pleroma.Emoji.make_shortcode_to_file_map(tmp_pack_dir, exts)
 
-    File.write!(files_name, Poison.encode!(emoji_map, pretty: true))
+    File.write!(files_name, Jason.encode!(emoji_map, pretty: true))
 
     IO.puts("""
 
@@ -248,11 +248,11 @@ defmodule Mix.Tasks.Pleroma.Emoji do
     """)
 
     if File.exists?("index.json") do
-      existing_data = File.read!("index.json") |> Poison.decode!()
+      existing_data = File.read!("index.json") |> Jason.decode!()
 
       File.write!(
         "index.json",
-        Poison.encode!(
+        Jason.encode!(
           Map.merge(
             existing_data,
             pack_json
@@ -263,16 +263,16 @@ defmodule Mix.Tasks.Pleroma.Emoji do
 
       IO.puts("index.json file has been update with the #{name} pack")
     else
-      File.write!("index.json", Poison.encode!(pack_json, pretty: true))
+      File.write!("index.json", Jason.encode!(pack_json, pretty: true))
 
       IO.puts("index.json has been created with the #{name} pack")
     end
   end
 
   defp fetch_manifest(from) do
-    Poison.decode!(
+    Jason.decode!(
       if String.starts_with?(from, "http") do
-        Tesla.get!(from).body
+        Tesla.get!(client(), from).body
       else
         File.read!(from)
       end
@@ -290,4 +290,12 @@ defmodule Mix.Tasks.Pleroma.Emoji do
       ]
     )
   end
+
+  defp client do
+    middleware = [
+      {Tesla.Middleware.FollowRedirects, [max_redirects: 3]}
+    ]
+
+    Tesla.client(middleware)
+  end
 end