fix: authenticate ActivityPub follows behind TLS proxies #286
No reviewers
Labels
No labels
activitypub
admin
api
architecture
articles
auth
bug
cleanup
cli
comments
compatibility
config
contacts
content
database
deployment
design
dev-env
diagnostics
docs
documentation
email
enhancement
feature
federation
feed
health
homepage
implementation
integration
logging
mastodon
media
navigation
npm-packages
openapi
opengraph
packages
passkeys
preview
priority:high
priority:low
priority:medium
production
proof
proxy
public-routes
public-ui
release
safety
slug-api
slug-auth
slug-core
slug-federation
slug-media
slug-template
social
sources
status:active
status:canceled
status:done
status:inprogress
status:waiting
syndication
tailwind
template
test
web
webauthn
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
erik/slugkit!286
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/task-b1bc9dcb-activitypub-follows"
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?
Summary
Fix the reproduced upstream template ActivityPub Follow authentication/proxy failures without changing actor identity, keys, follower data, or automatic acceptance.
Task
Task:
task-b1bc9dcb— Fix ActivityPub follow handling in SlugKit example site.Changes
acct:<actor>@<domain>signer, mapping only the primary actor's Fedify-synthesized identity and preserving loader safety options.Evidence
Baseline main
791c239: both authenticated-fixture inbox routes returned 401. With available shared-inbox documents, Cavage passed behind HTTP while RFC 9421 failed. Production-loader comparisons reject unsigned/default synthesized-key GETs and accept the existing compatible signer. Automatic acceptance and outbound signing were already present, not a manual-approval defect.Testing
./scripts/pre-pr.sh: generated CSS, formatting, lint, all workspace typechecks, and 859 tests passed (494 template-site tests).docs/advertising-options.mdexcluded and preserved.No external deployment or live Follow testing was performed. The existing in-process queue remains non-durable; downstream/generated sites require an ordinary approved source upgrade/release or a corrected published template artifact. CI and independent review are pending; merge requires explicit human approval.
Review update
182e3cdfbee8536678aae00ef0febdfe1492c629fortask-b1bc9dcb.docs/advertising-options.mdwas left untouched.Acceptance criteria
template/site/src/federation/README.mdand the PR body record example-specific baseline791c239d85fd37f23234b20caac3517bcf68d6c2with Fedify 2.2.4/Node adapter 2.0.3: authenticated-fixture requests failed at both inboxes; available shared-inbox documents isolated RFC 9421 HTTP-backend failure from passing Cavage behavior. Existing automatic acceptance/outbound signing were explicitly ruled out as the cause. These are recorded controlled reproductions, not live-site claims.loaders.tsremaps only the primary synthesized#main-keyidentity to the existingacct:signer and preserves factory/per-fetch options.routes.tssupplies a shared key dispatcher and uses the same federation factory for the worker.inbox.integration.test.tscovers both real application endpoints, production authenticated GET signatures verified against persisted advertised keys, rejection of unsigned/incompatible GETs, and authenticated fetching during queued processing.request.tsreconstructs the URL from operator configuration while preserving method, encoded path, query, headers, body and abort signal. Both-route RFC 9421/Cavage proxy regressions exercise HTTP backend requests signed for the public HTTPS origin;request.test.tsverifies preservation without rewriting signed headers.follow.tsretains follower validation, automatic persistence and the existing compatible outbound signer;actor-document.tsexplicitly advertisesmanuallyApprovesFollowers: false. Both-route/both-spec integration tests process the queue, inspect Accept contents and cryptographically verify delivered Accepts against the actor's advertised public key, rather than treating HTTP 202 as delivery evidence.request.ts,loaders.ts,routes.ts,follow.tsand the startup-installedlogging.tsbridge emit distinct inbox, verification, fetch, processing, queue and delivery outcomes. Only classified reasons, status and hostname are extracted from failures; raw records, exceptions, payloads and sensitive headers are not forwarded. Request/logging/inbox regressions check secret-marker suppression and delivery failure status. The allowlisted verification and delivery message templates match the installed Fedify implementation./tmp/slugkit-pre-pr.logrecords the complete pre-PR suite passing CSS, formatting, lint, workspace types and 859 tests (494 template-site tests). The real-archive regression incli/src/__tests__/template-package-script.test.tschecks corrected wiring, modules, dependency, docs and new regressions against template source. Existing archive generation includes these paths; shared helpers already provide key import/URL safety. Federation README and both site READMEs document canonical origin/Host configuration, reviewed downstream source upgrades, stable logging dependency, preserved data/keys, restart and reproducible controlled verification.Blocking issues
Warnings
Evidence and operational boundaries
fj actions tasksreports run #480, commit182e3cdfbe,build-lint-testsuccess, duration 2m23s. This is the CI evidence source; the reportedfj pr statusrelative-job-URL decode failure is not a failing check.