diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index bdeb2171e..9a0868d33 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -131,4 +131,31 @@ defmodule Pleroma.HTTP do defp default_middleware, do: [Tesla.Middleware.FollowRedirects, Pleroma.Tesla.Middleware.EncodeUrl] + + def encode_url(url) when is_binary(url) do + URI.parse(url) + |> then(fn parsed -> + path = encode_path(parsed.path) + query = encode_query(parsed.query) + + %{parsed | path: path, query: query} + end) + |> URI.to_string() + end + + defp encode_path(nil), do: nil + + defp encode_path(path) when is_binary(path) do + path + |> URI.decode() + |> URI.encode() + end + + defp encode_query(nil), do: nil + + defp encode_query(query) when is_binary(query) do + query + |> URI.decode_query() + |> URI.encode_query() + end end diff --git a/lib/pleroma/tesla/middleware/encode_url.ex b/lib/pleroma/tesla/middleware/encode_url.ex index ee74c41a1..32c559d3b 100644 --- a/lib/pleroma/tesla/middleware/encode_url.ex +++ b/lib/pleroma/tesla/middleware/encode_url.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Tesla.Middleware.EncodeUrl do @impl Tesla.Middleware def call(%Tesla.Env{url: url} = env, next, _) do - url = encode_url(url) + url = Pleroma.HTTP.encode_url(url) env = %{env | url: url} @@ -26,31 +26,4 @@ defmodule Pleroma.Tesla.Middleware.EncodeUrl do err -> err end end - - defp encode_url(url) when is_binary(url) do - URI.parse(url) - |> then(fn parsed -> - path = encode_path(parsed.path) - query = encode_query(parsed.query) - - %{parsed | path: path, query: query} - end) - |> URI.to_string() - end - - defp encode_path(nil), do: nil - - defp encode_path(path) when is_binary(path) do - path - |> URI.decode() - |> URI.encode() - end - - defp encode_query(nil), do: nil - - defp encode_query(query) when is_binary(query) do - query - |> URI.decode_query() - |> URI.encode_query() - end end