akkoma/lib/pleroma/plugs/user_fetcher_plug.ex

40 lines
919 B
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
2018-12-31 08:41:47 -07:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
2018-09-05 09:44:38 -06:00
defmodule Pleroma.Plugs.UserFetcherPlug do
2019-02-09 08:16:26 -07:00
alias Pleroma.Repo
alias Pleroma.User
2019-02-06 12:20:02 -07:00
2018-09-05 09:44:38 -06:00
import Plug.Conn
def init(options) do
options
end
2018-12-09 02:12:48 -07:00
def call(conn, _options) do
2018-09-05 09:44:38 -06:00
with %{auth_credentials: %{username: username}} <- conn.assigns,
{:ok, %User{} = user} <- user_fetcher(username) do
conn
|> assign(:auth_user, user)
else
_ -> conn
end
end
defp user_fetcher(username_or_email) do
{
:ok,
cond do
# First, try logging in as if it was a name
user = Repo.get_by(User, %{nickname: username_or_email}) ->
user
# If we get nil, we try using it as an email
user = Repo.get_by(User, %{email: username_or_email}) ->
user
end
}
end
end