This isn't needed, but we need to check if the sender of the Magic Envelope is the parent author (so we have a valid signature from the parent author there).
74 lines
3.5 KiB
Markdown
74 lines
3.5 KiB
Markdown
---
|
|
title: Relayable
|
|
---
|
|
|
|
If a person participates on an entity, it needs to be relayed via the author of the parent entity, because only the
|
|
parent author knows, to whom they shared the original entity.
|
|
|
|
Such entities are:
|
|
|
|
* [Comment][comment]
|
|
* [Like][like]
|
|
* [PollParticipation][poll_participation]
|
|
|
|
## Common Properties
|
|
|
|
All relayables have the following properties:
|
|
|
|
| Property | Type | Description |
|
|
| ------------------------- | ---------------------------- | ------------------------------------------------- |
|
|
| `author` | [diaspora\* ID][diaspora-id] | The diaspora\* ID of the author of the relayable. |
|
|
| `guid` | [GUID][guid] | The GUID of the relayable. |
|
|
| `parent_guid` | [GUID][guid] | The GUID of the parent entity. |
|
|
| `author_signature` | [Signature][signature] | The signature from the author of the relayable. |
|
|
|
|
## Relaying
|
|
|
|
The author of the relayable sends the entity to the parent author. The author must include the `author_signature`.
|
|
|
|
The parent author then must envelop it in a new [Magic Envelope][magicsig] and send the entity to all the recipients
|
|
of the parent entity. If the author and the parent author are on the same server, the author must sign the
|
|
`author_signature` and the parent author needs to sign the Magic Envelope.
|
|
|
|
If someone other then the parent author receives a relayable without a valid Magic Envelope signed from
|
|
the parent author, it must be ignored. If the `author_signature` is missing or invalid, it also must be ignored.
|
|
|
|
## Signatures
|
|
|
|
The string to sign is built with the content of all properties (except the `author_signature` itself),
|
|
concatenated using `;` as separator in the same order as they appear in the XML. The order in the XML is not specified.
|
|
|
|
This ensures that relayables even work, if the parent author or another recipient does not know all properties of the
|
|
relayable entity (e.g. older version of diaspora\*).
|
|
|
|
This string is then signed with the private RSA key using the RSA-SHA256 algorithm and base64-encoded.
|
|
|
|
The parent author must use the same order as the relayable author. Unknown properties must be included again in the XML
|
|
and the signature.
|
|
|
|
To support fetching of the relayables, the parent author should save the following information:
|
|
|
|
* order of the received XML
|
|
* additional (unknown) properties
|
|
* `author_signature`
|
|
|
|
## Retraction / Reject
|
|
|
|
The parent author is allowed to retract the entity, so there are no additional signatures required for the
|
|
[Retraction][retraction] (only the [Salmon Magic Signature][magicsig]).
|
|
|
|
If the author retracts the entity, they send a [Retraction][retraction] to the parent author. The parent author also
|
|
must relay this retraction to all recipients of the parent entity.
|
|
|
|
If the parent author wants to reject the entity (e.g. if they ignore the author of the relayable), they can simply send
|
|
a [Retraction][retraction] for it back to the author.
|
|
|
|
|
|
[diaspora-id]: {{ site.baseurl }}/federation/types.html#diaspora-id
|
|
[guid]: {{ site.baseurl }}/federation/types.html#guid
|
|
[signature]: {{ site.baseurl }}/federation/types.html#signature
|
|
[comment]: {{ site.baseurl }}/entities/comment.html
|
|
[like]: {{ site.baseurl }}/entities/like.html
|
|
[poll_participation]: {{ site.baseurl }}/entities/poll_participation.html
|
|
[retraction]: {{ site.baseurl }}/entities/retraction.html
|
|
[magicsig]: {{ site.baseurl }}/federation/magicsig.html
|