Kaynağa Gözat

Disallow password resets for deactivated accounts.

Ensure all responses to password reset events are identical.
message-debug-mode
Mark Felder 3 yıl önce
ebeveyn
işleme
cbf7f0e029
4 değiştirilmiş dosya ile 24 ekleme ve 28 silme
  1. +1
    -0
      CHANGELOG.md
  2. +5
    -11
      lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
  3. +2
    -11
      lib/pleroma/web/twitter_api/twitter_api.ex
  4. +16
    -6
      test/web/mastodon_api/controllers/auth_controller_test.exs

+ 1
- 0
CHANGELOG.md Dosyayı Görüntüle

@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Mastodon API: Search parameter `following` now correctly returns the followings rather than the followers
- Mastodon API: Timelines hanging for (`number of posts with links * rich media timeout`) in the worst case.
Reduced to just rich media timeout.
- Password resets no longer processed for deactivated accounts

## [2.1.0] - 2020-08-28



+ 5
- 11
lib/pleroma/web/mastodon_api/controllers/auth_controller.ex Dosyayı Görüntüle

@@ -59,17 +59,11 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do
def password_reset(conn, params) do
nickname_or_email = params["email"] || params["nickname"]

with {:ok, _} <- TwitterAPI.password_reset(nickname_or_email) do
conn
|> put_status(:no_content)
|> json("")
else
{:error, "unknown user"} ->
send_resp(conn, :not_found, "")

{:error, _} ->
send_resp(conn, :bad_request, "")
end
TwitterAPI.password_reset(nickname_or_email)

conn
|> put_status(:no_content)
|> json("")
end

defp local_mastodon_root_path(conn) do


+ 2
- 11
lib/pleroma/web/twitter_api/twitter_api.ex Dosyayı Görüntüle

@@ -72,7 +72,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do

def password_reset(nickname_or_email) do
with true <- is_binary(nickname_or_email),
%User{local: true, email: email} = user when is_binary(email) <-
%User{local: true, email: email, deactivated: false} = user when is_binary(email) <-
User.get_by_nickname_or_email(nickname_or_email),
{:ok, token_record} <- Pleroma.PasswordResetToken.create_token(user) do
user
@@ -81,17 +81,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do

{:ok, :enqueued}
else
false ->
{:error, "bad user identifier"}

%User{local: true, email: nil} ->
_ ->
{:ok, :noop}

%User{local: false} ->
{:error, "remote user"}

nil ->
{:error, "unknown user"}
end
end



+ 16
- 6
test/web/mastodon_api/controllers/auth_controller_test.exs Dosyayı Görüntüle

@@ -122,17 +122,27 @@ defmodule Pleroma.Web.MastodonAPI.AuthControllerTest do
{:ok, user: user}
end

test "it returns 404 when user is not found", %{conn: conn, user: user} do
test "it returns 204 when user is not found", %{conn: conn, user: user} do
conn = post(conn, "/auth/password?email=nonexisting_#{user.email}")
assert conn.status == 404
assert conn.resp_body == ""

assert conn
|> json_response(:no_content)
end

test "it returns 400 when user is not local", %{conn: conn, user: user} do
test "it returns 204 when user is not local", %{conn: conn, user: user} do
{:ok, user} = Repo.update(Ecto.Changeset.change(user, local: false))
conn = post(conn, "/auth/password?email=#{user.email}")
assert conn.status == 400
assert conn.resp_body == ""

assert conn
|> json_response(:no_content)
end

test "it returns 204 when user is deactivated", %{conn: conn, user: user} do
{:ok, user} = Repo.update(Ecto.Changeset.change(user, deactivated: true, local: true))
conn = post(conn, "/auth/password?email=#{user.email}")

assert conn
|> json_response(:no_content)
end
end



Yükleniyor…
İptal
Kaydet