96 lines
2.8 KiB
Markdown
96 lines
2.8 KiB
Markdown
# ActivityPub federation in Mitra
|
|
|
|
Mitra largely follows the [ActivityPub](https://www.w3.org/TR/activitypub/) server-to-server specification but it makes uses of some non-standard extensions, some of which are required for interacting with it.
|
|
|
|
The following activities are supported:
|
|
|
|
- Accept(Follow)
|
|
- Reject(Follow)
|
|
- Undo(Follow)
|
|
- Create(Note)
|
|
- Delete(Note)
|
|
- Like(Note)
|
|
- Undo(Like)
|
|
- Announce(Note)
|
|
- Undo(Announce)
|
|
- Update(Note)
|
|
- Follow(Person)
|
|
- Update(Person)
|
|
- Delete(Person)
|
|
- Add(Person)
|
|
- Remove(Person)
|
|
|
|
And these additional standards:
|
|
|
|
- [Http Signatures](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures)
|
|
- [NodeInfo](https://nodeinfo.diaspora.software/)
|
|
- [WebFinger](https://webfinger.net/)
|
|
|
|
Activities are implemented in way that is compatible with Pleroma, Mastodon and other popular ActivityPub servers.
|
|
|
|
## Profile extensions
|
|
|
|
### Cryptocurrency addresses
|
|
|
|
Cryptocurrency addresses are represented as `PropertyValue` attachments where `name` attribute is a currency symbol prefixed with `$`:
|
|
|
|
```json
|
|
{
|
|
"name": "$XMR",
|
|
"type": "PropertyValue",
|
|
"value": "8Ahza5RM4JQgtdqvpcF1U628NN5Q87eryXQad3Fy581YWTZU8o3EMbtScuioQZSkyNNEEE1Lkj2cSbG4VnVYCW5L1N4os5p"
|
|
}
|
|
```
|
|
|
|
### Identity proofs
|
|
|
|
Identity proofs are represented as attachments of `IdentityProof` type:
|
|
|
|
```json
|
|
{
|
|
"name": "<did>",
|
|
"type": "IdentityProof",
|
|
"signatureAlgorithm": "<proof-type>",
|
|
"signatureValue": "<proof>"
|
|
}
|
|
```
|
|
|
|
## Subscription events
|
|
|
|
Local actor profiles have `subscribers` property which points to the collection of actor's paid subscribers.
|
|
|
|
The `Add` activity is used to notify the subscriber about successful subscription payment. Upon receipt of this activity, the receiving server should add specified `object` to actors's `subscribers` collection (specified in `target` property):
|
|
|
|
```json
|
|
{
|
|
"@context": [
|
|
"https://www.w3.org/ns/activitystreams"
|
|
],
|
|
"actor": "https://example.com/users/alice",
|
|
"id": "https://example.com/activities/00000000-0000-0000-0000-000000000001",
|
|
"object": "https://example.com/users/bob",
|
|
"target": "https://example.com/users/alice/collections/subscribers",
|
|
"to": [
|
|
"https://example.com/users/bob"
|
|
],
|
|
"type": "Add"
|
|
}
|
|
```
|
|
|
|
The `Remove` activity is used to notify the subscriber about expired subscription. Upon receipt of this activity, the receiving server should remove specified `object` from actors's `subscribers` collection (specified in `target` property):
|
|
|
|
```json
|
|
{
|
|
"@context": [
|
|
"https://www.w3.org/ns/activitystreams"
|
|
],
|
|
"actor": "https://example.com/users/alice",
|
|
"id": "https://example.com/activities/00000000-0000-0000-0000-000000000002",
|
|
"object": "https://example.com/users/bob",
|
|
"target": "https://example.com/users/alice/collections/subscribers",
|
|
"to": [
|
|
"https://example.com/users/bob"
|
|
],
|
|
"type": "Remove"
|
|
}
|
|
```
|