Преглед на файлове

get-packs for local generated pack

fix/http_secury_plug
Alexander Strizhakov преди 4 години
родител
ревизия
ae05792d2a
No known key found for this signature in database GPG Key ID: 22896A53AEF1381
променени са 4 файла, в които са добавени 47 реда и са изтрити 17 реда
  1. +21
    -17
      lib/mix/tasks/pleroma/emoji.ex
  2. +3
    -0
      test/instance_static/local_pack/files.json
  3. +10
    -0
      test/instance_static/local_pack/manifest.json
  4. +13
    -0
      test/tasks/emoji_test.exs

+ 21
- 17
lib/mix/tasks/pleroma/emoji.ex Целия файл

@@ -15,7 +15,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do
{options, [], []} = parse_global_opts(args)

url_or_path = options[:manifest] || default_manifest()
manifest = fetch_manifest(url_or_path)
manifest = fetch_and_decode(url_or_path)

Enum.each(manifest, fn {name, info} ->
to_print = [
@@ -42,12 +42,12 @@ defmodule Mix.Tasks.Pleroma.Emoji do

url_or_path = options[:manifest] || default_manifest()

manifest = fetch_manifest(url_or_path)
manifest = fetch_and_decode(url_or_path)

for pack_name <- pack_names do
if Map.has_key?(manifest, pack_name) do
pack = manifest[pack_name]
src_url = pack["src"]
src = pack["src"]

IO.puts(
IO.ANSI.format([
@@ -57,11 +57,11 @@ defmodule Mix.Tasks.Pleroma.Emoji do
:normal,
" from ",
:underline,
src_url
src
])
)

binary_archive = Tesla.get!(client(), src_url).body
{:ok, binary_archive} = fetch(src)
archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16()

sha_status_text = ["SHA256 of ", :bright, pack_name, :normal, " source file is ", :bright]
@@ -74,8 +74,8 @@ defmodule Mix.Tasks.Pleroma.Emoji do
raise "Bad SHA256 for #{pack_name}"
end

# The url specified in files should be in the same directory
files_url =
# The location specified in files should be in the same directory
files_loc =
url_or_path
|> Path.dirname()
|> Path.join(pack["files"])
@@ -88,11 +88,11 @@ defmodule Mix.Tasks.Pleroma.Emoji do
:normal,
" from ",
:underline,
files_url
files_loc
])
)

files = Tesla.get!(client(), files_url).body |> Jason.decode!()
files = fetch_and_decode(files_loc)

IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name]))

@@ -237,16 +237,20 @@ defmodule Mix.Tasks.Pleroma.Emoji do
end
end

defp fetch_manifest(from) do
Jason.decode!(
if String.starts_with?(from, "http") do
Tesla.get!(client(), from).body
else
File.read!(from)
end
)
defp fetch_and_decode(from) do
with {:ok, json} <- fetch(from) do
Jason.decode!(json)
end
end

defp fetch("http" <> _ = from) do
with {:ok, %{body: body}} <- Tesla.get(client(), from) do
{:ok, body}
end
end

defp fetch(path), do: File.read(path)

defp parse_global_opts(args) do
OptionParser.parse(
args,


+ 3
- 0
test/instance_static/local_pack/files.json Целия файл

@@ -0,0 +1,3 @@
{
"blank": "blank.png"
}

+ 10
- 0
test/instance_static/local_pack/manifest.json Целия файл

@@ -0,0 +1,10 @@
{
"local": {
"src_sha256": "384025A1AC6314473863A11AC7AB38A12C01B851A3F82359B89B4D4211D3291D",
"src": "test/fixtures/emoji/packs/blank.png.zip",
"license": "Apache 2.0",
"homepage": "https://example.com",
"files": "files.json",
"description": "Some local pack"
}
}

+ 13
- 0
test/tasks/emoji_test.exs Целия файл

@@ -73,6 +73,19 @@ defmodule Mix.Tasks.Pleroma.EmojiTest do
on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end)
end

test "install local emoji pack" do
assert capture_io(fn ->
Emoji.run([
"get-packs",
"local",
"--manifest",
"test/instance_static/local_pack/manifest.json"
])
end) =~ "Writing pack.json for"

on_exit(fn -> File.rm_rf!("test/instance_static/emoji/local") end)
end

test "pack not found" do
mock(fn
%{


Loading…
Отказ
Запис