Attachment parsing, better magic key fetching.
[akkoma] / lib / pleroma / user.ex
index 58f89a915487ee8408a9b59ad0be6834eb6fea5f..01cbfe796379d864b997796a3879e731095ed4c9 100644 (file)
@@ -3,6 +3,7 @@ defmodule Pleroma.User do
   import Ecto.Changeset
   import Ecto.Query
   alias Pleroma.{Repo, User, Activity, Object}
+  alias Pleroma.Web.OStatus
 
   schema "users" do
     field :bio, :string
@@ -120,7 +121,7 @@ defmodule Pleroma.User do
 
   def get_cached_by_nickname(nickname) do
     key = "nickname:#{nickname}"
-    Cachex.get!(:user_cache, key, fallback: fn(_) -> Repo.get_by(User, nickname: nickname) end)
+    Cachex.get!(:user_cache, key, fallback: fn(_) -> get_or_fetch_by_nickname(nickname) end)
   end
 
   def get_by_nickname(nickname) do
@@ -131,4 +132,16 @@ defmodule Pleroma.User do
     key = "user_info:#{user.id}"
     Cachex.get!(:user_cache, key, fallback: fn(_) -> user_info(user) end)
   end
+
+  def get_or_fetch_by_nickname(nickname) do
+    with %User{} = user <- get_by_nickname(nickname)  do
+      user
+    else _e ->
+      with [nick, domain] <- String.split(nickname, "@"),
+           {:ok, user} <- OStatus.make_user(nickname) do
+        user
+      else _e -> nil
+      end
+    end
+  end
 end