@julian

Moin Julian.

Ich hatte mich letztes Jahr schon einmal mit Deinem "WebFinger Split-Domain Canary"-Aufbau beschÀftigt, um meine Implementation darauf abzuklopfen.

https://correct.webfinger-canary.fietkau.software/

Leider habe ich Dich seinerzeit nicht kontaktiert, daher versuche ich gerade, mein GedÀchtnis wieder aufzufrischen.

Geht es Dir im Wesentlichen darum, daß man bei einem Webfinger-Lookup das "subject"-Feld vergleicht und ggf. einem Redirect folgt und ein zweites Webfinger-Lookup durchfĂŒhrt? Oder noch etwas anderes?

Irgendwie scheine ich Dein Setup nicht vollstÀndig zu durchschauen...

Ich nutze zur manuellen ÜberprĂŒfung jetzt schlicht einmal https://webfinger.net/

Ein #Webfinger auf canary[at]correct.webfinger-canary.fietkau.software liefert ein passendes Subject, hier wĂ€ren also die Informationen zu entnehmen, d.h. fĂŒr #ActivityPub der Eintrag unter dem Typ "application/activity+json".

Ein Webfinger auf canary[at]wrong.webfinger-canary.fietkau.software liefert eine abweichende Subject-Angabe, so daß man canary[at]correct.webfinger-canary.fietkau.software abfragt, wenn man dem Redirect folgt.

Auch canary[at]webfinger-canary.fietkau.software zeigt im Subject auf die correct-Subdomain.

Allerdings zeigen alle drei Webfinger-EintrÀge im Self auf https://wrong.webfinger-canary.fietkau.software/canary - wie soll die Abfrage auf https://correct.webfinger-canary.fietkau.software als Ergebnis landen?

Und nebenbei, wie hast Du den Implementationsstatus geprĂŒft? Mit einem Testaccount auf entsprechenden Instanzen?

Freue mich ĂŒber Feedback... :-)

#Fediverse

WebFinger Split-Domain Canary

A detailed summary of split-domain WebFinger setups: how do they work and what do they mean for ActivityPub implementers?

@Lioh
Ah aber danke zur ErklĂ€rung, habe das Problem auch nicht verstanden. Dann ist es ja auch keine fehlende standardisierung, afaik ist der Weg ĂŒber webfinger ja der richtige und eben auch standardisiert, dafĂŒr gibt es ja die well-known URLs.
Also ist doch alles gut, #fedimap klingt auch nach nem coolen Projekt und folgt jetzt dem #webfinger Standard, yaay! đŸ„ł
@mro @feb

A Guide to Implementing ActivityPub in a Static Site (or Any Website) - Part 9: Quote Posts

Summary:

Find the index and earlier parts of this series here.

Quote Posts for Static Sites: A Practical Guide to FEP-044f Implementation

Transform your static blog into a consent-respecting quote-enabled node in the fediverse. This guide shows you how to implement quote post support that works with Mastodon, GoToSocial, and other ActivityPub servers while respecting author preferences.

In this guide: You’ll learn to build quote-enabled blog posts that can be responsibly shared across the fediverse

Find the index and earlier parts of this series here.

Quote Posts for Static Sites: A Practical Guide to FEP-044f Implementation

Transform your static blog into a consent-respecting quote-enabled node in the fediverse. This guide shows you how to implement quote post support that works with Mastodon, GoToSocial, and other ActivityPub servers while respecting author preferences.

In this guide: You’ll learn to build quote-enabled blog posts that can be responsibly shared across the fediverse

Why Quote Posts Matter (And Why They’re Controversial)

The User Experience Problem

Picture this: Someone finds your blog post fascinating and wants to share it with their followers, but they also want to add their own perspective or why is important. Without quote posts, they have two unsatisfying options:

  • Simple share: Just boost with no commentary (or reply)
  • Link sharing: Add a link to the blog post in their note
  • Neither option creates the rich, attributed conversations that make social media engaging.

    The Solution: Consent-First Quote Implementation

    We’re implementing FEP-044f: Consent-respecting quote posts in our federated blog.

    What this means for your readers:

    • They can quote your posts with confidence that you’ve opted in
    • Their quotes include proper attribution and linking

    What this means for you:

    • Automatic handling of quote requests
    • Future-ready for advanced moderation features (like in the fuuutuuure)

    Implementation Overview

    We are going to:

  • Modify the Notes JSON to assert that the notes are quotable.
  • Modify our Index function (the only dynamic POST endpoint) to handle quote requests and send the appropriate approval back (blanket approval).
  • 1. Modifying the Notes: Enhanced ActivityPub Context

    What We Changed: Extended the @context from a simple string to a rich object array supporting the GoToSocial namespace.

    Before:

    "@context": "https://www.w3.org/ns/activitystreams"

    After:

    "@context": [ "https://www.w3.org/ns/activitystreams", { "gts": "https://gotosocial.org/ns#", "interactionPolicy": {"@id": "gts:interactionPolicy", "@type": "@id"}, "canQuote": {"@id": "gts:canQuote", "@type": "@id"}, "automaticApproval": {"@id": "gts:automaticApproval", "@type": "@id"} } ]

    We are also adding this section at the end of the Note:

    "interactionPolicy": { "canQuote": { "automaticApproval": "https://www.w3.org/ns/activitystreams#Public" } }

    If you want to be specific about who can quote your post, this is where you do it, read more in here.

    You can see an example of the implementation in RssUtils.cs - in the GetNote method.

    2: Quote Request Processing

    Now we need to add the quote request handling system that processes incoming quote requests and automatically approves them based on our interaction policy.

    New Components:

    • QuoteRequestService: Processes incoming quote requests from the fediverse
    • Auto-Approval Logic: Automatically approves public quote requests as defined in our interaction policy
    • Quote Authorization: Issues authorization tokens (stamps) for approved quotes

    The Quote Request Flow:

    sequenceDiagram participant Requester as Fediverse User participant Inbox as Our Inbox participant QRS as QuoteRequestService participant Target as Target Instance Requester->>Inbox: QuoteRequest for our post Inbox->>QRS: Process quote request QRS->>QRS: Check interaction policy QRS->>QRS: Generate authorization stamp QRS->>Target: Send Accept + Authorization Target->>Requester: Quote approved

    Checkout the implementation in the QuoteRequestService.cs.

    Key Takeaways

    By implementing FEP-044f, we’re not just adding quote functionality - we’re building consent-respecting social interactions into the protocol level.

    Why This Matters:

    This implementation shows how static sites can participate in modern social web standards while keeping their simplicity and performance benefits. Right now, we’re automatically allowing all public quotes, but this foundation sets us up for more granular consent controls in the future - like requiring approval for specific users or implementing follower-only quoting.

    The consent-respecting approach means our content can be shared thoughtfully across the fediverse, with the infrastructure already in place to handle more sophisticated permission systems as they evolve.

    Next Steps: The Quote Visualization Challenge

    Now that we’ve successfully implemented the backend infrastructure for consent-respecting quote posts, we face an equally important question: How should we display these quotes on our website?

    Treat quoted posts as special reply types? Quotes have different semantic meaning than replies - they’re more like “shared with commentary” So maybe create a separate “Quoted By” section similar to how we handle likes and shares?

    Any ideas?

    Also readable in: https://maho.dev/2026/02/a-guide-to-implementing-activitypub-in-a-static-site-or-any-website-part-9-quote-posts/ by @mapache:

    #fediverse #activitypub #static-sites #hugo #azure #mastodon #web-development #social-web #webfinger #http #quote-posts #fep-044f

    A guide to implement ActivityPub in a static site (or any website)

    Hi! I have created this index for easy navigation. In Part 1, we will discuss why it is important to bring your site to the Fediverse. In Part 2, we will delve into an overview of the design of my implementation. In Part 3, we will make your blog discovereable in the fediverse. In Part 4, we will generate our notes and outbox, which contains posts ready to be shared in the Fediverse. Part 5, is an interlude to implement a subscribing to your site feature with fediverse accounts.

    blog.futtta.be on the fediverse

    Pretty sure no-one is waiting for this, but after having spent a couple of years on the Fediverse (Mastodon in my case) I decided to add ActivityPub support to my WordPress installation via the ActivityPub plugin. I have the WP Rest Cache plugin active, so I'm expecting things to gently hum along, without (most likely) or with these posts gaining traction. Kudo's to Stian and Servebolt for assisting me to get the webfinger endpoint to work, which is ... not self-explanatory on hosts that [
]

    https://blog.futtta.be/2026/01/15/blog-futtta-be-on-the-fediverse/

    blog.futtta.be on the fediverse

    Pretty sure no-one is waiting for this, but after having spent a couple of years on the Fediverse (Mastodon in my case) I decided to add ActivityPub support to my WordPress installation via the


    Frank Goossens' blog

    Found this helpful resource by Ben Boyter (@boyter): a collection of sequence diagrams explaining how #ActivityPub/#WebFinger works in practice—covering post creation, follows, boosts, deletions, and user migration.

    If you're trying to implement ActivityPub, the spec can be frustratingly vague, and different servers do things differently. This aims to be a “clean room” reference for getting federation right.

    https://github.com/boyter/activitypub

    #fediverse #fedidev

    GitHub - boyter/activitypub: Sequence diagrams of how ActivityPub works

    Sequence diagrams of how ActivityPub works. Contribute to boyter/activitypub development by creating an account on GitHub.

    GitHub
    What about @identity.maikel.dev oh so from anyone BUT Mastodon I can use any of my domains as handles.

    Interesting đŸ€”

    #Mastodon #Webfinger
    ❓ Question #ActivityPub et #DevWeb ​​

    J’ai un site statique, sur lequel je poste des notes.
    Hier j’ai rĂ©ussi Ă  mettre en place un js pour afficher sous une note les rĂ©ponses d’un de mes toot (j’ai juste Ă  dĂ©finir l’id du toot dans une variable de ma note)

    Cette partie la marche super !

    Maintenant, j’aimerais que quand je cherche l’url de ma note sur mastodon, ça redirige vers l’url du toot.

    Je cherche avec les mots clef :
    .well-known/webfinger
    rel="canonical"
    rel="alternate" type="application/activity+json"

    mais je ne trouve pas grand-chose et mes tests ne marchent pas


    Est‑ce que vous avez dĂ©jĂ  vu ce genre de redirection sur un site ?

    cc
    @jee il me semble que t’avais creusĂ© je sujet du #webfinger
    WebFinger

    "WebFinger is used to discover information about people or other entities on the Internet that are identified by a URI using standard Hypertext Transfer Protocol (HTTP) methods over a secure transport. A WebFinger resource returns a JavaScript Object Notation (JSON) object describing the entity that is queried. The JSON object is referred to as the JSON Resource Descriptor (JRD)."

    https://webfinger.net/

    #identity #utils #web #webdev #webfinger
    WebFinger

    I've configured static webfinger and host-meta files, so you can now find me on Mastodon simply by searching for @bexelbie. This is done by mapping my domain to my Fediverse identity without needing to host a full server.

    Huge thanks to:

    @shanselman for the excellent webfinger guide.

    @maartenballiauw for the tip on including the .well-known directory in Jekyll.

    @osma for the pointer to the host-meta file.

    #Fediverse #WebFinger #Mastodon #Jekyll #SelfHost #AlmostSortaMaybe

    Grundlagen der #Föderation

    A folgt B

    Das #Fediverse heißt nicht ohne Grund "föderiertes Universum". In dieser Föderation spielen viele tausend Instanzen zusammen. Aber heißt das, jede #Instanz muß den gesamten Datenbestand des gesamten Fediversums lokal vorhalten oder stĂ€ndig ĂŒber das Netz funken? Nein.

    Eine Basisfunktion, damit Instanzen wissen, wer sich fĂŒr welche BeitrĂ€ge interessiert, ist das Folgen.

    Wenn Akteur A auf Instanz A eine Folgeanfrage an Akteurin B auf Instanz B absetzt, weiß Instanz B im Anschluß, das sich jemand fĂŒr die passenden (z.B. öffentlichen) BeitrĂ€ge von Akteurin B auf Instanz A interessiert und wird diese ab diesem Zeitpunkt an Instanz A zustellen. Instanz A kann diese BeitrĂ€ge von Akteurin B auf Instanz B dann auch in der föderierten Zeitleiste allen Nutzenden auf Instanz A anzeigen.

    Damit die Instanzen sich untereinander ĂŒber ihre lokalen Konten informieren können, dient das an anderer Stelle beschriebene #Webfinger-#Protokoll.