Changeset 8a474ab in Klonkt for src/services/ap-c2s.js


Ignore:
Timestamp:
09/23/2026 12:13:31 PM (6 hours ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
0ad37a0
Parents:
fa24f7b
Message:

Poorten per soort: ook bij het versturen, en film heeft er nu een

Twee gaten die naast elkaar stonden en elkaar versterkten.

gate_images en gate_music golden alleen bij het SERVEREN (shaer-qc9o). Wat een
ward niet te zien kreeg mocht hij wel plaatsen, dus het stond bij iedereen
behalve bij hemzelf. Dat is geen poort meer maar een filter op zijn eigen
scherm, en dat is niet wat een guardian dichtzet. De innamekant weigert nu met
gated_images / gated_music / gated_video, in dezelfde vorm als compose en
messages.

Weigeren en niet wegknippen: stilletjes de bijlage verwijderen publiceert een
bericht dat het kind niet geschreven heeft.

En film had helemaal geen poort (shaer-mxh2), dus de zwaarste soort van de drie
was de enige die altijd door mocht. Nu een gewone rij in de catalogus met een
eigen kolom, aan beide kanten afgedwongen: gateAttachments knipt video weg als
hij dicht staat (ook als hij als AS2-Video zonder mediaType binnenkomt) en de
outbox neemt hem niet aan. shaer:video staat in de caps, zodat de app het
vooraf weet in plaats van het bij de eerste weigering te ontdekken.

De reddingsboei gaat door alle drie heen, zoals door elke andere dichte deur.
Een hulpvraag draagt juist vaak een schermafdruk.

uploadMedia zelf blijft open, en dat is met opzet: de boei gebruikt dezelfde
poot en de server weet daar nog niet waar een upload voor bedoeld is. Een
bijlage die blijft liggen kost een bestand; een boei die vastloopt kost meer.
De weigering valt bij het innemen van de post, en daar is het wel bekend.

Getoetst in test/gates-family.test.js, naast de poorten die er al stonden.
Tegenproef: met de video-regel en de innamelus eruit vallen precies de twee
nieuwe toetsen om.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ap-c2s.js

    rfa24f7b r8a474ab  
    122122            if (object.inReplyTo && !Guardianship.wardGateAllowed(site.gate_replies, isWard)) {
    123123              return { status: 403, error: 'gated_replies' };
     124            }
     125            // DE SOORT-POORTEN TELLEN OOK BIJ HET VERSTUREN (shaer-qc9o).
     126            //
     127            // gate_images en gate_music werden alleen bij het SERVEREN
     128            // afgedwongen. Wat een ward niet te zien kreeg mocht hij dus wel
     129            // plaatsen: het stond bij iedereen behalve bij hemzelf. Dan is het
     130            // geen poort meer maar een filter op zijn eigen scherm, en dat is
     131            // niet wat een guardian dichtzet.
     132            //
     133            // Weigeren en niet wegknippen: stilletjes de bijlage verwijderen
     134            // publiceert een bericht dat het kind niet geschreven heeft. Dat de
     135            // reddingsboei hierboven al langs is, is het hele punt -- een
     136            // hulpvraag met een schermafdruk gaat door elke dichte deur heen.
     137            const soortVan = (a) => {
     138              const mt = String((a && a.mediaType) || '');
     139              const t = a && a.type;
     140              if (mt.startsWith('image/') || t === 'Image') return 'images';
     141              if (mt.startsWith('audio/') || t === 'Audio') return 'music';
     142              if (mt.startsWith('video/') || t === 'Video') return 'video';
     143              return '';
     144            };
     145            const KOLOM = { images: 'gate_images', music: 'gate_music', video: 'gate_video' };
     146            const meegestuurd = new Set((Array.isArray(object.attachment) ? object.attachment : [object.attachment])
     147              .filter((a) => a && typeof a === 'object')
     148              .map(soortVan)
     149              .filter(Boolean));
     150            for (const soort of meegestuurd) {
     151              if (!Guardianship.wardGateAllowed(site[KOLOM[soort]], isWard)) {
     152                return { status: 403, error: `gated_${soort}` };
     153              }
    124154            }
    125155          }
Note: See TracChangeset for help on using the changeset viewer.