Fix password reset for non-test env

Fixes `Plug.Conn.NotSentError` that causes a 5xx error in response
instead of 404 and 400.

Fixes pattern matching error caused by different response format
in test and non-test env: `Pleroma.Emails.Mailer.deliver_async` returns
:ok when PleromaJobQueue is enabled and `{:ok, _}` when it's disabled.
In tests, it's disabled.
This commit is contained in:
Eugenij 2019-07-17 18:09:31 +00:00 committed by kaniini
parent ce73d5f6a5
commit 4bf2bb9cff
5 changed files with 10 additions and 8 deletions

View File

@ -1826,10 +1826,10 @@ def password_reset(conn, params) do
|> json("") |> json("")
else else
{:error, "unknown user"} -> {:error, "unknown user"} ->
put_status(conn, :not_found) send_resp(conn, :not_found, "")
{:error, _} -> {:error, _} ->
put_status(conn, :bad_request) send_resp(conn, :bad_request, "")
end end
end end

View File

@ -221,6 +221,8 @@ def password_reset(nickname_or_email) do
user user
|> UserEmail.password_reset_email(token_record.token) |> UserEmail.password_reset_email(token_record.token)
|> Mailer.deliver_async() |> Mailer.deliver_async()
{:ok, :enqueued}
else else
false -> false ->
{:error, "bad user identifier"} {:error, "bad user identifier"}

View File

@ -440,10 +440,10 @@ def password_reset(conn, params) do
json_response(conn, :no_content, "") json_response(conn, :no_content, "")
else else
{:error, "unknown user"} -> {:error, "unknown user"} ->
put_status(conn, :not_found) send_resp(conn, :not_found, "")
{:error, _} -> {:error, _} ->
put_status(conn, :bad_request) send_resp(conn, :bad_request, "")
end end
end end

View File

@ -3849,14 +3849,14 @@ test "it sends an email to user", %{user: user} do
test "it returns 404 when user is not found", %{conn: conn, user: user} do test "it returns 404 when user is not found", %{conn: conn, user: user} do
conn = post(conn, "/auth/password?email=nonexisting_#{user.email}") conn = post(conn, "/auth/password?email=nonexisting_#{user.email}")
assert conn.status == 404 assert conn.status == 404
refute conn.resp_body assert conn.resp_body == ""
end end
test "it returns 400 when user is not local", %{conn: conn, user: user} do test "it returns 400 when user is not local", %{conn: conn, user: user} do
{:ok, user} = Repo.update(Changeset.change(user, local: false)) {:ok, user} = Repo.update(Changeset.change(user, local: false))
conn = post(conn, "/auth/password?email=#{user.email}") conn = post(conn, "/auth/password?email=#{user.email}")
assert conn.status == 400 assert conn.status == 400
refute conn.resp_body assert conn.resp_body == ""
end end
end end
end end

View File

@ -1119,14 +1119,14 @@ test "it sends an email to user", %{user: user} do
test "it returns 404 when user is not found", %{conn: conn, user: user} do test "it returns 404 when user is not found", %{conn: conn, user: user} do
conn = post(conn, "/api/account/password_reset?email=nonexisting_#{user.email}") conn = post(conn, "/api/account/password_reset?email=nonexisting_#{user.email}")
assert conn.status == 404 assert conn.status == 404
refute conn.resp_body assert conn.resp_body == ""
end end
test "it returns 400 when user is not local", %{conn: conn, user: user} do test "it returns 400 when user is not local", %{conn: conn, user: user} do
{:ok, user} = Repo.update(Changeset.change(user, local: false)) {:ok, user} = Repo.update(Changeset.change(user, local: false))
conn = post(conn, "/api/account/password_reset?email=#{user.email}") conn = post(conn, "/api/account/password_reset?email=#{user.email}")
assert conn.status == 400 assert conn.status == 400
refute conn.resp_body assert conn.resp_body == ""
end end
end end