Merge branch 'features/admin-api-user-views' into 'develop'
authorkaniini <nenolod@gmail.com>
Mon, 31 Dec 2018 15:49:34 +0000 (15:49 +0000)
committerkaniini <nenolod@gmail.com>
Mon, 31 Dec 2018 15:49:34 +0000 (15:49 +0000)
User/Account views: Add rights.admin

Closes #472

See merge request pleroma/pleroma!589

1  2 
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/twitter_api/views/user_view.ex

index 11fcd1c111aadea62bf9552bfc01cbee27f385f3,a4b17e4f815c0fc93627409d0943bd733a2319c0..95d0f849c0a34e0a3fac19d02710e06f47617b2e
@@@ -1,5 -1,5 +1,5 @@@
  # Pleroma: A lightweight social networking server
 -# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
 +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
  # SPDX-License-Identifier: AGPL-3.0-only
  
  defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
      end
    end
  
 -  # TODO: Use proper query
    def blocks(%{assigns: %{user: user}} = conn, _) do
 -    with blocked_users <- user.info.blocks || [],
 -         accounts <- Enum.map(blocked_users, fn ap_id -> User.get_cached_by_ap_id(ap_id) end) do
 -      res = AccountView.render("accounts.json", users: accounts, for: user, as: :user)
 +    with blocked_accounts <- User.blocked_users(user) do
 +      res = AccountView.render("accounts.json", users: blocked_accounts, for: user, as: :user)
        json(conn, res)
      end
    end
              max_toot_chars: limit
            },
            rights: %{
-             delete_others_notice: !!user.info.is_moderator
+             delete_others_notice: !!user.info.is_moderator,
+             admin: !!user.info.is_admin
            },
            compose: %{
              me: "#{user.id}",
index 40db0b1178cbb1636e96aa11ac3ba92a84995c86,c04d143c83da5c5acbefb7a573761300bf58f2de..a8cf83613872915f2f87381da30d89dc9a585adb
@@@ -1,5 -1,5 +1,5 @@@
  # Pleroma: A lightweight social networking server
 -# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
 +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
  # SPDX-License-Identifier: AGPL-3.0-only
  
  defmodule Pleroma.Web.TwitterAPI.UserView do
    end
  
    def render("index.json", %{users: users, for: user}) do
 -    render_many(users, Pleroma.Web.TwitterAPI.UserView, "user.json", for: user)
 +    users
 +    |> render_many(Pleroma.Web.TwitterAPI.UserView, "user.json", for: user)
 +    |> Enum.filter(&Enum.any?/1)
    end
  
    def render("user.json", %{user: user = %User{}} = assigns) do
 +    if User.visible_for?(user, assigns[:for]),
 +      do: do_render("user.json", assigns),
 +      else: %{}
 +  end
 +
 +  def render("short.json", %{
 +        user: %User{
 +          nickname: nickname,
 +          id: id,
 +          ap_id: ap_id,
 +          name: name
 +        }
 +      }) do
 +    %{
 +      "fullname" => name,
 +      "id" => id,
 +      "ostatus_uri" => ap_id,
 +      "profile_url" => ap_id,
 +      "screen_name" => nickname
 +    }
 +  end
 +
 +  defp do_render("user.json", %{user: user = %User{}} = assigns) do
 +    for_user = assigns[:for]
      image = User.avatar_url(user) |> MediaProxy.url()
  
      {following, follows_you, statusnet_blocking} =
 -      if assigns[:for] do
 +      if for_user do
          {
 -          User.following?(assigns[:for], user),
 -          User.following?(user, assigns[:for]),
 -          User.blocks?(assigns[:for], user)
 +          User.following?(for_user, user),
 +          User.following?(user, for_user),
 +          User.blocks?(for_user, user)
          }
        else
          {false, false, false}
@@@ -77,7 -51,7 +77,7 @@@
      data = %{
        "created_at" => user.inserted_at |> Utils.format_naive_asctime(),
        "description" => HTML.strip_tags((user.bio || "") |> String.replace("<br>", "\n")),
 -      "description_html" => HTML.filter_tags(user.bio, User.html_filter_policy(assigns[:for])),
 +      "description_html" => HTML.filter_tags(user.bio, User.html_filter_policy(for_user)),
        "favourites_count" => 0,
        "followers_count" => user_info[:follower_count],
        "following" => following,
@@@ -96,7 -70,8 +96,8 @@@
        "profile_image_url_profile_size" => image,
        "profile_image_url_original" => image,
        "rights" => %{
-         "delete_others_notice" => !!user.info.is_moderator
+         "delete_others_notice" => !!user.info.is_moderator,
+         "admin" => !!user.info.is_admin
        },
        "screen_name" => user.nickname,
        "statuses_count" => user_info[:note_count],
      end
    end
  
 -  def render("short.json", %{
 -        user: %User{
 -          nickname: nickname,
 -          id: id,
 -          ap_id: ap_id,
 -          name: name
 -        }
 -      }) do
 -    %{
 -      "fullname" => name,
 -      "id" => id,
 -      "ostatus_uri" => ap_id,
 -      "profile_url" => ap_id,
 -      "screen_name" => nickname
 -    }
 -  end
 -
    defp image_url(%{"url" => [%{"href" => href} | _]}), do: href
    defp image_url(_), do: nil