Merge branch 'recipients-query-speedup' into 'develop'
[akkoma] / lib / pleroma / signature.ex
index 1e7c9ae86ffa1ecd3580712c8f27288e16a9f8c4..7006eb2c05ec6db2d16eac147ea69e67f2636597 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Signature do
@@ -21,12 +21,21 @@ defmodule Pleroma.Signature do
         uri
       end
 
-    URI.to_string(uri)
+    case uri do
+      %URI{scheme: scheme} when scheme in ["https", "http"] ->
+        {:ok, URI.to_string(uri)}
+
+      _ ->
+        case Pleroma.Web.WebFinger.finger(URI.to_string(uri)) do
+          %{"ap_id" => ap_id} -> {:ok, ap_id}
+          _ -> {:error, URI.to_string(uri)}
+        end
+    end
   end
 
   def fetch_public_key(conn) do
     with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn),
-         actor_id <- key_id_to_actor_id(kid),
+         {:ok, actor_id} <- key_id_to_actor_id(kid),
          {:ok, public_key} <- User.get_public_key_for_ap_id(actor_id) do
       {:ok, public_key}
     else
@@ -37,7 +46,7 @@ defmodule Pleroma.Signature do
 
   def refetch_public_key(conn) do
     with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn),
-         actor_id <- key_id_to_actor_id(kid),
+         {:ok, actor_id} <- key_id_to_actor_id(kid),
          {:ok, _user} <- ActivityPub.make_user_from_ap_id(actor_id),
          {:ok, public_key} <- User.get_public_key_for_ap_id(actor_id) do
       {:ok, public_key}