diff --git a/README.md b/README.md index 664b8b475..da528e1a2 100644 --- a/README.md +++ b/README.md @@ -50,3 +50,12 @@ Logs can be watched by using `journalctl -fu pleroma.service` ### Standalone/run by other means Run `mix phx.server` in repository's root, it will output log into stdout/stderr + +### Using an upstream proxy for federation + +Add the following to your `dev.secret.exs` or `prod.secret.exs` if you want to proxify all http requests that pleroma makes to an upstream proxy server: + + config :pleroma, :http, + proxy_url: "127.0.0.1:8123" + +This is useful for running pleroma inside Tor or i2p. diff --git a/config/config.exs b/config/config.exs index 503ce8d64..e71d5e5a0 100644 --- a/config/config.exs +++ b/config/config.exs @@ -32,7 +32,7 @@ config :pleroma, :websub, Pleroma.Web.Websub config :pleroma, :ostatus, Pleroma.Web.OStatus -config :pleroma, :httpoison, HTTPoison +config :pleroma, :httpoison, Pleroma.HTTP version = with {version, 0} <- System.cmd("git", ["rev-parse", "HEAD"]) do "Pleroma #{String.trim(version)}" @@ -40,6 +40,10 @@ _ -> "Pleroma dev" end +# Configures http settings, upstream proxy etc. +config :pleroma, :http, + proxy_url: nil + config :pleroma, :instance, version: version, name: "Pleroma", diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex new file mode 100644 index 000000000..8b8a82353 --- /dev/null +++ b/lib/pleroma/http/http.ex @@ -0,0 +1,14 @@ + +defmodule Pleroma.HTTP do + use HTTPoison.Base + + def process_request_options(options) do + config = Application.get_env(:pleroma, :http, []) + proxy = Keyword.get(config, :proxy_url, nil) + case proxy do + nil -> options + _ -> options ++ [proxy: proxy] + end + end + +end diff --git a/lib/pleroma/web/media_proxy/controller.ex b/lib/pleroma/web/media_proxy/controller.ex index 560a65353..9327e7253 100644 --- a/lib/pleroma/web/media_proxy/controller.ex +++ b/lib/pleroma/web/media_proxy/controller.ex @@ -2,6 +2,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do use Pleroma.Web, :controller require Logger + @httpoison Application.get_env(:pleroma, :httpoison) + @max_body_length 25 * 1048576 @cache_control %{ @@ -29,7 +31,7 @@ def remote(conn, %{"sig" => sig, "url" => url}) do defp proxy_request(link) do headers = [{"user-agent", "Pleroma/MediaProxy; #{Pleroma.Web.base_url()} <#{Application.get_env(:pleroma, :instance)[:email]}>"}] - options = [:insecure, {:follow_redirect, true}] + options = @httpoison.process_request_options([:insecure, {:follow_redirect, true}]) with \ {:ok, 200, headers, client} <- :hackney.request(:get, link, headers, "", options), headers = Enum.into(headers, Map.new),