Pour se fédérer avec d'autres logiciels du Fediverse (et lui-même), Plume utilise divers protocoles :
- ActivityPub, en tant que protocole principal de fédération.
- WebFinger, pour trouver d'autres utilisateurs et blogs facilement.
- HTTP Signatures, pour authentifier les activités.
- NodeInfo, qui ne fait pas partie de la fédération elle-même, mais qui donne quelques métadonnées sur chaque instance.
Actuellement, les aspects suivants sont fédérés :
- Profils utilisateurs
- Blogs
- Articles
- Commentaires
- J'aimes
- Repartages
Et ces parties ne sont pas fédérées, mais le seront peut être dans le futur:
- Galerie des médias
- Métadonnées de l'instance
WebFinger
WebFinger est utilisé pour découvrir les profils distants. Quand vous ouvrez la page d'un utilisateur inconnu (/@/utilisateur@instance.tld
), Plume va envoyer une requête WebFinger à l'autre instance, sur le point de terminaison standard : /.well-known/webfinger
. Plume ignore le point de terminaison /.well-known/host-meta
(qui peut normalement être utilisé pour définir un autre point de terminaison WebFinger), et utilise toujours l'URL standard.
Plume utilise le conteneur webfinger
pour donner et récupérer les informations WebFinger.
Signatures HTTP
Plume vérifie que chaque Activité entrante a été signée avec la paire de clés de l'acteur
.
Pour faire ceci, il utilise l'entête HTTP : Signature
. Pour plus de détails sur la façon dont cet en-tête
est généré, veuillez vous référer à la HTTP Signatures Specification.
L'en-tête Digest
doit également être présent et utilisé pour générer la signature, ainsi nous pouvons vérifier le corps de la requête aussi.
NodeInfo
Plume expose les métadonnées de l'instance avec NodeInfo sur l'URL : /nodeinfo
.
Exemple de sortie
{
"version": "2.0",
"software": {
"name": "Plume",
"version": "0.2.0"
},
"protocols": ["activitypub"],
"services": {
"inbound": [],
"outbound": []
},
"openRegistrations": true,
"usage": {
"users": {
"total": 42
},
"localPosts": 7878,
"localComments": 1312
},
"metadata": {}
}
ActivityPub
Chaque utilisateur a une boîte de réception personnelle dans /@/username/inbox
, et chaque instance a une boîte de réception partagée dans /inbox
.
Si possible, Plume utilisera la boîte de réception partagée pour envoyer les activités.
Représentation des objets
Note
représente un commentaire.Article
est un article.Person
représente les utilisateurs.Group
représente les blogs.
Activités supportées
Plume 0.2.0 supporte les types d'activités suivants.
Accept
Accepte une demande de suivi.
Il sera ignoré lorsque reçu, car Plume considère que les demandes de suivi sont immediatement approuvées dans tous les cas (cependant, cela changera dans le futur).
Quand une activité Follow
est reçue, Plume répondra avec cette activité.
actor
est l'ID de l'utilisateur qui accepte la requête.object
est l'objetFollow
accepté.
Announce
Repartage d'un article (non disponible pour d'autres objets).
Crée un repartage d'un objet (object
) par un utilisateur (actor
).
actor
est l'ID de l'utilisateur qui a repartagé le message.object
est l'ID du message à repartager.
Create
Crée un nouvel article ou un commentaire.
Si object
est un Article
:
object.attibutedTo
est une liste contenant l'ID des auteurs et du blog dans lequel cet article a été publié. Si aucun identifiant de blog n'est spécifié, l'article sera rejeté. Le champactor
de l'activité correspond à l'utilisateur qui a appuyé sur le bouton “Publier” et doit normalement être un des auteurs présent dans le champ :attributedTo
.object.name
est le titre de l'article.object.content
est une chaîne contenant le HTML généré à partir de l'article.object.creationDate
est la date de la première publication de cet article.object.source
est un objetSource
et contient la source Markdown de l'article.object.tag
est une liste, et ses éléments sont soit:- un objet
Hashtag
pour le balisage de l'article (aucune différence n'est faite entre les balises globales affichées à la fin de l'article et les hashtags dans l'article lui-même pour l' instant). - un objet
Mention
par personne qui a été mentionnée dans cet article.
- un objet
Si object
est une Note
:
object.content
est la source HTML du commentaire mis en forme.object.inReplyTo
est l'ID du commentaire précédent dans le fil, ou du message qui est commenté s'il n'y a pas de commentaire précédent.object.spoilerText
est une chaîne affichée à la place du commentaire, tant que l'utilisateur n'a pas explicitement voulu voir le commentaire (l'équivalent du Content Warning dans Mastodon)object.tag
est une liste deMention
qui correspond aux utilisateurs mentionnés.
Supprimer
Supprime un objet qui a été créé avec une activité Create
.
object
est un Tombstone
, et object.id
l'ID de l'objet à supprimer (soit
un ID d'article, soit un ID de Note).
Follow
Quand cette activité est reçue, l'auteur est ajouté à la liste des personnes suivants le destinataire.
Ces activités sont immédiatement acceptées (voir Accept
) par Plume.
Pour les blogs, il y'a juste un renvoi d'une activité Accept
: suivre un blog n'est pas encore implémenté.
actor
est l'ID d'un Actor, ou un objetPerson
. Il représente la nouvelle personne qui suit.object
est l'ID de l'utilisateur ou du blog cible.
Like
Peut être utilisé pour ajouter un j'aime à un article.
actor
est l'ID de l'utilisateur qui aime l'article.object
est l'ID du message à aimer.
Mettre à jour
Met à jour d'un article.
object
est un objetArticle
. Il n'a pas de champ obligatoire autre queid
. Seuls les champs présents seront mis à jour.object.id
est l'ID de l'article mis à jour.object.title
est le nouveau titre de l'article.object.content
est le nouveau HTML de l'article.object.subtitle
est le nouveau sous-titre de l'article.object.source
est un objetSource
et son champcontent
est le markdown mis à jour de l'article.
Undo
Annule une action précédente (comme, repartager ou suivre).
object
est l'activitéAnnounce
,Follow
ouLike
à annuler.