summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFloatingGhost <hannah@coffee-and-dreams.uk>2022-07-18 15:21:27 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2022-11-27 04:54:18 +0100
commit747311f623190cac9e345e1db3568ed850495ac2 (patch)
treedd8c78ee88934da1113a83b0c0959ad31fd699f7 /lib
parent11d5ad24c5e316a9ba9f7de4c661d3af3b319c5c (diff)
downloadpleroma-747311f623190cac9e345e1db3568ed850495ac2.tar.gz
pleroma-747311f623190cac9e345e1db3568ed850495ac2.zip
fix resolution of GTS user keys
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/signature.ex23
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex
index 43ab569a4..a71a504b3 100644
--- a/lib/pleroma/signature.ex
+++ b/lib/pleroma/signature.ex
@@ -10,17 +10,14 @@ defmodule Pleroma.Signature do
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
+ @known_suffixes ["/publickey", "/main-key"]
+
def key_id_to_actor_id(key_id) do
uri =
- URI.parse(key_id)
+ key_id
+ |> URI.parse()
|> Map.put(:fragment, nil)
-
- uri =
- if not is_nil(uri.path) and String.ends_with?(uri.path, "/publickey") do
- Map.put(uri, :path, String.replace(uri.path, "/publickey", ""))
- else
- uri
- end
+ |> remove_suffix(@known_suffixes)
maybe_ap_id = URI.to_string(uri)
@@ -36,6 +33,16 @@ defmodule Pleroma.Signature do
end
end
+ defp remove_suffix(uri, [test | rest]) do
+ if not is_nil(uri.path) and String.ends_with?(uri.path, test) do
+ Map.put(uri, :path, String.replace(uri.path, test, ""))
+ else
+ remove_suffix(uri, rest)
+ end
+ end
+
+ defp remove_suffix(uri, []), do: uri
+
def fetch_public_key(conn) do
with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn),
{:ok, actor_id} <- key_id_to_actor_id(kid),