Browse Source

error improvement for email_invite endpoint

contrib/munin-healthcheck
Alexander Strizhakov 4 years ago
parent
commit
2d64500a9d
No known key found for this signature in database GPG Key ID: 22896A53AEF1381
3 changed files with 64 additions and 5 deletions
  1. +13
    -0
      docs/API/admin_api.md
  2. +14
    -3
      lib/pleroma/web/admin_api/admin_api_controller.ex
  3. +37
    -2
      test/web/admin_api/admin_api_controller_test.exs

+ 13
- 0
docs/API/admin_api.md View File

@@ -392,6 +392,19 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
- `email`
- `name`, optional

- Response:
- On success: `204`, empty response
- On failure:
- 400 Bad Request, JSON:

```json
[
{
`error` // error message
}
]
```

## `GET /api/pleroma/admin/users/:nickname/password_reset`

### Get a password reset token for a given nickname


+ 14
- 3
lib/pleroma/web/admin_api/admin_api_controller.ex View File

@@ -576,9 +576,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do

@doc "Sends registration invite via email"
def email_invite(%{assigns: %{user: user}} = conn, %{"email" => email} = params) do
with true <-
Config.get([:instance, :invites_enabled]) &&
!Config.get([:instance, :registrations_open]),
with {_, false} <- {:registrations_open, Config.get([:instance, :registrations_open])},
{_, true} <- {:invites_enabled, Config.get([:instance, :invites_enabled])},
{:ok, invite_token} <- UserInviteToken.create_invite(),
email <-
Pleroma.Emails.UserEmail.user_invitation_email(
@@ -589,6 +588,18 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
),
{:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do
json_response(conn, :no_content, "")
else
{:registrations_open, _} ->
errors(
conn,
{:error, "To send invites you need set `registrations_open` option to false."}
)

{:invites_enabled, _} ->
errors(
conn,
{:error, "To send invites you need set `invites_enabled` option to true."}
)
end
end



+ 37
- 2
test/web/admin_api/admin_api_controller_test.exs View File

@@ -625,6 +625,39 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do

assert json_response(conn, :forbidden)
end

test "email with +", %{conn: conn, admin: admin} do
recipient_email = "foo+bar@baz.com"

conn
|> put_req_header("content-type", "application/json;charset=utf-8")
|> post("/api/pleroma/admin/users/email_invite", %{email: recipient_email})
|> json_response(:no_content)

token_record =
Pleroma.UserInviteToken
|> Repo.all()
|> List.last()

assert token_record
refute token_record.used

notify_email = Config.get([:instance, :notify_email])
instance_name = Config.get([:instance, :name])

email =
Pleroma.Emails.UserEmail.user_invitation_email(
admin,
token_record,
recipient_email
)

Swoosh.TestAssertions.assert_email_sent(
from: {instance_name, notify_email},
to: recipient_email,
html_body: email.html_body
)
end
end

describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do
@@ -637,7 +670,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do

conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD")

assert json_response(conn, :internal_server_error)
assert json_response(conn, :bad_request) ==
"To send invites you need set `invites_enabled` option to true."
end

test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do
@@ -646,7 +680,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do

conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD")

assert json_response(conn, :internal_server_error)
assert json_response(conn, :bad_request) ==
"To send invites you need set `registrations_open` option to false."
end
end



Loading…
Cancel
Save