From 06acec0533d56a10099dd1cd7b2b23a7cd186bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Menrath?= Date: Sat, 20 Jan 2024 11:28:23 +0100 Subject: [PATCH] add event import overview --- event_import.md | 91 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 event_import.md diff --git a/event_import.md b/event_import.md new file mode 100644 index 0000000..5854588 --- /dev/null +++ b/event_import.md @@ -0,0 +1,91 @@ +# Validation/Import of remote events +This document gives an overview how remote `Event` objects are treated by common Fediverse applications. + +## Mastodon +**Last updated**: 2024-10-20 + +Mastodon does not have support or events, but an `Event` object is in the [list of converted object types](https://github.com/mastodon/mastodon/pull/12637/commits/0428c00e30abcb0580558f9bdca672abc8b68f81). + +It neglets all event related fields but `title`, `summary` and `url` which it uses to create a Mastodon status (toot) representation of the event. + + +## Mobilizon +**Last uptaded**: 2024-01-20 + +**Information sources**: + +- [Mobilizon ActivityStreams converter for Event](https://framagit.org/framasoft/mobilizon/-/blob/main/lib/federation/activity_stream/converter/event.ex?ref_type=heads) +- [Mobilizon Database schema for Event](https://framagit.org/framasoft/mobilizon/-/blob/main/lib/mobilizon/event.ex?ref_type=heads) + +### Required + +- [`name`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name): The events title. +- [`attributedTo`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attributedTo) or [`actor`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-actor): Mobilizon uses actor for the user profile and attributedTo for the group. But as `actor` being part of an object is not part of the ActivityPub spec, solely using `attributedTo` might preferred if they are similar. +- `id`: This is also used for the `url`. + +### Optional + +- [`content`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-content): `contentMap` is currently not supported by Mobilizon. +- [`location`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-location): The subkey [`address`](https://schema.org/address) is accepted, both as [`PostalAddress`](https://schema.org/PostalAddress) and pure text. +- [`mentions`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-mentions) +- [`tag`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tag) +- [`maximumAttendeeCapacity`](https://docs.joinmobilizon.org/contribute/activity_pub/#maximumattendeecapacity) +- [`anonymousparticipationenabled`](https://docs.joinmobilizon.org/contribute/activity_pub/#anonymousparticipationenabled) + - `remainingAttendeeCapacity`: [Not parsed at the moment](https://framagit.org/framasoft/mobilizon/-/issues/1412) + - `participantCount`: [Not parsed at the moment](https://framagit.org/framasoft/mobilizon/-/issues/1412) +- `is_online` boolean whether the Event is online. +- `timezone` +- `metadata`: This is a list which can contain items. TODO. +- `contacts`: a list of contacts: each item might be just the `id`/`url` or an `Actor` object. +- `category`: default list of categories can be found [in the source code](https://framagit.org/framasoft/mobilizon/-/blob/main/lib/mobilizon/events/categories.ex?ref_type=heads#L28), but it can be extended via environment variables. Note that the source code shows them in lowercase, but they have to be passed as uppercase, e.g. `MOVEMENTS_POLITICS`. +- [`repliesModerationOption`](https://docs.joinmobilizon.org/contribute/activity_pub/#repliesModerationOption) +- [`commentsEnabled`](https://docs.joinpeertube.org/api/activitypub) +- [`joinMode`](https://docs.joinmobilizon.org/contribute/activity_pub/#joinmode): `[free, restricted, invite, external]` default is `free`. +- `externalParticipationUrl`: only used if `joinMode` is set to `external`. +- [`startTime`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-startTime) +- [`endTime`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-endTime) + +### Not used + +- [`url`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-url): internally Mobilizon uses the `id` as URL. + + +### To Test: + +### Handling of visibility, comments and discoverability + +- If `https://www.w3.org/ns/activitystreams#Public` is not in `to` it will be treated as `unlisted`, else as `public`. This are the only options for remote events, even though internally Mobilizon supports `[public, unlisted, restricted, private]`. +- For comments to be enabled within Mobilizon either [`commentsEnabled`](https://docs.joinpeertube.org/api/activitypub) must be `true` or `repliesModerationOption` must be set to `allow_all`. `repliesModerationOption` is more important. If none is of both is passed replies will be disabled. +- When the `attributedTo` (or if `attributedTo` is not set, but `actor` is set) contains an `Actor` of type `Person` the remote `Event` will not be listed and searchable. +- If `timezone` is not defined Mobilizon might calculate the timezone via the `location`. + + +### Banner image + +Mobilizon currently expects all images to by within `attachment` and to be an `Object` of type `Document`. It first looks for an object where the `name` is equal to `Banner`. If that is not found it uses ´attachment[0]`. + +## Gancio + +**Last uptaded**: 2024-01-20 + +### Required + +- [`name`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name): The events title. +- [`startTime`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-startTime) +- `id`: though Gancio currently does not [list it as required in its source code](https://framagit.org/les/gancio/-/blob/master/server/federation/events.js?ref_type=heads#L19), there will be an error without out it. + +### Optional + +- [`location`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-location): The subkey [`address`](https://schema.org/address) is accepted, both as [`PostalAddress`](https://schema.org/PostalAddress) and pure text. For `PostalAddress` only `streetAddress`, `addressLocality`, and `addressCountry` are used. +- [`attachment`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attachment) Only the first one is used as a banner image, all others are ignored, see below. +- [`endTime`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-endTime) +- [`content`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-content) `contentMap` is currently not supported by Gancio. +- [`summary`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-summary) The summary is only used when no content is supplied. + +### Handling of visibility + +Currently Gancio does not seem to handle any visibility or replies-policy options. It sets all remote events it received to the internal `is_visible` to `true`. + +### Banner image + +Gancio takes the first `attachment` of the `Event` object as the banner image of the event. It optionally supports [`name`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name) as the alternative text and [`focalPoint`](https://docs.joinmastodon.org/spec/activitypub/#focalPoint).