Changeset acbc9fc in Klonkt for src/routes/posts.js


Ignore:
Timestamp:
08/18/2026 05:46:13 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
56d74bb
Parents:
e854ace
Message:

Eigenaarspoort: volgers eerst goedkeuren, op z'n fediverse (Robins wens, 18-8)

Een site met approve_followers aan accepteert een Follow niet meer
automatisch: de actor adverteert manuallyApprovesFollowers, het verzoek
wacht in de bestaande wachtrij (ap_pending_follows, quorum 'owner') en
de eigenaar beslist op /connect — accepteren stuurt de Accept en de
backfill, weigeren een Reject. Zo kan niemand een klonkt ongevraagd aan
een hub of ander verzamelplatform hangen. Wards blijven bij hun
guardianpoort: die gaat vóór, en de eigenaarsroute weigert daar hard.
Instelbaar per site in het sitebeheer, teksten in NL/EN/DE.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/posts.js

    re854ace racbc9fc  
    12701270      awayUntil: (gStatus[g.other_uri] || {})['shaer:awayUntil'] || null,
    12711271    }));
     1272  // De eigenaarspoort: openstaande volgverzoeken, alleen buiten voogdij.
     1273  // Een ward-follow beslissen de guardians — die tonen we hier dus NIET,
     1274  // anders is deze pagina een deur naast hun poort.
     1275  const followRequests = (site && !myGuardians.length)
     1276    ? Guardianship.follows.listForWard(site.slug) : [];
    12721277  renderPage(req, res, 'pages/connect', {
    12731278    pageTitle: 'Connect', bodyClass: 'on-special',
    1274     connections, myGuardians,
     1279    connections, myGuardians, followRequests,
    12751280    // Na een verhuizing staat de uitgaande kant op slot. Dat hoort te blijken
    12761281    // VOORDAT je op een knop drukt, niet daarna uit een foutmelding.
     
    12901295    ? 'success=' + encodeURIComponent('Volger verwijderd')
    12911296    : 'error=' + encodeURIComponent('Volger niet gevonden')));
     1297});
     1298
     1299// De eigenaarspoort beslist (Robins wens, 18-8): accepteer of weiger een
     1300// volgverzoek dat door approve_followers is vastgehouden. Bewust NIET voor
     1301// wards — daar beslissen de guardians, en deze route weigert dan hard, zodat
     1302// hij geen sluiproute naast die poort wordt.
     1303router.post('/follow-requests/:decision', requireSiteManager, async (req, res) => {
     1304  const site = res.locals.site;
     1305  const base = res.locals.siteUrlBase || '';
     1306  const { decision } = req.params;
     1307  if (!site || !['approve', 'deny'].includes(decision)) return res.redirect(`${base}/connect`);
     1308  if (Guardianship.listGuardians(site.slug).length) {
     1309    return res.redirect(`${base}/connect?error=` + encodeURIComponent('Volgverzoeken lopen via je guardians'));
     1310  }
     1311  const pending = Guardianship.follows.getPending(String(req.body.id || ''));
     1312  if (!pending || pending.ward_slug !== site.slug || pending.status !== 'pending') {
     1313    return res.redirect(`${base}/connect?error=` + encodeURIComponent('Verzoek niet gevonden'));
     1314  }
     1315  if (decision === 'approve') await ActivityPubService.acceptGatedFollow(pending);
     1316  else await ActivityPubService.rejectGatedFollow(pending);
     1317  Guardianship.follows.remove(pending.id);
     1318  return res.redirect(`${base}/connect?success=` + encodeURIComponent(
     1319    decision === 'approve' ? 'Volger geaccepteerd' : 'Verzoek geweigerd'));
    12921320});
    12931321
Note: See TracChangeset for help on using the changeset viewer.