Browse Source

Add UserFetcherPlug.

tags/v0.9.9
lain 5 years ago
parent
commit
faf5347748
2 changed files with 71 additions and 0 deletions
  1. +34
    -0
      lib/pleroma/plugs/user_fetcher_plug.ex
  2. +37
    -0
      test/plugs/user_fetcher_plug_test.exs

+ 34
- 0
lib/pleroma/plugs/user_fetcher_plug.ex View File

@@ -0,0 +1,34 @@
defmodule Pleroma.Plugs.UserFetcherPlug do
import Plug.Conn
alias Pleroma.Repo
alias Pleroma.User

def init(options) do
options
end

def call(conn, options) do
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

+ 37
- 0
test/plugs/user_fetcher_plug_test.exs View File

@@ -0,0 +1,37 @@
defmodule Pleroma.Plugs.UserFetcherPlugTest do
use Pleroma.Web.ConnCase, async: true

alias Pleroma.Plugs.UserFetcherPlug
import Pleroma.Factory

setup do
user = insert(:user)
%{user: user}
end

test "if an auth_credentials assign is present, it tries to fetch the user and assigns it", %{
conn: conn,
user: user
} do
conn =
conn
|> assign(:auth_credentials, %{
username: user.nickname,
password: nil
})

conn =
conn
|> UserFetcherPlug.call(%{})

assert conn.assigns[:auth_user] == user
end

test "without a credential assign it doesn't do anything", %{conn: conn} do
ret_conn =
conn
|> UserFetcherPlug.call(%{})

assert conn == ret_conn
end
end

Loading…
Cancel
Save