From cbf772f28250d93016d7a80f69fd5f6418783699 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 9 Apr 2021 10:52:40 +0200 Subject: [PATCH] Add a check for valid URI before fetching it in AP Client Signed-off-by: Thomas Citharel --- lib/federation/activity_pub/fetcher.ex | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/federation/activity_pub/fetcher.ex b/lib/federation/activity_pub/fetcher.ex index e23c7d163..58fcf7937 100644 --- a/lib/federation/activity_pub/fetcher.ex +++ b/lib/federation/activity_pub/fetcher.ex @@ -17,7 +17,8 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do def fetch(url, options \\ []) do on_behalf_of = Keyword.get(options, :on_behalf_of, Relay.get_actor()) - with date <- Signature.generate_date_header(), + with false <- address_invalid(url), + date <- Signature.generate_date_header(), headers <- [{:Accept, "application/activity+json"}] |> maybe_date_fetch(date) @@ -90,4 +91,12 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do {:error, err} end end + + @spec address_invalid(String.t()) :: false | {:error, :invalid_url} + defp address_invalid(address) do + with %URI{host: host, scheme: scheme} <- URI.parse(address), + true <- is_nil(host) or is_nil(scheme) do + {:error, :invalid_url} + end + end end