Changeset 0517013 in Klonkt


Ignore:
Timestamp:
08/08/2026 04:15:57 AM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
553bd70
Parents:
06bae1e
git-author:
Robin <roboburr@…> (08/08/2026 04:15:44 AM)
git-committer:
Robin <roboburr@…> (08/08/2026 04:15:57 AM)
Message:

De Accept-terugval werkt nu ook op de gedeelde inbox

Vervolg op 06bae1e, en de fout die daar in zat: de terugval hing aan
slugParam, en die is LEEG wanneer er op /ap/inbox wordt afgeleverd in plaats
van op /ap/users/<slug>/inbox. Funkwhale doet precies dat, dus de terugval
werd overgeslagen en de rij bleef alsnog op pending -- alleen zei de log nu
tenminste eerlijk "accept UNMATCHED".

Wie wij zijn staat gewoon in de ingesloten Follow: die hebben wij zelf
verstuurd, dus object.actor is onze eigen actor-URI. Daar leiden we de slug
uit af als slugParam ontbreekt.

Zonder bruikbare Follow raden we niets: dan blijft het pending. Er is een test
die dat vastlegt, naast de test voor de gedeelde-inbox-weg zelf.

7 tests.

Co-Authored-By: Claude Opus 5 <noreply@…>

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    r06bae1e r0517013  
    25232523    // rij die nog op pending staat wordt geraakt, dus dit kan niets anders
    25242524    // openzetten dan een follow die wij zelf hebben verstuurd.
    2525     if (!raak && slugParam && actorUri) {
    2526       try { raak = fwStmts().accByActor.run(slugParam, actorUri).changes; } catch { /* ignore */ }
     2525    //
     2526    // En de slug mag NIET van slugParam afhangen: Funkwhale bezorgt op de
     2527    // GEDEELDE inbox, en dan is die leeg. Wie wij zijn staat in de ingesloten
     2528    // Follow -- die hebben wij immers zelf verstuurd, dus `object.actor` is
     2529    // onze eigen actor-URI.
     2530    let mij = slugParam;
     2531    if (!mij && act.object && typeof act.object === 'object') mij = slugFromActorUrl(act.object.actor);
     2532    if (!raak && mij && actorUri) {
     2533      try { raak = fwStmts().accByActor.run(mij, actorUri).changes; } catch { /* ignore */ }
    25272534    }
    25282535    // Eerlijk loggen: zonder treffer is er niets geaccepteerd, en dat hoort te
  • test/follow-accept-match.test.js

    r06bae1e r0517013  
    6464});
    6565
     66test('bezorgd op de GEDEELDE inbox: de slug komt uit de ingesloten Follow', async () => {
     67  // Funkwhale levert af op /ap/inbox, niet op /ap/users/<slug>/inbox. Dan is
     68  // slugParam null en moeten we uit `object.actor` afleiden wie wij zijn --
     69  // die Follow hebben wij immers zelf verstuurd.
     70  zetPending();
     71  await AP.handleInbox({
     72    body: {
     73      type: 'Accept', actor: REMOTE,
     74      object: {
     75        id: 'https://test.example/ap/users/dev#follows/389cf422-7e38-4bad-858e-35def4c3e2e9',
     76        type: 'Follow', actor: 'https://test.example/ap/users/dev', object: REMOTE,
     77      },
     78    },
     79    headers: {}, get: () => undefined, socket: {},
     80  }, null, { id: REMOTE });
     81  assert.equal(status(), 'accepted');
     82});
     83
     84test('op de gedeelde inbox zonder bruikbare Follow blijft het pending', async () => {
     85  zetPending();
     86  await AP.handleInbox({
     87    body: { type: 'Accept', actor: REMOTE, object: { id: 'https://elders.example/x', type: 'Follow' } },
     88    headers: {}, get: () => undefined, socket: {},
     89  }, null, { id: REMOTE });
     90  assert.equal(status(), 'pending', 'zonder te weten wie wij zijn, raden we niet');
     91});
     92
    6693test('een Accept van een ANDERE actor raakt onze rij niet', async () => {
    6794  zetPending();
Note: See TracChangeset for help on using the changeset viewer.