Fix admin api.
authorlain <lain@soykaf.club>
Sat, 1 Dec 2018 08:03:16 +0000 (09:03 +0100)
committerlain <lain@soykaf.club>
Sat, 1 Dec 2018 08:03:16 +0000 (09:03 +0100)
lib/pleroma/plugs/user_is_admin_plug.ex
lib/pleroma/user/info.ex
lib/pleroma/web/admin_api/admin_api_controller.ex
test/plugs/user_is_admin_plug_test.exs
test/web/admin_api/admin_api_controller_test.exs

index 5312f1499c103e36b5f8de2e223e07146391c684..cf22ce5d064602926db32e0820ea636f250472bb 100644 (file)
@@ -6,7 +6,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlug do
     options
   end
 
-  def call(%{assigns: %{user: %User{info: %{"is_admin" => true}}}} = conn, _) do
+  def call(%{assigns: %{user: %User{info: %{is_admin: true}}}} = conn, _) do
     conn
   end
 
index 4e2c5472d3789375de4a2fddda61952efd857101..a5ce6010fecf1c5ccc7610a656bf7525c15f4c35 100644 (file)
@@ -16,6 +16,7 @@ defmodule Pleroma.User.Info do
     field(:no_rich_text, :boolean, default: false)
     field(:ap_enabled, :boolean, default: false)
     field(:is_moderator, :boolean, default: false)
+    field(:is_admin, :boolean, default: false)
     field(:keys, :string, default: nil)
     field(:settings, :map, default: nil)
     field(:magic_key, :string, default: nil)
@@ -134,4 +135,12 @@ defmodule Pleroma.User.Info do
     |> cast(params, [:source_data])
     |> validate_required([:source_data])
   end
+
+  def admin_api_update(info, params) do
+    info
+    |> cast(params, [
+      :is_moderator,
+      :is_admin
+    ])
+  end
 end
index bcdb4ba37abdaa0934130f853d746a362ecdc110..2c67d9cdaf3011d25255fb6b9dd83594a80ea452 100644 (file)
@@ -45,21 +45,29 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
     user = User.get_by_nickname(nickname)
 
     info =
-      user.info
+      %{}
       |> Map.put("is_" <> permission_group, true)
 
-    cng = User.info_changeset(user, %{info: info})
+    info_cng = User.Info.admin_api_update(user.info, info)
+
+    cng =
+      Ecto.Changeset.change(user)
+      |> Ecto.Changeset.put_embed(:info, info_cng)
+
     {:ok, user} = User.update_and_set_cache(cng)
 
     conn
-    |> json(user.info)
+    |> json(info)
   end
 
   def right_get(conn, %{"nickname" => nickname}) do
     user = User.get_by_nickname(nickname)
 
     conn
-    |> json(user.info)
+    |> json(%{
+      is_moderator: user.info.is_moderator,
+      is_admin: user.info.is_admin
+    })
   end
 
   def right_add(conn, _) do
@@ -84,14 +92,19 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
       user = User.get_by_nickname(nickname)
 
       info =
-        user.info
+        %{}
         |> Map.put("is_" <> permission_group, false)
 
-      cng = User.info_changeset(user, %{info: info})
+      info_cng = User.Info.admin_api_update(user.info, info)
+
+      cng =
+        Ecto.Changeset.change(user)
+        |> Ecto.Changeset.put_embed(:info, info_cng)
+
       {:ok, user} = User.update_and_set_cache(cng)
 
       conn
-      |> json(user.info)
+      |> json(info)
     end
   end
 
index ddf9eb13956cca5650002295bda12307cda32c38..031b2f466a2987e596f4264d9b648a1359acab65 100644 (file)
@@ -5,7 +5,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
   import Pleroma.Factory
 
   test "accepts a user that is admin", %{conn: conn} do
-    user = insert(:user, info: %{"is_admin" => true})
+    user = insert(:user, info: %{is_admin: true})
 
     conn =
       build_conn()
index fa0cb71bf0f34d28f71b8864918e9a5270a9851e..9634ad7c5c6bdb70a47d19f961c83fffa9b5136c 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
   describe "/api/pleroma/admin/user" do
     test "Delete" do
-      admin = insert(:user, info: %{"is_admin" => true})
+      admin = insert(:user, info: %{is_admin: true})
       user = insert(:user)
 
       conn =
@@ -21,7 +21,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
 
     test "Create" do
-      admin = insert(:user, info: %{"is_admin" => true})
+      admin = insert(:user, info: %{is_admin: true})
 
       conn =
         build_conn()
@@ -39,7 +39,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
   describe "/api/pleroma/admin/permission_group" do
     test "GET is giving user_info" do
-      admin = insert(:user, info: %{"is_admin" => true})
+      admin = insert(:user, info: %{is_admin: true})
 
       conn =
         build_conn()
@@ -47,33 +47,30 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
         |> put_req_header("accept", "application/json")
         |> get("/api/pleroma/admin/permission_group/#{admin.nickname}")
 
-      assert json_response(conn, 200) == admin.info
+      assert json_response(conn, 200) == %{
+               "is_admin" => true,
+               "is_moderator" => false
+             }
     end
 
     test "/:right POST, can add to a permission group" do
-      admin = insert(:user, info: %{"is_admin" => true})
+      admin = insert(:user, info: %{is_admin: true})
       user = insert(:user)
 
-      user_info =
-        user.info
-        |> Map.put("is_admin", true)
-
       conn =
         build_conn()
         |> assign(:user, admin)
         |> put_req_header("accept", "application/json")
         |> post("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
 
-      assert json_response(conn, 200) == user_info
+      assert json_response(conn, 200) == %{
+               "is_admin" => true
+             }
     end
 
     test "/:right DELETE, can remove from a permission group" do
-      admin = insert(:user, info: %{"is_admin" => true})
-      user = insert(:user, info: %{"is_admin" => true})
-
-      user_info =
-        user.info
-        |> Map.put("is_admin", false)
+      admin = insert(:user, info: %{is_admin: true})
+      user = insert(:user, info: %{is_admin: true})
 
       conn =
         build_conn()
@@ -81,12 +78,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
         |> put_req_header("accept", "application/json")
         |> delete("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
 
-      assert json_response(conn, 200) == user_info
+      assert json_response(conn, 200) == %{
+               "is_admin" => false
+             }
     end
   end
 
   test "/api/pleroma/admin/invite_token" do
-    admin = insert(:user, info: %{"is_admin" => true})
+    admin = insert(:user, info: %{is_admin: true})
 
     conn =
       build_conn()
@@ -98,8 +97,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   test "/api/pleroma/admin/password_reset" do
-    admin = insert(:user, info: %{"is_admin" => true})
-    user = insert(:user, info: %{"is_admin" => true})
+    admin = insert(:user, info: %{is_admin: true})
+    user = insert(:user)
 
     conn =
       build_conn()