Gancio support

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2024-01-30 16:25:38 +01:00
parent 91d9a6fa32
commit 3d83abc731
4 changed files with 69 additions and 0 deletions

View file

@ -29,6 +29,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.PlaceValidator do
end
def changeset(struct, data) do
data = fix(data)
struct
|> cast(data, [:type, :name, :longitude, :latitude, :accuracy, :altitude, :radius, :units])
|> cast_embed(:address, with: &address_changeset/2)
@ -51,4 +53,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.PlaceValidator do
])
|> validate_inclusion(:type, ["PostalAddress"])
end
defp fix(data) do
data
|> fix_address()
end
defp fix_address(%{"address" => address} = data) when is_binary(address) do
data
|> Map.put("address", %{
"type" => "PostalAddress",
"streetAddress" => address
})
end
defp fix_address(data), do: data
end

View file

@ -0,0 +1 @@
{"id":"https://demo.gancio.org/federation/m/1","name":"Demo event","url":"https://demo.gancio.org/event/demo-event","type":"Event","startTime":"2021-07-14T17:30:57.000+02:00","endTime":"2021-07-14T18:30:57.000+02:00","location":{"type":"Place","name":"Colosseo","address":"Piazza del Colosseo, Rome","latitude":null,"longitude":null},"attachment":[],"tag":[{"type":"Hashtag","name":"#test","href":"https://demo.gancio.org/tag/test"}],"published":"2021-07-01T22:33:36.543Z","attributedTo":"https://demo.gancio.org/federation/u/customized","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://demo.gancio.org/federation/u/customized/followers"],"content":"","summary":"Colosseo, Wednesday, 14 July (17:30)","@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","schema":"http://schema.org#","ProperyValue":"schema:PropertyValue","value":"schema:value","discoverable":"toot:discoverable","Hashtag":"https://www.w3.org/ns/activitystreams#Hashtag","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","focalPoint":{"@container":"@list","@id":"toot:focalPoint"}}]}

View file

@ -0,0 +1 @@
{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","schema":"http://schema.org#","ProperyValue":"schema:PropertyValue","value":"schema:value","discoverable":"toot:discoverable","indexable":"toot:indexable"}],"id":"https://demo.gancio.org/federation/u/customized","type":"Application","summary":"Demo instance, you can login with admin@gancio.org / password","name":"customized","preferredUsername":"customized","inbox":"https://demo.gancio.org/federation/u/customized/inbox","outbox":"https://demo.gancio.org/federation/u/customized/outbox","manuallyApprovesFollowers":false,"endpoints":{"sharedInbox":"https://demo.gancio.org/federation/u/customized/inbox"},"discoverable":true,"indexable":true,"attachment":[{"type":"PropertyValue","name":"Website","value":"<a href='https://demo.gancio.org'>https://demo.gancio.org</a>"},{"type":"PropertyValue","name":"Place","value":"Demo"}],"icon":{"type":"Image","mediaType":"image/png","url":"https://demo.gancio.org/logo.png"},"publicKey":{"id":"https://demo.gancio.org/federation/u/customized#main-key","owner":"https://demo.gancio.org/federation/u/customized","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxp9BQ8TvVqu+0xXk7VuZ\nnuO42cHxVI+z/3TQ80AfX5aoUnK/uP7lIPy+NiIgRRu0L4hsjEs+HP6Ny9NAKFtC\nddS3pUrgIDz/AUyKeYRsCycw4XyeX7gaqIan4vCx+ANPDVTc3twDenynHhaXbPsP\nzGeKiAsGIFKRUxc5I5xnQBk6Fy6LZvGwfif07AcECER+nzffSOMPYFVbhlRuBwOg\n/tJcut77KOEpJIQSwqzT0FOw4oFtkvJt/nhpQMkXwOjEuiMOVpPoXUIpWjnbvNmy\nIPXdnKN4QqHi0fAE+FvKGbNmr18vqApT/D4Yen6W1ZWCRdUR1jjl8LNFBkPH/Tad\nkOj+UyRRJjRRqY5mXCI72Bmhwmi/YdS4gt9K73okOZ3atM+9Kfj3azZm8pP7fRkK\n/lwRP8RZFSSpz4w9JtzYmR7P8qTaxwMuq8VrxtFmf1IBChFpyNHUDtmC9MzLBRE7\n+fnpr1bARR3OwO83/xtT+vKNE+2SBvsf7zeFRXa+p5dGaih90rQOwL8EsUItiG61\nm4y9n3Q7BM7XwrZ7sGe3Hey5SWveOEgemfP4ANJBiMQpU69LKM9dGW1FcEX4FlwW\nZx/135nzMXE2cF+y+q/yY2FlacXPqJXMY32mIc+rHMzvFY/ZDzjRY/7Gg2ekjXuN\n1o7Ag7a+5k+r+XkWBNKIHp8CAwEAAQ==\n-----END PUBLIC KEY-----\n"},"url":"https://demo.gancio.org"}

View file

@ -40,5 +40,55 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.EventHandlingTest do
assert object.data["name"] == "Mobilizon Launching Party"
assert object.data["startTime"] == "2019-12-18T13:00:00Z"
assert object.data["endTime"] == "2019-12-18T14:00:00Z"
assert object.data["location"] == %{
"address" => %{
"addressCountry" => "France",
"addressLocality" => "Nantes",
"addressRegion" => "Pays de la Loire",
"type" => "PostalAddress"
},
"name" => "Cour du Château des Ducs de Bretagne",
"type" => "Place"
}
end
test "Gancio Event object" do
Tesla.Mock.mock(fn
%{url: "https://demo.gancio.org/federation/m/1"} ->
%Tesla.Env{
status: 200,
body: File.read!("test/fixtures/tesla_mock/gancio-event.json"),
headers: HttpRequestMock.activitypub_object_headers()
}
%{url: "https://demo.gancio.org/federation/u/customized"} ->
%Tesla.Env{
status: 200,
body: File.read!("test/fixtures/tesla_mock/gancio-user.json"),
headers: HttpRequestMock.activitypub_object_headers()
}
end)
assert {:ok, object} = Fetcher.fetch_object_from_id("https://demo.gancio.org/federation/m/1")
assert object.data["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
# assert object.data["cc"] == ["https://demo.gancio.org/federation/u/customized/followers"]
assert object.data["url"] == "https://demo.gancio.org/event/demo-event"
assert object.data["published"] == "2021-07-01T22:33:36.543Z"
assert object.data["name"] == "Demo event"
assert object.data["startTime"] == "2021-07-14T15:30:57.000Z"
assert object.data["endTime"] == "2021-07-14T16:30:57.000Z"
assert object.data["location"] == %{
"address" => %{
"streetAddress" => "Piazza del Colosseo, Rome",
"type" => "PostalAddress"
},
"name" => "Colosseo",
"type" => "Place"
}
end
end