1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Plugs.AuthenticationPlug do
11 def init(options), do: options
13 def checkpw(password, "$6" <> _ = password_hash) do
14 :crypt.crypt(password, password_hash) == password_hash
17 def checkpw(password, "$pbkdf2" <> _ = password_hash) do
18 Pbkdf2.checkpw(password, password_hash)
21 def checkpw(_password, _password_hash) do
22 Logger.error("Password hash not recognized")
26 def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
31 auth_user: %{password_hash: password_hash} = auth_user,
32 auth_credentials: %{password: password}
37 if Pbkdf2.checkpw(password, password_hash) do
39 |> assign(:user, auth_user)
45 def call(%{assigns: %{auth_credentials: %{password: _}}} = conn, _) do
46 Pbkdf2.dummy_checkpw()
50 def call(conn, _), do: conn