From d268a16c4f55f4bb37a5281368ceed21597e578d Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 30 Jul 2020 17:57:32 +0200 Subject: [PATCH] Fix trying to create signatures for remote actors Signed-off-by: Thomas Citharel --- 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 29338dc0..f197514a 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 3cdc10dc..bab2b14d 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 57118cc1..de3e5ab4 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