forked from AkkomaGang/akkoma
allow http AS profile in ld+json header
This commit is contained in:
parent
fd2f03f80a
commit
77e9a52450
2 changed files with 77 additions and 1 deletions
|
@ -262,7 +262,7 @@ def fetch_and_contain_remote_object_from_id(id) when is_binary(id) do
|
||||||
def fetch_and_contain_remote_object_from_id(_id),
|
def fetch_and_contain_remote_object_from_id(_id),
|
||||||
do: {:error, "id must be a string"}
|
do: {:error, "id must be a string"}
|
||||||
|
|
||||||
defp get_object(id) do
|
def get_object(id) do
|
||||||
date = Pleroma.Signature.signed_date()
|
date = Pleroma.Signature.signed_date()
|
||||||
|
|
||||||
headers =
|
headers =
|
||||||
|
@ -282,6 +282,11 @@ defp get_object(id) do
|
||||||
%{"profile" => "https://www.w3.org/ns/activitystreams"}} ->
|
%{"profile" => "https://www.w3.org/ns/activitystreams"}} ->
|
||||||
{:ok, body}
|
{:ok, body}
|
||||||
|
|
||||||
|
# pixelfed sometimes (and only sometimes) responds with http instead of https
|
||||||
|
{:ok, "application", "ld+json",
|
||||||
|
%{"profile" => "http://www.w3.org/ns/activitystreams"}} ->
|
||||||
|
{:ok, body}
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
{:error, {:content_type, content_type}}
|
{:error, {:content_type, content_type}}
|
||||||
end
|
end
|
||||||
|
|
|
@ -572,4 +572,75 @@ test "it gets history", %{object2: object2} do
|
||||||
} = object.data
|
} = object.data
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "get_object/1" do
|
||||||
|
test "should return ok if the content type is application/activity+json" do
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/2"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/activity+json"}],
|
||||||
|
body: "{}"
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should return ok if the content type is application/ld+json with a profile" do
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/2"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [
|
||||||
|
{"content-type",
|
||||||
|
"application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""}
|
||||||
|
],
|
||||||
|
body: "{}"
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
|
||||||
|
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/2"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [
|
||||||
|
{"content-type",
|
||||||
|
"application/ld+json; profile=\"http://www.w3.org/ns/activitystreams\""}
|
||||||
|
],
|
||||||
|
body: "{}"
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should not return ok with other content types" do
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/2"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/json"}],
|
||||||
|
body: "{}"
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:error, {:content_type, "application/json"}} =
|
||||||
|
Fetcher.get_object("https://mastodon.social/2")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue