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
Notereprésente un commentaire.Articleest un article.Personreprésente les utilisateurs.Grouprepré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é.
actorest l'ID de l'utilisateur qui accepte la requête.objectest l'objetFollowaccepté.
Announce
Repartage d'un article (non disponible pour d'autres objets).
Crée un repartage d'un objet (object) par un utilisateur (actor).
actorest l'ID de l'utilisateur qui a repartagé le message.objectest l'ID du message à repartager.
Create
Crée un nouvel article ou un commentaire.
Si object est un Article:
object.attibutedToest 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 champactorde 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.nameest le titre de l'article.object.contentest une chaîne contenant le HTML généré à partir de l'article.object.creationDateest la date de la première publication de cet article.object.sourceest un objetSourceet contient la source Markdown de l'article.object.tagest une liste, et ses éléments sont soit:- un objet
Hashtagpour 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
Mentionpar personne qui a été mentionnée dans cet article.
- un objet
Si object est une Note:
object.contentest la source HTML du commentaire mis en forme.object.inReplyToest 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.spoilerTextest 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.tagest une liste deMentionqui 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é.
actorest l'ID d'un Actor, ou un objetPerson. Il représente la nouvelle personne qui suit.objectest l'ID de l'utilisateur ou du blog cible.
Like
Peut être utilisé pour ajouter un j'aime à un article.
actorest l'ID de l'utilisateur qui aime l'article.objectest l'ID du message à aimer.
Mettre à jour
Met à jour d'un article.
objectest un objetArticle. Il n'a pas de champ obligatoire autre queid. Seuls les champs présents seront mis à jour.object.idest l'ID de l'article mis à jour.object.titleest le nouveau titre de l'article.object.contentest le nouveau HTML de l'article.object.subtitleest le nouveau sous-titre de l'article.object.sourceest un objetSourceet son champcontentest le markdown mis à jour de l'article.
Undo
Annule une action précédente (comme, repartager ou suivre).
objectest l'activitéAnnounce,FollowouLikeà annuler.