akkoma/lib/pleroma/web/admin_api/views/account_view.ex

108 lines
2.6 KiB
Elixir
Raw Normal View History

2019-02-28 14:43:09 +00:00
# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.AdminAPI.AccountView do
2019-02-28 14:43:09 +00:00
use Pleroma.Web, :view
alias Pleroma.HTML
alias Pleroma.User
2019-03-12 19:15:28 +00:00
alias Pleroma.User.Info
alias Pleroma.Web.AdminAPI.AccountView
alias Pleroma.Web.MediaProxy
2019-02-28 14:43:09 +00:00
def render("index.json", %{users: users, count: count, page_size: page_size}) do
%{
users: render_many(users, AccountView, "show.json", as: :user),
count: count,
page_size: page_size
}
end
def render("index.json", %{users: users}) do
%{
users: render_many(users, AccountView, "show.json", as: :user)
}
end
2019-02-28 14:43:09 +00:00
def render("show.json", %{user: user}) do
avatar = User.avatar_url(user) |> MediaProxy.url()
display_name = HTML.strip_tags(user.name || user.nickname)
2019-02-28 14:43:09 +00:00
%{
"id" => user.id,
"avatar" => avatar,
2019-02-28 14:43:09 +00:00
"nickname" => user.nickname,
"display_name" => display_name,
2019-03-12 19:15:28 +00:00
"deactivated" => user.info.deactivated,
2019-03-13 13:04:44 +00:00
"local" => user.local,
2019-03-13 22:52:24 +00:00
"roles" => Info.roles(user.info),
"tags" => user.tags || []
2019-02-28 14:43:09 +00:00
}
end
2019-04-06 13:25:19 +00:00
def render("invite.json", %{invite: invite}) do
%{
"id" => invite.id,
"token" => invite.token,
"used" => invite.used,
"expires_at" => invite.expires_at,
2019-04-06 13:25:19 +00:00
"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",
code: 200,
data: %{
nickname: user.nickname,
email: user.email
}
}
end
def render("create-error.json", %{changeset: %Ecto.Changeset{changes: changes, errors: errors}}) do
%{
type: "error",
code: 409,
error: parse_error(errors),
data: %{
nickname: Map.get(changes, :nickname),
email: Map.get(changes, :email)
}
}
end
defp parse_error([]), do: ""
defp parse_error(errors) do
## when nickname is duplicate ap_id constraint error is raised
nickname_error = Keyword.get(errors, :nickname) || Keyword.get(errors, :ap_id)
email_error = Keyword.get(errors, :email)
password_error = Keyword.get(errors, :password)
cond do
nickname_error ->
"nickname #{elem(nickname_error, 0)}"
email_error ->
"email #{elem(email_error, 0)}"
password_error ->
"password #{elem(password_error, 0)}"
true ->
""
end
end
2019-02-28 14:43:09 +00:00
end