Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma] / lib / pleroma / web / auth / authenticator.ex
index 89d88af3299a018763d0dd81aee19f4810f3e47c..b4db312fb87388620cef4dd8f49336de190e8fce 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.Auth.Authenticator do
@@ -13,21 +13,20 @@ defmodule Pleroma.Web.Auth.Authenticator do
     )
   end
 
-  @callback get_user(Plug.Conn.t(), Map.t()) :: {:ok, User.t()} | {:error, any()}
-  def get_user(plug, params), do: implementation().get_user(plug, params)
+  @callback get_user(Plug.Conn.t()) :: {:ok, User.t()} | {:error, any()}
+  def get_user(plug), do: implementation().get_user(plug)
 
-  @callback create_from_registration(Plug.Conn.t(), Map.t(), Registration.t()) ::
+  @callback create_from_registration(Plug.Conn.t(), Registration.t()) ::
               {:ok, User.t()} | {:error, any()}
-  def create_from_registration(plug, params, registration),
-    do: implementation().create_from_registration(plug, params, registration)
+  def create_from_registration(plug, registration),
+    do: implementation().create_from_registration(plug, registration)
 
-  @callback get_registration(Plug.Conn.t(), Map.t()) ::
-              {:ok, Registration.t()} | {:error, any()}
-  def get_registration(plug, params),
-    do: implementation().get_registration(plug, params)
+  @callback get_registration(Plug.Conn.t()) :: {:ok, Registration.t()} | {:error, any()}
+  def get_registration(plug), do: implementation().get_registration(plug)
 
   @callback handle_error(Plug.Conn.t(), any()) :: any()
-  def handle_error(plug, error), do: implementation().handle_error(plug, error)
+  def handle_error(plug, error),
+    do: implementation().handle_error(plug, error)
 
   @callback auth_template() :: String.t() | nil
   def auth_template do
@@ -42,4 +41,30 @@ defmodule Pleroma.Web.Auth.Authenticator do
     implementation().oauth_consumer_template() ||
       Pleroma.Config.get([:auth, :oauth_consumer_template], "consumer.html")
   end
+
+  @doc "Gets user by nickname or email for auth."
+  @spec fetch_user(String.t()) :: User.t() | nil
+  def fetch_user(name) do
+    User.get_by_nickname_or_email(name)
+  end
+
+  # Gets name and password from conn
+  #
+  @spec fetch_credentials(Plug.Conn.t() | map()) ::
+          {:ok, {name :: any, password :: any}} | {:error, :invalid_credentials}
+  def fetch_credentials(%Plug.Conn{params: params} = _),
+    do: fetch_credentials(params)
+
+  def fetch_credentials(params) do
+    case params do
+      %{"authorization" => %{"name" => name, "password" => password}} ->
+        {:ok, {name, password}}
+
+      %{"grant_type" => "password", "username" => name, "password" => password} ->
+        {:ok, {name, password}}
+
+      _ ->
+        {:error, :invalid_credentials}
+    end
+  end
 end