Add v1/instance/domain_blocks endpoint
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
parent
8936066427
commit
e40bedc601
6 changed files with 115 additions and 1 deletions
|
|
@ -57,6 +57,22 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do
|
|||
}
|
||||
end
|
||||
|
||||
def domain_blocks_operation do
|
||||
%Operation{
|
||||
tags: ["Instance misc"],
|
||||
summary: "Retrieve instance domain blocks",
|
||||
operationId: "InstanceController.domain_blocks",
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response(
|
||||
"Array of domain blocks",
|
||||
"application/json",
|
||||
array_of_domain_blocks()
|
||||
)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def translation_languages_operation do
|
||||
%Operation{
|
||||
tags: ["Instance misc"],
|
||||
|
|
@ -420,4 +436,19 @@ defmodule Pleroma.Web.ApiSpec.InstanceOperation do
|
|||
}
|
||||
}
|
||||
end
|
||||
|
||||
defp array_of_domain_blocks do
|
||||
%Schema{
|
||||
type: :array,
|
||||
items: %Schema{
|
||||
type: :object,
|
||||
properties: %{
|
||||
domain: %Schema{type: :string},
|
||||
digest: %Schema{type: :string},
|
||||
severity: %Schema{type: :string},
|
||||
comment: %Schema{type: :string}
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do
|
|||
|
||||
plug(Pleroma.Web.ApiSpec.CastAndValidate)
|
||||
|
||||
plug(:skip_auth when action in [:show, :show2, :peers])
|
||||
plug(:skip_auth)
|
||||
|
||||
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.InstanceOperation
|
||||
|
||||
|
|
@ -31,6 +31,11 @@ defmodule Pleroma.Web.MastodonAPI.InstanceController do
|
|||
render(conn, "rules.json")
|
||||
end
|
||||
|
||||
@doc "GET /api/v1/instance/domain_blocks"
|
||||
def domain_blocks(conn, _params) do
|
||||
render(conn, "domain_blocks.json")
|
||||
end
|
||||
|
||||
@doc "GET /api/v1/instance/translation_languages"
|
||||
def translation_languages(conn, _params) do
|
||||
render(conn, "translation_languages.json")
|
||||
|
|
|
|||
|
|
@ -5,11 +5,18 @@
|
|||
defmodule Pleroma.Web.MastodonAPI.InstanceView do
|
||||
use Pleroma.Web, :view
|
||||
|
||||
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
||||
|
||||
alias Pleroma.Config
|
||||
alias Pleroma.Web.ActivityPub.MRF
|
||||
|
||||
@mastodon_api_level "2.7.2"
|
||||
|
||||
@block_severities %{
|
||||
federated_timeline_removal: "silence",
|
||||
reject: "suspend"
|
||||
}
|
||||
|
||||
def render("show.json", _) do
|
||||
instance = Config.get(:instance)
|
||||
|
||||
|
|
@ -90,6 +97,48 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
|
|||
}
|
||||
end
|
||||
|
||||
def render("domain_blocks.json", _) do
|
||||
if Config.get([:mrf, :transparency]) do
|
||||
exclusions = Config.get([:mrf, :transparency_exclusions]) |> MRF.instance_list_from_tuples()
|
||||
|
||||
domain_blocks =
|
||||
Config.get(:mrf_simple)
|
||||
|> Enum.map(fn {rule, instances} ->
|
||||
instances
|
||||
|> Enum.map(fn
|
||||
{host, reason} when not_empty_string(host) and not_empty_string(reason) ->
|
||||
{host, reason}
|
||||
|
||||
{host, _reason} when not_empty_string(host) ->
|
||||
{host, ""}
|
||||
|
||||
host when not_empty_string(host) ->
|
||||
{host, ""}
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end)
|
||||
|> Enum.reject(&is_nil/1)
|
||||
|> Enum.reject(fn {host, _} ->
|
||||
host in exclusions or not Map.has_key?(@block_severities, rule)
|
||||
end)
|
||||
|> Enum.map(fn {host, reason} ->
|
||||
%{
|
||||
domain: host,
|
||||
digest: :crypto.hash(:sha256, host) |> Base.encode16(case: :lower),
|
||||
severity: Map.get(@block_severities, rule),
|
||||
comment: reason
|
||||
}
|
||||
end)
|
||||
end)
|
||||
|> List.flatten()
|
||||
|
||||
domain_blocks
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def render("translation_languages.json", _) do
|
||||
with true <- Pleroma.Language.Translation.configured?(),
|
||||
{:ok, languages} <- Pleroma.Language.Translation.languages_matrix() do
|
||||
|
|
|
|||
|
|
@ -813,6 +813,7 @@ defmodule Pleroma.Web.Router do
|
|||
get("/instance", InstanceController, :show)
|
||||
get("/instance/peers", InstanceController, :peers)
|
||||
get("/instance/rules", InstanceController, :rules)
|
||||
get("/instance/domain_blocks", InstanceController, :domain_blocks)
|
||||
get("/instance/translation_languages", InstanceController, :translation_languages)
|
||||
|
||||
get("/statuses", StatusController, :index)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue