forked from AkkomaGang/akkoma
OStatusController: Add Mastodon compatibility route for objects.
This commit is contained in:
parent
ca755f9a73
commit
8a4bd9e5d1
2 changed files with 37 additions and 2 deletions
|
@ -37,8 +37,8 @@ def object(%{assigns: %{format: format}} = conn, _params)
|
||||||
ActivityPubController.call(conn, :object)
|
ActivityPubController.call(conn, :object)
|
||||||
end
|
end
|
||||||
|
|
||||||
def object(%{assigns: %{format: format}} = conn, %{"uuid" => uuid}) do
|
def object(%{assigns: %{format: format}} = conn, _params) do
|
||||||
with id <- o_status_url(conn, :object, uuid),
|
with id <- Endpoint.url() <> conn.request_path,
|
||||||
{_, %Activity{} = activity} <-
|
{_, %Activity{} = activity} <-
|
||||||
{:activity, Activity.get_create_by_object_ap_id_with_object(id)},
|
{:activity, Activity.get_create_by_object_ap_id_with_object(id)},
|
||||||
{_, true} <- {:public?, Visibility.is_public?(activity)} do
|
{_, true} <- {:public?, Visibility.is_public?(activity)} do
|
||||||
|
|
|
@ -10,7 +10,11 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
|
||||||
alias Pleroma.Config
|
alias Pleroma.Config
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
|
alias Pleroma.Web.Endpoint
|
||||||
|
|
||||||
|
require Pleroma.Constants
|
||||||
|
|
||||||
setup_all do
|
setup_all do
|
||||||
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
@ -19,6 +23,37 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
|
||||||
|
|
||||||
setup do: clear_config([:instance, :federating], true)
|
setup do: clear_config([:instance, :federating], true)
|
||||||
|
|
||||||
|
describe "Mastodon compatibility routes" do
|
||||||
|
setup %{conn: conn} do
|
||||||
|
conn = put_req_header(conn, "accept", "text/html")
|
||||||
|
%{conn: conn}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "redirects to /notice/:id for html format", %{conn: conn} do
|
||||||
|
{:ok, object} =
|
||||||
|
%{
|
||||||
|
"type" => "Note",
|
||||||
|
"content" => "hey",
|
||||||
|
"id" => Endpoint.url() <> "/users/raymoo/statuses/999999999",
|
||||||
|
"actor" => Endpoint.url() <> "/users/raymoo",
|
||||||
|
"to" => [Pleroma.Constants.as_public()]
|
||||||
|
}
|
||||||
|
|> Object.create()
|
||||||
|
|
||||||
|
{:ok, activity, _} =
|
||||||
|
%{
|
||||||
|
"type" => "Create",
|
||||||
|
"object" => object.data["id"],
|
||||||
|
"actor" => object.data["actor"],
|
||||||
|
"to" => object.data["to"]
|
||||||
|
}
|
||||||
|
|> ActivityPub.persist(local: true)
|
||||||
|
|
||||||
|
conn = get(conn, "/users/raymoo/statuses/999999999")
|
||||||
|
assert redirected_to(conn) == "/notice/#{activity.id}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Note: see ActivityPubControllerTest for JSON format tests
|
# Note: see ActivityPubControllerTest for JSON format tests
|
||||||
describe "GET /objects/:uuid (text/html)" do
|
describe "GET /objects/:uuid (text/html)" do
|
||||||
setup %{conn: conn} do
|
setup %{conn: conn} do
|
||||||
|
|
Loading…
Reference in a new issue