Update legacy passwords automatically.
authorlain <lain@soykaf.club>
Wed, 5 Sep 2018 20:30:14 +0000 (22:30 +0200)
committerlain <lain@soykaf.club>
Wed, 5 Sep 2018 20:30:14 +0000 (22:30 +0200)
lib/pleroma/plugs/legacy_authentication_plug.ex
test/plugs/legacy_authentication_plug_test.exs

index 48c0aba8825989aed635062d62439c7e4046e209..d22c1a647e7d771c09f2d7e982cc1b732084a43b 100644 (file)
@@ -17,11 +17,15 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlug do
         } = conn,
         _
       ) do
-    if :crypt.crypt(password, password_hash) == password_hash do
+    with ^password_hash <- :crypt.crypt(password, password_hash),
+         {:ok, user} <-
+           User.reset_password(auth_user, %{password: password, password_confirmation: password}) do
       conn
-      |> assign(:user, auth_user)
+      |> assign(:auth_user, user)
+      |> assign(:user, user)
     else
-      conn
+      _ ->
+        conn
     end
   end
 
index 90783f628aeb2cacbd3da8dff2da42644934c5a0..117810722aecd8a83d463371039c54b1ae7bc159 100644 (file)
@@ -4,6 +4,8 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do
   alias Pleroma.Plugs.LegacyAuthenticationPlug
   alias Pleroma.User
 
+  import Mock
+
   setup do
     # password is "password"
     user = %User{
@@ -30,19 +32,27 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do
     assert ret_conn == conn
   end
 
-  test "it authenticates the auth_user if present and password is correct", %{
-    conn: conn,
-    user: user
-  } do
+  test "it authenticates the auth_user if present and password is correct and resets the password",
+       %{
+         conn: conn,
+         user: user
+       } do
     conn =
       conn
       |> assign(:auth_credentials, %{username: "dude", password: "password"})
       |> assign(:auth_user, user)
 
     conn =
-      conn
-      |> LegacyAuthenticationPlug.call(%{})
+      with_mock User,
+        reset_password: fn user, %{password: password, password_confirmation: password} ->
+          send(self, :reset_password)
+          {:ok, user}
+        end do
+        conn
+        |> LegacyAuthenticationPlug.call(%{})
+      end
 
+    assert_received :reset_password
     assert conn.assigns.user == user
   end