Changeset fbfd7a1 in Klonkt for src/routes/activitypub.js
- Timestamp:
- 08/13/2026 10:34:36 PM (4 weeks ago)
- Branches:
- main
- Children:
- 6c4ff7e
- Parents:
- 4101c89
- File:
-
- 1 edited
-
src/routes/activitypub.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/activitypub.js
r4101c89 rfbfd7a1 20 20 import OAuth from '../services/OAuthService.js'; 21 21 import * as Guardianship from '../services/guardianship/index.js'; 22 import * as Migration from '../services/MigrationService.js'; 22 23 import { getPrimarySite } from '../middleware/site.js'; 23 24 import multer from 'multer'; … … 655 656 // clients read it here instead of keeping their own state. Actor-kind 656 657 // blocks only (domain blocks are instance policy, not an Orbit member). 657 router.get('/ap/users/:slug/blocked', (req, res) => { 658 // 659 // FEP-1580 zet deze deur één spleet verder open: de bronkant MOET de blokkades 660 // beschikbaar maken voor de instantie waar je NAARTOE verhuist, zodat je 661 // zichtbaarheidsvoorkeuren meeverhuizen. De doelkant haalt ze als eerste op, 662 // want ze bepalen wat de rest te zien krijgt. Geen nieuwe collectie: deze 663 // bestond al en staat al op de actor, alleen de toegang verbreedt. 664 router.get('/ap/users/:slug/blocked', async (req, res) => { 658 665 const auth = OAuth.verifyBearer(req.headers.authorization); 659 if (!auth || auth.site.slug !== req.params.slug) return res.status(403).end(); 666 let slug = (auth && auth.site.slug === req.params.slug) ? auth.site.slug : null; 667 if (!slug && req.headers['signature']) { 668 const verified = await AP.verifyRequest(req).catch(() => null); 669 if (verified && verified.id && AP.isMoveTarget(req.params.slug, verified.id)) slug = req.params.slug; 670 } 671 if (!slug) return res.status(403).end(); 660 672 const base = baseUrl(req); 661 const items = AP.listBlocks( auth.site.slug)673 const items = AP.listBlocks(slug) 662 674 .filter((b) => b.kind === 'actor') 663 675 .map((b) => b.target); 664 676 AP.sendAP(res, { 665 677 '@context': AP.AP_CONTEXT, 666 id: `${base}/ap/users/${ auth.site.slug}/blocked`,678 id: `${base}/ap/users/${slug}/blocked`, 667 679 type: 'OrderedCollection', 668 680 totalItems: items.length, 669 681 orderedItems: items, 670 } );682 }, 'private, no-store'); 671 683 }); 672 684 … … 1031 1043 }); 1032 1044 1045 // ── FEP-1580: de vertaaltabel van een verhuizing ────────────────── 1046 // 1047 // Publiek leesbaar, want dat is het hele doel: een derde die een oude URI in 1048 // zijn database heeft leest hier wat de nieuwe is. Zonder deze collectie blijft 1049 // elke reactie op een verhuisd bericht naar een dood adres wijzen. 1050 // 1051 // Niet-publieke items komen er alleen in voor een lezer die ze mocht zien. De 1052 // spec: Moves voor objecten die niet aan as:Public gericht zijn MOGEN NIET 1053 // publiek getoond worden. Een lijst met de URIs van je fan-only posts is een 1054 // lek, ook al staat de inhoud er niet bij. 1055 router.get('/ap/users/:slug/migration', async (req, res) => { 1056 const site = publicSite(req.params.slug); 1057 if (!site) return res.status(404).end(); 1058 let alles = false; 1059 const auth = OAuth.verifyBearer(req.headers.authorization); 1060 if (auth && auth.site.slug === site.slug) alles = true; 1061 else if (req.headers['signature']) { 1062 const v = await AP.verifyRequest(req).catch(() => null); 1063 // Een geverifieerde volger zat in het publiek van de fan-only posts, dus 1064 // die mag ook weten waar ze heen zijn. 1065 if (v && v.id && AP.outboxAudience(site.slug, { verifiedActor: v.id }) === 'friend') alles = true; 1066 } 1067 AP.sendAP(res, Migration.buildMigration(baseUrl(req), site, { page: paginaNr(req), alles }), 1068 alles ? 'private, no-store' : undefined); 1069 }); 1070 1071 // De Moves die de vertaaltabel rechtvaardigen. Altijd publiek: een bewijs dat 1072 // je moet kunnen nakijken heeft niets aan een slot. 1073 // 1074 // LET OP: zonder FEP-8b32 (shaer-j1v0) staat hier geen handtekening onder. De 1075 // collectie is structureel goed en niet verifieerbaar, en een derde die de spec 1076 // streng volgt mag hem daarom weigeren. Bewust geen leeg proof-veld erbij. 1077 router.get('/ap/users/:slug/moves', (req, res) => { 1078 const site = publicSite(req.params.slug); 1079 if (!site) return res.status(404).end(); 1080 AP.sendAP(res, Migration.buildMoves(baseUrl(req), site)); 1081 }); 1082 1033 1083 // ── Featured (pinned posts → Mastodon "Featured" tab) ───────────── 1034 1084 router.get('/ap/users/:slug/featured', (req, res) => {
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)