@@ -23,7 +23,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |||
- **Breaking:** Configuration: A setting to explicitly disable the mailer was added, defaulting to true, if you are using a mailer add `config :pleroma, Pleroma.Emails.Mailer, enabled: true` to your config | |||
- **Breaking:** Configuration: `/media/` is now removed when `base_url` is configured, append `/media/` to your `base_url` config to keep the old behaviour if desired | |||
- **Breaking:** `/api/pleroma/notifications/read` is moved to `/api/v1/pleroma/notifications/read` and now supports `max_id` and responds with Mastodon API entities. | |||
- **Breaking:** `/api/pleroma/admin/users/invite_token` now uses `POST`, changed accepted params and returns full invite in json instead of only token string. | |||
- Configuration: added `config/description.exs`, from which `docs/config.md` is generated | |||
- Configuration: OpenGraph and TwitterCard providers enabled by default | |||
- Configuration: Filter.AnonymizeFilename added ability to retain file extension with custom text | |||
- Mastodon API: `pleroma.thread_muted` key in the Status entity | |||
- Federation: Return 403 errors when trying to request pages from a user's follower/following collections if they have `hide_followers`/`hide_follows` set | |||
- NodeInfo: Return `skipThreadContainment` in `metadata` for the `skip_thread_containment` option | |||
- NodeInfo: Return `mailerEnabled` in `metadata` | |||
@@ -226,13 +226,25 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret | |||
### Get an account registration invite token | |||
- Methods: `GET` | |||
- Methods: `POST` | |||
- Params: | |||
- *optional* `invite` => [ | |||
- *optional* `max_use` (integer) | |||
- *optional* `expires_at` (date string e.g. "2019-04-07") | |||
] | |||
- Response: invite token (base64 string) | |||
- Response: | |||
```json | |||
{ | |||
"id": integer, | |||
"token": string, | |||
"used": boolean, | |||
"expires_at": date, | |||
"uses": integer, | |||
"max_use": integer, | |||
"invite_type": string (possible values: `one_time`, `reusable`, `date_limited`, `reusable_date_limited`) | |||
} | |||
``` | |||
## `/api/pleroma/admin/users/invites` | |||
@@ -402,11 +402,21 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do | |||
@doc "Get a account registeration invite token (base64 string)" | |||
def get_invite_token(conn, params) do | |||
options = params["invite"] || %{} | |||
{:ok, invite} = UserInviteToken.create_invite(options) | |||
opts = %{} | |||
conn | |||
|> json(invite.token) | |||
opts = | |||
if params["max_use"], | |||
do: Map.put(opts, :max_use, params["max_use"]), | |||
else: opts | |||
opts = | |||
if params["expires_at"], | |||
do: Map.put(opts, :expires_at, params["expires_at"]), | |||
else: opts | |||
{:ok, invite} = UserInviteToken.create_invite(opts) | |||
json(conn, AccountView.render("invite.json", %{invite: invite})) | |||
end | |||
@doc "Get list of created invites" | |||
@@ -180,7 +180,7 @@ defmodule Pleroma.Web.Router do | |||
post("/relay", AdminAPIController, :relay_follow) | |||
delete("/relay", AdminAPIController, :relay_unfollow) | |||
get("/users/invite_token", AdminAPIController, :get_invite_token) | |||
post("/users/invite_token", AdminAPIController, :get_invite_token) | |||
get("/users/invites", AdminAPIController, :invites) | |||
post("/users/revoke_invite", AdminAPIController, :revoke_invite) | |||
post("/users/email_invite", AdminAPIController, :email_invite) | |||
@@ -574,18 +574,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
end | |||
end | |||
test "/api/pleroma/admin/users/invite_token" do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> put_req_header("accept", "application/json") | |||
|> get("/api/pleroma/admin/users/invite_token") | |||
assert conn.status == 200 | |||
end | |||
test "/api/pleroma/admin/users/:nickname/password_reset" do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
user = insert(:user) | |||
@@ -1064,7 +1052,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
"@#{admin.nickname} deactivated user @#{user.nickname}" | |||
end | |||
describe "GET /api/pleroma/admin/users/invite_token" do | |||
describe "POST /api/pleroma/admin/users/invite_token" do | |||
setup do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
@@ -1076,10 +1064,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
end | |||
test "without options", %{conn: conn} do | |||
conn = get(conn, "/api/pleroma/admin/users/invite_token") | |||
conn = post(conn, "/api/pleroma/admin/users/invite_token") | |||
token = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(token) | |||
invite_json = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(invite_json["token"]) | |||
refute invite.used | |||
refute invite.expires_at | |||
refute invite.max_use | |||
@@ -1088,12 +1076,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
test "with expires_at", %{conn: conn} do | |||
conn = | |||
get(conn, "/api/pleroma/admin/users/invite_token", %{ | |||
"invite" => %{"expires_at" => Date.to_string(Date.utc_today())} | |||
post(conn, "/api/pleroma/admin/users/invite_token", %{ | |||
"expires_at" => Date.to_string(Date.utc_today()) | |||
}) | |||
token = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(token) | |||
invite_json = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(invite_json["token"]) | |||
refute invite.used | |||
assert invite.expires_at == Date.utc_today() | |||
@@ -1102,13 +1090,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
end | |||
test "with max_use", %{conn: conn} do | |||
conn = | |||
get(conn, "/api/pleroma/admin/users/invite_token", %{ | |||
"invite" => %{"max_use" => 150} | |||
}) | |||
conn = post(conn, "/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) | |||
token = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(token) | |||
invite_json = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(invite_json["token"]) | |||
refute invite.used | |||
refute invite.expires_at | |||
assert invite.max_use == 150 | |||
@@ -1117,12 +1102,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
test "with max use and expires_at", %{conn: conn} do | |||
conn = | |||
get(conn, "/api/pleroma/admin/users/invite_token", %{ | |||
"invite" => %{"max_use" => 150, "expires_at" => Date.to_string(Date.utc_today())} | |||
post(conn, "/api/pleroma/admin/users/invite_token", %{ | |||
"max_use" => 150, | |||
"expires_at" => Date.to_string(Date.utc_today()) | |||
}) | |||
token = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(token) | |||
invite_json = json_response(conn, 200) | |||
invite = UserInviteToken.find_by_token!(invite_json["token"]) | |||
refute invite.used | |||
assert invite.expires_at == Date.utc_today() | |||
assert invite.max_use == 150 | |||