Merge remote-tracking branch 'origin/develop' into global-status-expiration
[akkoma] / lib / pleroma / plugs / authentication_plug.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Plugs.AuthenticationPlug do
6 alias Comeonin.Pbkdf2
7 import Plug.Conn
8 alias Pleroma.User
9 require Logger
10
11 def init(options), do: options
12
13 def checkpw(password, "$6" <> _ = password_hash) do
14 :crypt.crypt(password, password_hash) == password_hash
15 end
16
17 def checkpw(password, "$pbkdf2" <> _ = password_hash) do
18 Pbkdf2.checkpw(password, password_hash)
19 end
20
21 def checkpw(_password, _password_hash) do
22 Logger.error("Password hash not recognized")
23 false
24 end
25
26 def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
27
28 def call(
29 %{
30 assigns: %{
31 auth_user: %{password_hash: password_hash} = auth_user,
32 auth_credentials: %{password: password}
33 }
34 } = conn,
35 _
36 ) do
37 if Pbkdf2.checkpw(password, password_hash) do
38 conn
39 |> assign(:user, auth_user)
40 else
41 conn
42 end
43 end
44
45 def call(%{assigns: %{auth_credentials: %{password: _}}} = conn, _) do
46 Pbkdf2.dummy_checkpw()
47 conn
48 end
49
50 def call(conn, _), do: conn
51 end