|
|
@ -10,17 +10,14 @@ defmodule Pleroma.Signature do
|
|
|
|
alias Pleroma.User
|
|
|
|
alias Pleroma.User
|
|
|
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
|
|
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@known_suffixes ["/publickey", "/main-key"]
|
|
|
|
|
|
|
|
|
|
|
|
def key_id_to_actor_id(key_id) do
|
|
|
|
def key_id_to_actor_id(key_id) do
|
|
|
|
uri =
|
|
|
|
uri =
|
|
|
|
URI.parse(key_id)
|
|
|
|
key_id
|
|
|
|
|
|
|
|
|> URI.parse()
|
|
|
|
|> Map.put(:fragment, nil)
|
|
|
|
|> Map.put(:fragment, nil)
|
|
|
|
|
|
|
|
|> remove_suffix(@known_suffixes)
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
maybe_ap_id = URI.to_string(uri)
|
|
|
|
maybe_ap_id = URI.to_string(uri)
|
|
|
|
|
|
|
|
|
|
|
@ -36,6 +33,16 @@ defmodule Pleroma.Signature do
|
|
|
|
end
|
|
|
|
end
|
|
|
|
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
|
|
|
|
def fetch_public_key(conn) do
|
|
|
|
with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn),
|
|
|
|
with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn),
|
|
|
|
{:ok, actor_id} <- key_id_to_actor_id(kid),
|
|
|
|
{:ok, actor_id} <- key_id_to_actor_id(kid),
|
|
|
|