Import generic Atom feeds into profile feeds #28

Closed
opened 2026-09-28 16:55:18 +00:00 by Michael Westergaard · 1 comment
Owner

Goal

Let a user add a public Atom feed URL and have its entries appear in their FediProfile feed and reach ActivityPub followers. Keep this generic adapter separate from service-specific setup.

Acceptance

  • Validate/discover an Atom feed, show its title and original URL, and let the user enable, disable, or remove it. Do not treat feed access as proof of account ownership.
  • Normalize feed/entry IDs, title, alternate link, published/updated timestamps, summary/content, author, and enclosure links into the common source contract. Resolve relative links against the feed base URI and preserve source attribution.
  • Handle duplicate entries, edits, missing optional fields, content types, pagination/initial backfill policy, conditional polling, errors, and source removal under #25/#26.
  • Unit tests use representative Atom fixtures, including YouTube-shaped entries, malformed XML, and hostile markup. Keep live HTTP/database checks in manual integration.

Depends on #25 and #26. Standard: https://www.rfc-editor.org/rfc/rfc4287

## Goal Let a user add a public Atom feed URL and have its entries appear in their FediProfile feed and reach ActivityPub followers. Keep this generic adapter separate from service-specific setup. ## Acceptance - Validate/discover an Atom feed, show its title and original URL, and let the user enable, disable, or remove it. Do not treat feed access as proof of account ownership. - Normalize feed/entry IDs, title, alternate link, published/updated timestamps, summary/content, author, and enclosure links into the common source contract. Resolve relative links against the feed base URI and preserve source attribution. - Handle duplicate entries, edits, missing optional fields, content types, pagination/initial backfill policy, conditional polling, errors, and source removal under #25/#26. - Unit tests use representative Atom fixtures, including YouTube-shaped entries, malformed XML, and hostile markup. Keep live HTTP/database checks in manual integration. Depends on #25 and #26. Standard: https://www.rfc-editor.org/rfc/rfc4287
Author
Owner

Implemented generic Atom import in 1580c8d: secure validation and polling, title/entry normalization, stable identities and deduplication, relative link resolution against the final feed URL, XHTML/HTML/text handling, author/date/enclosure and external content links, conditional requests, and bounded backfill. Feed-level pagination links are intentionally not followed. Updated the runtime catalog and compatibility matrix. Unit tests cover Atom fixtures, YouTube-shaped entries, edits, duplicates, optional fields, content types, malformed/hostile XML, pagination policy, and validators. Forgejo CI run 1126 and final integration run 1127 passed.

Implemented generic Atom import in `1580c8d`: secure validation and polling, title/entry normalization, stable identities and deduplication, relative link resolution against the final feed URL, XHTML/HTML/text handling, author/date/enclosure and external content links, conditional requests, and bounded backfill. Feed-level pagination links are intentionally not followed. Updated the runtime catalog and compatibility matrix. Unit tests cover Atom fixtures, YouTube-shaped entries, edits, duplicates, optional fields, content types, malformed/hostile XML, pagination policy, and validators. Forgejo CI run [1126](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1126) and final integration run [1127](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1127) passed.
Sign in to join this conversation.
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
klafbang/fediprofile#28
No description provided.