Merge branch 'support/bugfix_272' into 'develop'
[akkoma] / lib / pleroma / plugs / user_fetcher_plug.ex
1 defmodule Pleroma.Plugs.UserFetcherPlug do
2 import Plug.Conn
3 alias Pleroma.Repo
4 alias Pleroma.User
5
6 def init(options) do
7 options
8 end
9
10 def call(conn, _options) do
11 with %{auth_credentials: %{username: username}} <- conn.assigns,
12 {:ok, %User{} = user} <- user_fetcher(username) do
13 conn
14 |> assign(:auth_user, user)
15 else
16 _ -> conn
17 end
18 end
19
20 defp user_fetcher(username_or_email) do
21 {
22 :ok,
23 cond do
24 # First, try logging in as if it was a name
25 user = Repo.get_by(User, %{nickname: username_or_email}) ->
26 user
27
28 # If we get nil, we try using it as an email
29 user = Repo.get_by(User, %{email: username_or_email}) ->
30 user
31 end
32 }
33 end
34 end