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 15:41:47 +00:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
2018-09-05 15:44:38 +00:00
defmodule Pleroma.Plugs.UserFetcherPlug do
2019-02-09 15:16:26 +00:00
alias Pleroma.Repo
alias Pleroma.User
2019-02-06 19:20:02 +00:00
2018-09-05 15:44:38 +00:00
import Plug.Conn
def init(options) do
options
end
2018-12-09 09:12:48 +00:00
def call(conn, _options) do
2018-09-05 15:44:38 +00: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