From d4cde716d442356ef66a65d05d7d15c6b3dbabb2 Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Thu, 30 Jul 2020 17:57:20 +0200
Subject: [PATCH 1/2] Fix redirections on WebFinger

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 lib/federation/web_finger/web_finger.ex | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/federation/web_finger/web_finger.ex b/lib/federation/web_finger/web_finger.ex
index 84b496a40..97f5b2b51 100644
--- a/lib/federation/web_finger/web_finger.ex
+++ b/lib/federation/web_finger/web_finger.ex
@@ -18,8 +18,10 @@ defmodule Mobilizon.Federation.WebFinger do
   require Logger
 
   @http_options [
-    follow_redirect: true,
-    ssl: [{:versions, [:"tlsv1.2"]}]
+    adapter: [
+      follow_redirect: true,
+      ssl: [{:versions, [:"tlsv1.2"]}]
+    ]
   ]
 
   def host_meta do

From d268a16c4f55f4bb37a5281368ceed21597e578d Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Thu, 30 Jul 2020 17:57:32 +0200
Subject: [PATCH 2/2] Fix trying to create signatures for remote actors

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 lib/federation/activity_pub/transmogrifier.ex |  6 +-----
 lib/federation/http_signatures/signature.ex   |  9 +++++++--
 lib/mobilizon/actors/actors.ex                | 10 +++++++---
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/federation/activity_pub/transmogrifier.ex b/lib/federation/activity_pub/transmogrifier.ex
index 29338dc02..f197514af 100644
--- a/lib/federation/activity_pub/transmogrifier.ex
+++ b/lib/federation/activity_pub/transmogrifier.ex
@@ -257,11 +257,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
          {:member, true} <-
            {:member, Actors.is_member?(object_data.creator_id, object_data.actor_id)},
          {:ok, %Activity{} = activity, %Resource{} = resource} <-
-           ActivityPub.create(:resource, object_data, false),
-         %Actor{type: :Group, id: group_id} = group <-
-           Actors.get_group_by_members_url(group_url),
-         announce_id <- "#{object_url}/announces/#{group_id}",
-         {:ok, _activity, _resource} <- ActivityPub.announce(group, object, announce_id) do
+           ActivityPub.create(:resource, object_data, false) do
       {:ok, activity, resource}
     else
       {:existing_resource, %Resource{} = resource} ->
diff --git a/lib/federation/http_signatures/signature.ex b/lib/federation/http_signatures/signature.ex
index 3cdc10dcf..bab2b14d7 100644
--- a/lib/federation/http_signatures/signature.ex
+++ b/lib/federation/http_signatures/signature.ex
@@ -93,8 +93,8 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
     end
   end
 
-  def sign(%Actor{keys: keys} = actor, headers) do
-    Logger.debug("Signing on behalf of #{actor.url}")
+  def sign(%Actor{domain: domain, keys: keys} = actor, headers) when is_nil(domain) do
+    Logger.debug("Signing a payload on behalf of #{actor.url}")
     Logger.debug("headers")
     Logger.debug(inspect(headers))
 
@@ -103,6 +103,11 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
     end
   end
 
+  def sign(%Actor{url: url}, _) do
+    Logger.error("Can't do a signature on remote actor #{url}")
+    raise ArgumentError, message: "Can't do a signature on remote actor #{url}"
+  end
+
   def generate_date_header, do: generate_date_header(NaiveDateTime.utc_now())
 
   def generate_date_header(%NaiveDateTime{} = date) do
diff --git a/lib/mobilizon/actors/actors.ex b/lib/mobilizon/actors/actors.ex
index 57118cc16..de3e5ab42 100644
--- a/lib/mobilizon/actors/actors.ex
+++ b/lib/mobilizon/actors/actors.ex
@@ -966,7 +966,9 @@ defmodule Mobilizon.Actors do
          # Check if followed has blocked follower
          {:already_following, nil} <- {:already_following, is_following(follower, followed)} do
       Logger.info(
-        "Making #{follower.preferred_username} follow #{followed.preferred_username} " <>
+        "Making #{Actor.preferred_username_and_domain(follower)} follow #{
+          Actor.preferred_username_and_domain(followed)
+        } " <>
           "(approved: #{approved})"
       )
 
@@ -979,11 +981,13 @@ defmodule Mobilizon.Actors do
     else
       {:already_following, %Follower{}} ->
         {:error, :already_following,
-         "Could not follow actor: you are already following #{followed.preferred_username}"}
+         "Could not follow actor: you are already following #{
+           Actor.preferred_username_and_domain(followed)
+         }"}
 
       {:suspended, _} ->
         {:error, :suspended,
-         "Could not follow actor: #{followed.preferred_username} has been suspended"}
+         "Could not follow actor: #{Actor.preferred_username_and_domain(followed)} has been suspended"}
     end
   end