logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: 6b8c5e12dfe759ac1286e81e72ad7f8727e01386
parent e3ea311cd594d4f0bc8c4e05ca8eb1eee18ae6be
Author: marcin mikołajczak <git@mkljczk.pl>
Date:   Thu, 26 Oct 2023 23:30:38 +0200

Add contact account to InstanceView

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>

Diffstat:

Achangelog.d/instance-contact-account.add2++
Mconfig/description.exs6++++++
Mlib/pleroma/web/mastodon_api/views/instance_view.ex17+++++++++++++++++
Mtest/pleroma/web/mastodon_api/controllers/instance_controller_test.exs12++++++++++++
4 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/changelog.d/instance-contact-account.add b/changelog.d/instance-contact-account.add @@ -0,0 +1 @@ +Add contact account to InstanceView +\ No newline at end of file diff --git a/config/description.exs b/config/description.exs @@ -567,6 +567,12 @@ config :pleroma, :config_description, [ ] }, %{ + key: :contact_username, + type: :string, + description: "Instance owner username", + suggestions: ["admin"] + }, + %{ key: :limit, type: :integer, description: "Posts character limit (CW/Subject included in the counter)", diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -30,6 +30,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do languages: Keyword.get(instance, :languages, ["en"]), registrations: Keyword.get(instance, :registrations_open), approval_required: Keyword.get(instance, :account_approval_required), + contact_account: contact_account(Keyword.get(instance, :contact_username)), # Extra (not present in Mastodon): max_toot_chars: Keyword.get(instance, :limit), max_media_attachments: Keyword.get(instance, :max_media_attachments), @@ -141,4 +142,20 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do value_length: Config.get([:instance, :account_field_value_length]) } end + + defp contact_account(nil), do: nil + + defp contact_account("@" <> username) do + contact_account(username) + end + + defp contact_account(username) do + user = Pleroma.User.get_cached_by_nickname(username) + + if user do + Pleroma.Web.MastodonAPI.AccountView.render("show.json", %{user: user, for: nil}) + else + nil + end + end end diff --git a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs @@ -106,4 +106,16 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do |> get("/api/v1/instance") |> json_response_and_validate_schema(200) end + + test "get instance contact information", %{conn: conn} do + user = insert(:user, %{local: true}) + + clear_config([:instance, :contact_username], user.nickname) + + conn = get(conn, "/api/v1/instance") + + assert result = json_response_and_validate_schema(conn, 200) + + assert result["contact_account"]["id"] == user.id + end end