Changeset fbfd7a1 in Klonkt for src/services/ActivityPubService.js
- Timestamp:
- 08/13/2026 10:34:36 PM (4 weeks ago)
- Branches:
- main
- Children:
- 6c4ff7e
- Parents:
- 4101c89
- File:
-
- 1 edited
-
src/services/ActivityPubService.js (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
r4101c89 rfbfd7a1 391 391 // separate state. 392 392 blocked: `${id}/blocked`, 393 // FEP-1580: de vertaaltabel van een verhuizing plus de Moves die hem 394 // rechtvaardigen. Deze twee staan er ALTIJD, ook leeg, en dat is met opzet: 395 // de FEP wijst er apart op dat "een verhuizing zonder objecten" en "een 396 // server die dit niet kent" anders niet uit elkaar te houden zijn. 397 migration: `${id}/migration`, 398 moves: `${id}/moves`, 393 399 // FEP-633c §2: shaer:guardians / shaer:isGuardian / shaer:queues 394 400 // (guardianship module owns these). … … 1839 1845 if (aud === 'public') return true; 1840 1846 if (aud === 'direct' || !site || !actorUri) return false; 1847 // FEP-1580: dezelfde regel als in outboxAudience, en hier net zo hard nodig. 1848 // De outbox geeft de LIJST vrij; zonder deze tak strandt de doelinstantie 1849 // alsnog op elke losse Note die niet publiek is. 1850 if (isMoveTarget(site.slug, actorUri)) return true; 1841 1851 try { 1842 1852 const blocked = db.prepare("SELECT 1 FROM ap_blocks WHERE slug = ? AND kind = 'actor' AND target = ?").get(site.slug, actorUri); … … 5406 5416 * (request-target) host date, the set verifyRequest checks. 5407 5417 */ 5408 async function signedGetJson(slug, url, onStatus) {5418 export async function signedGetJson(slug, url, onStatus) { 5409 5419 try { 5410 5420 const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, ''); … … 5982 5992 if (!verifiedActor) return 'public'; 5983 5993 if (isBlockedAny(verifiedActor)) return 'blocked'; 5994 // FEP-1580, Source Instance: wie ondertekend vraagt namens de actor waar wij 5995 // NAARTOE verhuisd zijn, moet behandeld worden alsof wij het zelf vragen. 5996 // Anders kan de nieuwe instantie alleen het publieke deel ophalen en verhuist 5997 // je fan-only geschiedenis niet mee. 5998 if (isMoveTarget(slug, verifiedActor)) return 'friend'; 5984 5999 try { 5985 6000 if (db.prepare('SELECT 1 FROM ap_followers WHERE slug = ? AND actor_uri = ?').get(slug, verifiedActor)) return 'friend'; … … 5987 6002 if (isWardGuardian(slug, verifiedActor)) return 'friend'; 5988 6003 return 'public'; 6004 } 6005 6006 /** 6007 * FEP-1580, de hele autorisatie van de bronkant in één predicaat. 6008 * 6009 * De spec zegt: behandel een verzoek dat namens de DOEL-actor getekend is alsof 6010 * de BRON-actor het deed, voor zichtbaarheid en toegang. Wij hangen dat aan 6011 * `moved_to`, en dat mag omdat moveAccount() `no_backreference` weigert: het 6012 * veld komt er alleen te staan als de doel-actor ons al in `alsoKnownAs` had. 6013 * Dus staat er iets, dan heeft iemand met beheer op BEIDE kanten dat gewild. 6014 * Een typefout kan hier niet binnenkomen, want die haalt de move zelf niet. 6015 * 6016 * Dat dit veilig is leunt op de keyId-binding in verifyRequest (shaer-xd8i): 6017 * zonder die controle kon een actor tekenen met de sleutel van een buurman op 6018 * dezelfde host, en dan is "wie tekende dit" te zacht om je hele geschiedenis 6019 * aan af te geven. 6020 */ 6021 export function isMoveTarget(slug, actorUri) { 6022 if (!slug || !actorUri) return false; 6023 try { 6024 const row = db.prepare('SELECT moved_to FROM sites WHERE slug = ?').get(slug); 6025 return !!(row && row.moved_to && row.moved_to === actorUri); 6026 } catch { return false; } 5989 6027 } 5990 6028 … … 6716 6754 export default { 6717 6755 movedLock, 6756 // FEP-1580 bronkant. Vergeet je hem hier, dan werpt elke route die hem 6757 // aanroept een 500 en lijkt het alsof de poort dicht staat terwijl hij 6758 // ontbreekt (precies hoe movedLock zich een dag eerder verstopte). 6759 isMoveTarget, signedGetJson, 6718 6760 AP_CONTEXT, getOrCreateKeys, apWants, sendAP, actorId, noteId, stripLeadingMentions, pagedCollection, 6719 6761 deriveHandle, localSlugOf, outboxSlice, PAGINA_GROOTTE,
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)