Exploration : protocoles fédérés pour la syndication et la réciprocité entre blogs #38
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte et idée de départ
L'idée : permettre à un autre site (avec son propre flux RSS) de donner son accord explicite pour reprendre des articles de varlog — et inversement, que varlog puisse reprendre ceux d'un partenaire de confiance. La relation devrait être formalisée, pas juste un abonnement RSS silencieux.
Ce ticket explore les protocoles fédérés disponibles et identifie ceux qui s'intègrent naturellement à l'infrastructure existante.
Infrastructure existante (base de départ)
/feedRSS 2.0 + AtomFeedFetcherrss_feeds/fluxuser_profiles)La mécanique de base (RSS en lecture) existe. Il manque la réciprocité et le consentement.
Protocoles candidats
Option A — Modèle RSS + partenariat explicite (plus proche de l'idée initiale)
Principe : étendre le système
rss_feedsexistant avec une couche de consentement bilatérale.Flux :
/fluxavec la mention du partenaire.Implémentation côté varlog :
syndication_partners:id, site_url, feed_url, label, status (pending/approved/rejected), approved_atPOST /syndication/request: formulaire public pour demander un partenariat/feed, ajouter un namespace de droits explicite :GET /partners(JSON ou HTML) listant les partenaires approuvés (leur flux RSS devient "de confiance" dans FeedFetcher)Complexité : faible — tout repose sur RSS + une table + un workflow admin. Pas de dépendance externe.
Limite : protocole maison, non standardisé. La vérification que le partenaire respecte les conditions reste manuelle.
Option B — Webmention (standard W3C, recommandé comme première brique fédérée)
Principe : quand un autre site publie un article qui cite ou reprend un article de varlog, il notifie varlog via une requête HTTP. Varlog peut alors afficher la citation, créer une rétro-notification, etc.
Spec : https://www.w3.org/TR/webmention/ (W3C Recommendation 2017)
Flux :
varlog.a5l.fr/post/mon-article.POST /webmentionavecsource=https://siteB/article&target=https://varlog.a5l.fr/post/mon-article.Implémentation côté varlog :
<head>du layout :<link rel="webmention" href="/webmention">POST /webmention: valide source/target, enregistre en BDDwebmentions:id, source_url, target_url, verified_at, status, author_name, author_url, summarypost_view.php(section "Mentionné par")Complexité : moyenne — ~300 lignes PHP + une table + une vérification HTTP asynchrone.
Avantage : protocole standard, déjà supporté par des centaines de blogs IndieWeb. Si le site partenaire supporte Webmention, la réciprocité est automatique.
Option C — ActivityPub (intégration Fediverse, plus ambitieux)
Principe : publier les articles de varlog comme des objets ActivityPub, permettant à des comptes Mastodon/Misskey/etc. de suivre le blog directement depuis leur instance.
Spec : https://www.w3.org/TR/activitypub/ (W3C Recommendation 2018)
Ce que ça apporterait :
@varlog@varlog.a5l.frImplémentation côté varlog :
GET /.well-known/webfinger(discovery)GET /actor(profil ActivityPub JSON-LD)GET /actor/outbox(articles commeCreate > Note)POST /actor/inbox(réception des follows, likes, boosts)Complexité : élevée — ActivityPub nécessite HTTP Signatures, JSON-LD, gestion des followers, clés RSA, etc. Représente plusieurs semaines de travail pour une implémentation robuste.
Alternative légère : ne publier que le profil webfinger + outbox en lecture seule, ce qui permet à Mastodon de "découvrir" le blog sans implémenter l'inbox.
Recommandation
Prochaines étapes suggérées
syndication_partnerset le workflow admin<link rel="webmention">danslayout.php+ créer le endpoint (étape 0 indolore)Fichiers clés
src/FeedFetcher.php— fetcher RSS existant (réutilisable pour vérification Webmention)public/feed.php— flux RSS sortant (à enrichir avec métadonnées de droits)templates/layout.php—<head>à enrichir avec<link rel="webmention">database/migration_005_rss_feeds.sql— modèle pour les nouvelles tablespublic/index.php— routing central (nouvelles routes à ajouter)Migré depuis varlog#53