Merge branch 'feature/1710-consolidate-instance-info' into 'develop'
Feature/1710 consolidate instance info Closes #1710 See merge request pleroma/pleroma!2430
This commit is contained in:
commit
3126f8a334
5 changed files with 80 additions and 45 deletions
|
@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- **Breaking:** removed `with_move` parameter from notifications timeline.
|
- **Breaking:** removed `with_move` parameter from notifications timeline.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- Instance: Extend `/api/v1/instance` with Pleroma-specific information.
|
||||||
- NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list.
|
- NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list.
|
||||||
- NodeInfo: `pleroma_emoji_reactions` to the `features` list.
|
- NodeInfo: `pleroma_emoji_reactions` to the `features` list.
|
||||||
- Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses.
|
- Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses.
|
||||||
|
@ -24,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Added `:reject_deletes` group to SimplePolicy
|
- Added `:reject_deletes` group to SimplePolicy
|
||||||
<details>
|
<details>
|
||||||
<summary>API Changes</summary>
|
<summary>API Changes</summary>
|
||||||
|
- Mastodon API: Extended `/api/v1/instance`.
|
||||||
- Mastodon API: Support for `include_types` in `/api/v1/notifications`.
|
- Mastodon API: Support for `include_types` in `/api/v1/notifications`.
|
||||||
- Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint.
|
- Mastodon API: Added `/api/v1/notifications/:id/dismiss` endpoint.
|
||||||
- Mastodon API: Add support for filtering replies in public and home timelines
|
- Mastodon API: Add support for filtering replies in public and home timelines
|
||||||
|
|
|
@ -204,3 +204,17 @@ Has theses additional parameters (which are the same as in Pleroma-API):
|
||||||
- `captcha_token`: optional, contains provider-specific captcha token
|
- `captcha_token`: optional, contains provider-specific captcha token
|
||||||
- `captcha_answer_data`: optional, contains provider-specific captcha data
|
- `captcha_answer_data`: optional, contains provider-specific captcha data
|
||||||
- `token`: invite token required when the registrations aren't public.
|
- `token`: invite token required when the registrations aren't public.
|
||||||
|
|
||||||
|
## Instance
|
||||||
|
|
||||||
|
`GET /api/v1/instance` has additional fields
|
||||||
|
|
||||||
|
- `max_toot_chars`: The maximum characters per post
|
||||||
|
- `poll_limits`: The limits of polls
|
||||||
|
- `upload_limit`: The maximum upload file size
|
||||||
|
- `avatar_upload_limit`: The same for avatars
|
||||||
|
- `background_upload_limit`: The same for backgrounds
|
||||||
|
- `banner_upload_limit`: The same for banners
|
||||||
|
- `pleroma.metadata.features`: A list of supported features
|
||||||
|
- `pleroma.metadata.federation`: The federation restrictions of this instance
|
||||||
|
- `vapid_public_key`: The public key needed for push messages
|
||||||
|
|
|
@ -5,10 +5,13 @@
|
||||||
defmodule Pleroma.Web.MastodonAPI.InstanceView do
|
defmodule Pleroma.Web.MastodonAPI.InstanceView do
|
||||||
use Pleroma.Web, :view
|
use Pleroma.Web, :view
|
||||||
|
|
||||||
|
alias Pleroma.Config
|
||||||
|
alias Pleroma.Web.ActivityPub.MRF
|
||||||
|
|
||||||
@mastodon_api_level "2.7.2"
|
@mastodon_api_level "2.7.2"
|
||||||
|
|
||||||
def render("show.json", _) do
|
def render("show.json", _) do
|
||||||
instance = Pleroma.Config.get(:instance)
|
instance = Config.get(:instance)
|
||||||
|
|
||||||
%{
|
%{
|
||||||
uri: Pleroma.Web.base_url(),
|
uri: Pleroma.Web.base_url(),
|
||||||
|
@ -29,7 +32,58 @@ def render("show.json", _) do
|
||||||
upload_limit: Keyword.get(instance, :upload_limit),
|
upload_limit: Keyword.get(instance, :upload_limit),
|
||||||
avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit),
|
avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit),
|
||||||
background_upload_limit: Keyword.get(instance, :background_upload_limit),
|
background_upload_limit: Keyword.get(instance, :background_upload_limit),
|
||||||
banner_upload_limit: Keyword.get(instance, :banner_upload_limit)
|
banner_upload_limit: Keyword.get(instance, :banner_upload_limit),
|
||||||
|
pleroma: %{
|
||||||
|
metadata: %{
|
||||||
|
features: features(),
|
||||||
|
federation: federation()
|
||||||
|
},
|
||||||
|
vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def features do
|
||||||
|
[
|
||||||
|
"pleroma_api",
|
||||||
|
"mastodon_api",
|
||||||
|
"mastodon_api_streaming",
|
||||||
|
"polls",
|
||||||
|
"pleroma_explicit_addressing",
|
||||||
|
"shareable_emoji_packs",
|
||||||
|
"multifetch",
|
||||||
|
"pleroma:api/v1/notifications:include_types_filter",
|
||||||
|
if Config.get([:media_proxy, :enabled]) do
|
||||||
|
"media_proxy"
|
||||||
|
end,
|
||||||
|
if Config.get([:gopher, :enabled]) do
|
||||||
|
"gopher"
|
||||||
|
end,
|
||||||
|
if Config.get([:chat, :enabled]) do
|
||||||
|
"chat"
|
||||||
|
end,
|
||||||
|
if Config.get([:instance, :allow_relay]) do
|
||||||
|
"relay"
|
||||||
|
end,
|
||||||
|
if Config.get([:instance, :safe_dm_mentions]) do
|
||||||
|
"safe_dm_mentions"
|
||||||
|
end,
|
||||||
|
"pleroma_emoji_reactions"
|
||||||
|
]
|
||||||
|
|> Enum.filter(& &1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def federation do
|
||||||
|
quarantined = Config.get([:instance, :quarantined_instances], [])
|
||||||
|
|
||||||
|
if Config.get([:instance, :mrf_transparency]) do
|
||||||
|
{:ok, data} = MRF.describe()
|
||||||
|
|
||||||
|
data
|
||||||
|
|> Map.merge(%{quarantined_instances: quarantined})
|
||||||
|
else
|
||||||
|
%{}
|
||||||
|
end
|
||||||
|
|> Map.put(:enabled, Config.get([:instance, :federating]))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,8 +9,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
|
||||||
alias Pleroma.Stats
|
alias Pleroma.Stats
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web
|
alias Pleroma.Web
|
||||||
alias Pleroma.Web.ActivityPub.MRF
|
|
||||||
alias Pleroma.Web.Federator.Publisher
|
alias Pleroma.Web.Federator.Publisher
|
||||||
|
alias Pleroma.Web.MastodonAPI.InstanceView
|
||||||
|
|
||||||
def schemas(conn, _params) do
|
def schemas(conn, _params) do
|
||||||
response = %{
|
response = %{
|
||||||
|
@ -34,51 +34,12 @@ def schemas(conn, _params) do
|
||||||
def raw_nodeinfo do
|
def raw_nodeinfo do
|
||||||
stats = Stats.get_stats()
|
stats = Stats.get_stats()
|
||||||
|
|
||||||
quarantined = Config.get([:instance, :quarantined_instances], [])
|
|
||||||
|
|
||||||
staff_accounts =
|
staff_accounts =
|
||||||
User.all_superusers()
|
User.all_superusers()
|
||||||
|> Enum.map(fn u -> u.ap_id end)
|
|> Enum.map(fn u -> u.ap_id end)
|
||||||
|
|
||||||
federation_response =
|
features = InstanceView.features()
|
||||||
if Config.get([:instance, :mrf_transparency]) do
|
federation = InstanceView.federation()
|
||||||
{:ok, data} = MRF.describe()
|
|
||||||
|
|
||||||
data
|
|
||||||
|> Map.merge(%{quarantined_instances: quarantined})
|
|
||||||
else
|
|
||||||
%{}
|
|
||||||
end
|
|
||||||
|> Map.put(:enabled, Config.get([:instance, :federating]))
|
|
||||||
|
|
||||||
features =
|
|
||||||
[
|
|
||||||
"pleroma_api",
|
|
||||||
"mastodon_api",
|
|
||||||
"mastodon_api_streaming",
|
|
||||||
"polls",
|
|
||||||
"pleroma_explicit_addressing",
|
|
||||||
"shareable_emoji_packs",
|
|
||||||
"multifetch",
|
|
||||||
"pleroma:api/v1/notifications:include_types_filter",
|
|
||||||
if Config.get([:media_proxy, :enabled]) do
|
|
||||||
"media_proxy"
|
|
||||||
end,
|
|
||||||
if Config.get([:gopher, :enabled]) do
|
|
||||||
"gopher"
|
|
||||||
end,
|
|
||||||
if Config.get([:chat, :enabled]) do
|
|
||||||
"chat"
|
|
||||||
end,
|
|
||||||
if Config.get([:instance, :allow_relay]) do
|
|
||||||
"relay"
|
|
||||||
end,
|
|
||||||
if Config.get([:instance, :safe_dm_mentions]) do
|
|
||||||
"safe_dm_mentions"
|
|
||||||
end,
|
|
||||||
"pleroma_emoji_reactions"
|
|
||||||
]
|
|
||||||
|> Enum.filter(& &1)
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
version: "2.0",
|
version: "2.0",
|
||||||
|
@ -106,7 +67,7 @@ def raw_nodeinfo do
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
staffAccounts: staff_accounts,
|
staffAccounts: staff_accounts,
|
||||||
federation: federation_response,
|
federation: federation,
|
||||||
pollLimits: Config.get([:instance, :poll_limits]),
|
pollLimits: Config.get([:instance, :poll_limits]),
|
||||||
postFormats: Config.get([:instance, :allowed_post_formats]),
|
postFormats: Config.get([:instance, :allowed_post_formats]),
|
||||||
uploadLimits: %{
|
uploadLimits: %{
|
||||||
|
|
|
@ -34,6 +34,10 @@ test "get instance information", %{conn: conn} do
|
||||||
"banner_upload_limit" => _
|
"banner_upload_limit" => _
|
||||||
} = result
|
} = result
|
||||||
|
|
||||||
|
assert result["pleroma"]["metadata"]["features"]
|
||||||
|
assert result["pleroma"]["metadata"]["federation"]
|
||||||
|
assert result["pleroma"]["vapid_public_key"]
|
||||||
|
|
||||||
assert email == from_config_email
|
assert email == from_config_email
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue