diff --git a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_controller.ex
similarity index 79%
rename from lib/pleroma/web/admin_api/controllers/invite_token_controller.ex
rename to lib/pleroma/web/admin_api/controllers/invite_controller.ex
index a09966e5c..7d169b8d2 100644
--- a/lib/pleroma/web/admin_api/controllers/invite_token_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/invite_controller.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.AdminAPI.InviteTokenController do
+defmodule Pleroma.Web.AdminAPI.InviteController do
use Pleroma.Web, :controller
import Pleroma.Web.ControllerHelper, only: [json_response: 3]
@@ -10,7 +10,6 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do
alias Pleroma.Config
alias Pleroma.Plugs.OAuthScopesPlug
alias Pleroma.UserInviteToken
- alias Pleroma.Web.AdminAPI.AccountView
require Logger
@@ -24,33 +23,30 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do
action_fallback(Pleroma.Web.AdminAPI.FallbackController)
- defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InviteTokenOperation
+ defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.InviteOperation
@doc "Get list of created invites"
def index(conn, _params) do
invites = UserInviteToken.list_invites()
- conn
- |> put_view(AccountView)
- |> render("invites.json", %{invites: invites})
+ render(conn, "index.json", invites: invites)
end
@doc "Create an account registration invite token"
def create(%{body_params: params} = conn, _) do
{:ok, invite} = UserInviteToken.create_invite(params)
- json(conn, AccountView.render("invite.json", %{invite: invite}))
+ render(conn, "show.json", invite: invite)
end
@doc "Revokes invite by token"
def revoke(%{body_params: %{token: token}} = conn, _) do
with {:ok, invite} <- UserInviteToken.find_by_token(token),
{:ok, updated_invite} = UserInviteToken.update_invite(invite, %{used: true}) do
- conn
- |> put_view(AccountView)
- |> render("invite.json", %{invite: updated_invite})
+ render(conn, "show.json", invite: updated_invite)
else
nil -> {:error, :not_found}
+ error -> error
end
end
@@ -59,14 +55,14 @@ def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = con
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(
- user,
+ {:ok, _} <-
+ user
+ |> Pleroma.Emails.UserEmail.user_invitation_email(
invite_token,
email,
params[:name]
- ),
- {:ok, _} <- Pleroma.Emails.Mailer.deliver(email) do
+ )
+ |> Pleroma.Emails.Mailer.deliver() do
json_response(conn, :no_content, "")
else
{:registrations_open, _} ->
@@ -74,6 +70,9 @@ def email(%{assigns: %{user: user}, body_params: %{email: email} = params} = con
{:invites_enabled, _} ->
{:error, "To send invites you need to set the `invites_enabled` option to true."}
+
+ {:error, error} ->
+ {:error, error}
end
end
end
diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex
index 46dadb5ee..120159527 100644
--- a/lib/pleroma/web/admin_api/views/account_view.ex
+++ b/lib/pleroma/web/admin_api/views/account_view.ex
@@ -80,24 +80,6 @@ def render("show.json", %{user: user}) do
}
end
- def render("invite.json", %{invite: invite}) do
- %{
- "id" => invite.id,
- "token" => invite.token,
- "used" => invite.used,
- "expires_at" => invite.expires_at,
- "uses" => invite.uses,
- "max_use" => invite.max_use,
- "invite_type" => invite.invite_type
- }
- end
-
- def render("invites.json", %{invites: invites}) do
- %{
- invites: render_many(invites, AccountView, "invite.json", as: :invite)
- }
- end
-
def render("created.json", %{user: user}) do
%{
type: "success",
diff --git a/lib/pleroma/web/admin_api/views/invite_view.ex b/lib/pleroma/web/admin_api/views/invite_view.ex
new file mode 100644
index 000000000..f93cb6916
--- /dev/null
+++ b/lib/pleroma/web/admin_api/views/invite_view.ex
@@ -0,0 +1,25 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.AdminAPI.InviteView do
+ use Pleroma.Web, :view
+
+ def render("index.json", %{invites: invites}) do
+ %{
+ invites: render_many(invites, __MODULE__, "show.json", as: :invite)
+ }
+ end
+
+ def render("show.json", %{invite: invite}) do
+ %{
+ "id" => invite.id,
+ "token" => invite.token,
+ "used" => invite.used,
+ "expires_at" => invite.expires_at,
+ "uses" => invite.uses,
+ "max_use" => invite.max_use,
+ "invite_type" => invite.invite_type
+ }
+ end
+end
diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex
similarity index 93%
rename from lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex
rename to lib/pleroma/web/api_spec/operations/admin/invite_operation.ex
index 0f7403f26..4ae44fff6 100644
--- a/lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex
+++ b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation do
+defmodule Pleroma.Web.ApiSpec.Admin.InviteOperation do
alias OpenApiSpex.Operation
alias OpenApiSpex.Schema
alias Pleroma.Web.ApiSpec.Schemas.ApiError
@@ -18,7 +18,7 @@ def index_operation do
%Operation{
tags: ["Admin", "Invites"],
summary: "Get a list of generated invites",
- operationId: "AdminAPI.InviteTokenController.index",
+ operationId: "AdminAPI.InviteController.index",
security: [%{"oAuth" => ["read:invites"]}],
responses: %{
200 =>
@@ -49,7 +49,7 @@ def create_operation do
%Operation{
tags: ["Admin", "Invites"],
summary: "Create an account registration invite token",
- operationId: "AdminAPI.InviteTokenController.create",
+ operationId: "AdminAPI.InviteController.create",
security: [%{"oAuth" => ["write:invites"]}],
requestBody:
request_body("Parameters", %Schema{
@@ -69,7 +69,7 @@ def revoke_operation do
%Operation{
tags: ["Admin", "Invites"],
summary: "Revoke invite by token",
- operationId: "AdminAPI.InviteTokenController.revoke",
+ operationId: "AdminAPI.InviteController.revoke",
security: [%{"oAuth" => ["write:invites"]}],
requestBody:
request_body(
@@ -95,7 +95,7 @@ def email_operation do
%Operation{
tags: ["Admin", "Invites"],
summary: "Sends registration invite via email",
- operationId: "AdminAPI.InviteTokenController.email",
+ operationId: "AdminAPI.InviteController.email",
security: [%{"oAuth" => ["write:invites"]}],
requestBody:
request_body(
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index fe36f0189..9b7c7ee3d 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -164,10 +164,10 @@ defmodule Pleroma.Web.Router do
post("/relay", AdminAPIController, :relay_follow)
delete("/relay", AdminAPIController, :relay_unfollow)
- post("/users/invite_token", InviteTokenController, :create)
- get("/users/invites", InviteTokenController, :index)
- post("/users/revoke_invite", InviteTokenController, :revoke)
- post("/users/email_invite", InviteTokenController, :email)
+ post("/users/invite_token", InviteController, :create)
+ get("/users/invites", InviteController, :index)
+ post("/users/revoke_invite", InviteController, :revoke)
+ post("/users/email_invite", InviteController, :email)
get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset)
patch("/users/force_password_reset", AdminAPIController, :force_password_reset)
diff --git a/test/web/admin_api/controllers/invite_token_controller_test.exs b/test/web/admin_api/controllers/invite_controller_test.exs
similarity index 99%
rename from test/web/admin_api/controllers/invite_token_controller_test.exs
rename to test/web/admin_api/controllers/invite_controller_test.exs
index cb486f4d1..ab186c5e7 100644
--- a/test/web/admin_api/controllers/invite_token_controller_test.exs
+++ b/test/web/admin_api/controllers/invite_controller_test.exs
@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.AdminAPI.InviteTokenControllerTest do
+defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
use Pleroma.Web.ConnCase, async: true
import Pleroma.Factory