documentation/event_import.md

91 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).