webfinger: refactor webfinger() functions
authorWilliam Pitcock <nenolod@dereferenced.org>
Wed, 13 Jun 2018 06:37:02 +0000 (06:37 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Wed, 13 Jun 2018 06:42:27 +0000 (06:42 +0000)
- remove code duplication
- move user lookup to parent with statement
- tighten both user lookup by nickname and activitypub URI with a type constraint

lib/pleroma/web/web_finger/web_finger.ex

index e7ee810f9993100320c3727fdae84a4adc904d3d..9f554d286daf6da1879baf811f8381345e74cdb3 100644 (file)
@@ -25,35 +25,17 @@ defmodule Pleroma.Web.WebFinger do
     |> XmlBuilder.to_doc()
   end
 
-  def webfinger(resource, "JSON") do
+  def webfinger(resource, fmt) when fmt in ["XML", "JSON"] do
     host = Pleroma.Web.Endpoint.host()
     regex = ~r/(acct:)?(?<username>\w+)@#{host}/
 
-    with %{"username" => username} <- Regex.named_captures(regex, resource) do
-      user = User.get_by_nickname(username)
-      {:ok, represent_user(user, "JSON")}
+    with %{"username" => username} <- Regex.named_captures(regex, resource),
+         %User{} = user <- User.get_by_nickname(username) do
+      {:ok, represent_user(user, fmt)}
     else
       _e ->
-        with user when not is_nil(user) <- User.get_cached_by_ap_id(resource) do
-          {:ok, represent_user(user, "JSON")}
-        else
-          _e ->
-            {:error, "Couldn't find user"}
-        end
-    end
-  end
-
-  def webfinger(resource, "XML") do
-    host = Pleroma.Web.Endpoint.host()
-    regex = ~r/(acct:)?(?<username>\w+)@#{host}/
-
-    with %{"username" => username} <- Regex.named_captures(regex, resource) do
-      user = User.get_by_nickname(username)
-      {:ok, represent_user(user, "XML")}
-    else
-      _e ->
-        with user when not is_nil(user) <- User.get_cached_by_ap_id(resource) do
-          {:ok, represent_user(user, "XML")}
+        with %User{} = user <- User.get_cached_by_ap_id(resource) do
+          {:ok, represent_user(user, fmt)}
         else
           _e ->
             {:error, "Couldn't find user"}