Add AdminAPI.InviteView
authorEgor Kislitsyn <egor@kislitsyn.com>
Tue, 26 May 2020 11:21:33 +0000 (15:21 +0400)
committerEgor Kislitsyn <egor@kislitsyn.com>
Tue, 26 May 2020 11:21:33 +0000 (15:21 +0400)
lib/pleroma/web/admin_api/controllers/invite_controller.ex [moved from lib/pleroma/web/admin_api/controllers/invite_token_controller.ex with 79% similarity]
lib/pleroma/web/admin_api/views/account_view.ex
lib/pleroma/web/admin_api/views/invite_view.ex [new file with mode: 0644]
lib/pleroma/web/api_spec/operations/admin/invite_operation.ex [moved from lib/pleroma/web/api_spec/operations/admin/invite_token_operation.ex with 93% similarity]
lib/pleroma/web/router.ex
test/web/admin_api/controllers/invite_controller_test.exs [moved from test/web/admin_api/controllers/invite_token_controller_test.exs with 99% similarity]

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 a09966e5c2fd16034d3fb87c03b155ed6abc5165..7d169b8d29eeb9efa3ab16da562b89c3d26880f2 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # 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 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do
     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 @@ defmodule Pleroma.Web.AdminAPI.InviteTokenController do
 
       {:invites_enabled, _} ->
         {:error, "To send invites you need to set the `invites_enabled` option to true."}
+
+      {:error, error} ->
+        {:error, error}
     end
   end
 end
index 46dadb5ee546084698ab92819800e35c66ea76bf..120159527abefe8259b52ff4624a09ecacd23137 100644 (file)
@@ -80,24 +80,6 @@ defmodule Pleroma.Web.AdminAPI.AccountView 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 (file)
index 0000000..f93cb69
--- /dev/null
@@ -0,0 +1,25 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# 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
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 0f7403f26ac6f03385a287d3c5433e724e12999b..4ae44fff6a8334d0c0c6f53d9bc018a9ec07babe 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # 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 @@ defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation 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 @@ defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation 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 @@ defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation 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 @@ defmodule Pleroma.Web.ApiSpec.Admin.InviteTokenOperation 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(
index fe36f01896784fa4f6dcb68e9a5be1e985f97883..9b7c7ee3d6f2b0ba266e3bdd04d366fc5a5f568d 100644 (file)
@@ -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)
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 cb486f4d17dddad0847e4cad0deb6672190c460c..ab186c5e793e91decb21e7f8db67ff742d9acd6e 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # 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