Extract instance actions from `MastodonAPIController` to `InstanceController` See merge request pleroma/pleroma!1760stable
commit
433f2c0f68
@ -0,0 +1,17 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.InstanceController do
|
||||||
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
|
@doc "GET /api/v1/instance"
|
||||||
|
def show(conn, _params) do
|
||||||
|
render(conn, "show.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc "GET /api/v1/instance/peers"
|
||||||
|
def peers(conn, _params) do
|
||||||
|
json(conn, Pleroma.Stats.get_peers())
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,35 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.InstanceView do
|
||||||
|
use Pleroma.Web, :view
|
||||||
|
|
||||||
|
@mastodon_api_level "2.7.2"
|
||||||
|
|
||||||
|
def render("show.json", _) do
|
||||||
|
instance = Pleroma.Config.get(:instance)
|
||||||
|
|
||||||
|
%{
|
||||||
|
uri: Pleroma.Web.base_url(),
|
||||||
|
title: Keyword.get(instance, :name),
|
||||||
|
description: Keyword.get(instance, :description),
|
||||||
|
version: "#{@mastodon_api_level} (compatible; #{Pleroma.Application.named_version()})",
|
||||||
|
email: Keyword.get(instance, :email),
|
||||||
|
urls: %{
|
||||||
|
streaming_api: Pleroma.Web.Endpoint.websocket_url()
|
||||||
|
},
|
||||||
|
stats: Pleroma.Stats.get_stats(),
|
||||||
|
thumbnail: Pleroma.Web.base_url() <> "/instance/thumbnail.jpeg",
|
||||||
|
languages: ["en"],
|
||||||
|
registrations: Keyword.get(instance, :registrations_open),
|
||||||
|
# Extra (not present in Mastodon):
|
||||||
|
max_toot_chars: Keyword.get(instance, :limit),
|
||||||
|
poll_limits: Keyword.get(instance, :poll_limits),
|
||||||
|
upload_limit: Keyword.get(instance, :upload_limit),
|
||||||
|
avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit),
|
||||||
|
background_upload_limit: Keyword.get(instance, :background_upload_limit),
|
||||||
|
banner_upload_limit: Keyword.get(instance, :banner_upload_limit)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,84 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do
|
||||||
|
use Pleroma.Web.ConnCase
|
||||||
|
|
||||||
|
alias Pleroma.User
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "get instance information", %{conn: conn} do
|
||||||
|
conn = get(conn, "/api/v1/instance")
|
||||||
|
assert result = json_response(conn, 200)
|
||||||
|
|
||||||
|
email = Pleroma.Config.get([:instance, :email])
|
||||||
|
# Note: not checking for "max_toot_chars" since it's optional
|
||||||
|
assert %{
|
||||||
|
"uri" => _,
|
||||||
|
"title" => _,
|
||||||
|
"description" => _,
|
||||||
|
"version" => _,
|
||||||
|
"email" => from_config_email,
|
||||||
|
"urls" => %{
|
||||||
|
"streaming_api" => _
|
||||||
|
},
|
||||||
|
"stats" => _,
|
||||||
|
"thumbnail" => _,
|
||||||
|
"languages" => _,
|
||||||
|
"registrations" => _,
|
||||||
|
"poll_limits" => _,
|
||||||
|
"upload_limit" => _,
|
||||||
|
"avatar_upload_limit" => _,
|
||||||
|
"background_upload_limit" => _,
|
||||||
|
"banner_upload_limit" => _
|
||||||
|
} = result
|
||||||
|
|
||||||
|
assert email == from_config_email
|
||||||
|
end
|
||||||
|
|
||||||
|
test "get instance stats", %{conn: conn} do
|
||||||
|
user = insert(:user, %{local: true})
|
||||||
|
|
||||||
|
user2 = insert(:user, %{local: true})
|
||||||
|
{:ok, _user2} = User.deactivate(user2, !user2.info.deactivated)
|
||||||
|
|
||||||
|
insert(:user, %{local: false, nickname: "u@peer1.com"})
|
||||||
|
insert(:user, %{local: false, nickname: "u@peer2.com"})
|
||||||
|
|
||||||
|
{:ok, _} = Pleroma.Web.CommonAPI.post(user, %{"status" => "cofe"})
|
||||||
|
|
||||||
|
# Stats should count users with missing or nil `info.deactivated` value
|
||||||
|
|
||||||
|
{:ok, _user} =
|
||||||
|
user.id
|
||||||
|
|> User.get_cached_by_id()
|
||||||
|
|> User.update_info(&Ecto.Changeset.change(&1, %{deactivated: nil}))
|
||||||
|
|
||||||
|
Pleroma.Stats.force_update()
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/instance")
|
||||||
|
|
||||||
|
assert result = json_response(conn, 200)
|
||||||
|
|
||||||
|
stats = result["stats"]
|
||||||
|
|
||||||
|
assert stats
|
||||||
|
assert stats["user_count"] == 1
|
||||||
|
assert stats["status_count"] == 1
|
||||||
|
assert stats["domain_count"] == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
test "get peers", %{conn: conn} do
|
||||||
|
insert(:user, %{local: false, nickname: "u@peer1.com"})
|
||||||
|
insert(:user, %{local: false, nickname: "u@peer2.com"})
|
||||||
|
|
||||||
|
Pleroma.Stats.force_update()
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/instance/peers")
|
||||||
|
|
||||||
|
assert result = json_response(conn, 200)
|
||||||
|
|
||||||
|
assert ["peer1.com", "peer2.com"] == Enum.sort(result)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in new issue