Rework the URL encoding so it is a public function: Pleroma.HTTP.encode_url/1

This commit is contained in:
Mark Felder 2025-07-30 17:07:22 -07:00
commit 49ba6c8865
2 changed files with 28 additions and 28 deletions

View file

@ -131,4 +131,31 @@ defmodule Pleroma.HTTP do
defp default_middleware, defp default_middleware,
do: [Tesla.Middleware.FollowRedirects, Pleroma.Tesla.Middleware.EncodeUrl] 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 end

View file

@ -17,7 +17,7 @@ defmodule Pleroma.Tesla.Middleware.EncodeUrl do
@impl Tesla.Middleware @impl Tesla.Middleware
def call(%Tesla.Env{url: url} = env, next, _) do def call(%Tesla.Env{url: url} = env, next, _) do
url = encode_url(url) url = Pleroma.HTTP.encode_url(url)
env = %{env | url: url} env = %{env | url: url}
@ -26,31 +26,4 @@ defmodule Pleroma.Tesla.Middleware.EncodeUrl do
err -> err err -> err
end end
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 end