@@ -0,0 +1,26 @@ | |||
# 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.DomainBlockController do | |||
use Pleroma.Web, :controller | |||
alias Pleroma.User | |||
@doc "GET /api/v1/domain_blocks" | |||
def index(%{assigns: %{user: %{info: info}}} = conn, _) do | |||
json(conn, Map.get(info, :domain_blocks, [])) | |||
end | |||
@doc "POST /api/v1/domain_blocks" | |||
def create(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do | |||
User.block_domain(blocker, domain) | |||
json(conn, %{}) | |||
end | |||
@doc "DELETE /api/v1/domain_blocks" | |||
def delete(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do | |||
User.unblock_domain(blocker, domain) | |||
json(conn, %{}) | |||
end | |||
end |
@@ -715,20 +715,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do | |||
end | |||
end | |||
def domain_blocks(%{assigns: %{user: %{info: info}}} = conn, _) do | |||
json(conn, info.domain_blocks || []) | |||
end | |||
def block_domain(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do | |||
User.block_domain(blocker, domain) | |||
json(conn, %{}) | |||
end | |||
def unblock_domain(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) do | |||
User.unblock_domain(blocker, domain) | |||
json(conn, %{}) | |||
end | |||
def subscribe(%{assigns: %{user: user}} = conn, %{"id" => id}) do | |||
with %User{} = subscription_target <- User.get_cached_by_id(id), | |||
{:ok, subscription_target} = User.subscribe(user, subscription_target) do | |||
@@ -346,7 +346,7 @@ defmodule Pleroma.Web.Router do | |||
get("/lists/:id", ListController, :show) | |||
get("/lists/:id/accounts", ListController, :list_accounts) | |||
get("/domain_blocks", MastodonAPIController, :domain_blocks) | |||
get("/domain_blocks", DomainBlockController, :index) | |||
get("/filters", MastodonAPIController, :get_filters) | |||
@@ -422,8 +422,8 @@ defmodule Pleroma.Web.Router do | |||
post("/follow_requests/:id/authorize", MastodonAPIController, :authorize_follow_request) | |||
post("/follow_requests/:id/reject", MastodonAPIController, :reject_follow_request) | |||
post("/domain_blocks", MastodonAPIController, :block_domain) | |||
delete("/domain_blocks", MastodonAPIController, :unblock_domain) | |||
post("/domain_blocks", DomainBlockController, :create) | |||
delete("/domain_blocks", DomainBlockController, :delete) | |||
post("/pleroma/accounts/:id/subscribe", MastodonAPIController, :subscribe) | |||
post("/pleroma/accounts/:id/unsubscribe", MastodonAPIController, :unsubscribe) | |||
@@ -0,0 +1,51 @@ | |||
# 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.DomainBlockControllerTest do | |||
use Pleroma.Web.ConnCase, async: true | |||
alias Pleroma.User | |||
import Pleroma.Factory | |||
test "blocking / unblocking a domain", %{conn: conn} do | |||
user = insert(:user) | |||
other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) | |||
conn = | |||
conn | |||
|> assign(:user, user) | |||
|> post("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) | |||
assert %{} = json_response(conn, 200) | |||
user = User.get_cached_by_ap_id(user.ap_id) | |||
assert User.blocks?(user, other_user) | |||
conn = | |||
build_conn() | |||
|> assign(:user, user) | |||
|> delete("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) | |||
assert %{} = json_response(conn, 200) | |||
user = User.get_cached_by_ap_id(user.ap_id) | |||
refute User.blocks?(user, other_user) | |||
end | |||
test "getting a list of domain blocks", %{conn: conn} do | |||
user = insert(:user) | |||
{:ok, user} = User.block_domain(user, "bad.site") | |||
{:ok, user} = User.block_domain(user, "even.worse.site") | |||
conn = | |||
conn | |||
|> assign(:user, user) | |||
|> get("/api/v1/domain_blocks") | |||
domain_blocks = json_response(conn, 200) | |||
assert "bad.site" in domain_blocks | |||
assert "even.worse.site" in domain_blocks | |||
end | |||
end |
@@ -1176,46 +1176,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do | |||
assert [%{"id" => ^other_user_id}] = json_response(conn, 200) | |||
end | |||
test "blocking / unblocking a domain", %{conn: conn} do | |||
user = insert(:user) | |||
other_user = insert(:user, %{ap_id: "https://dogwhistle.zone/@pundit"}) | |||
conn = | |||
conn | |||
|> assign(:user, user) | |||
|> post("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) | |||
assert %{} = json_response(conn, 200) | |||
user = User.get_cached_by_ap_id(user.ap_id) | |||
assert User.blocks?(user, other_user) | |||
conn = | |||
build_conn() | |||
|> assign(:user, user) | |||
|> delete("/api/v1/domain_blocks", %{"domain" => "dogwhistle.zone"}) | |||
assert %{} = json_response(conn, 200) | |||
user = User.get_cached_by_ap_id(user.ap_id) | |||
refute User.blocks?(user, other_user) | |||
end | |||
test "getting a list of domain blocks", %{conn: conn} do | |||
user = insert(:user) | |||
{:ok, user} = User.block_domain(user, "bad.site") | |||
{:ok, user} = User.block_domain(user, "even.worse.site") | |||
conn = | |||
conn | |||
|> assign(:user, user) | |||
|> get("/api/v1/domain_blocks") | |||
domain_blocks = json_response(conn, 200) | |||
assert "bad.site" in domain_blocks | |||
assert "even.worse.site" in domain_blocks | |||
end | |||
test "unimplemented follow_requests, blocks, domain blocks" do | |||
user = insert(:user) | |||