Changeset 679924e in Klonkt for src


Ignore:
Timestamp:
08/02/2026 08:06:21 AM (5 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
af035e6
Parents:
26c5f71
Message:

WebFinger: de primaire site via de ene bron van waarheid

Een verse instance heeft geen primaire site: is_primary is 0 by default en de
backfill draait alleen op het moment dat de kolom erbij komt. Een site die
daarna wordt aangemaakt laat de instance dus zonder vlag achter.

De HTML-kant merkte daar niets van, want getPrimarySite() valt terug op de
oudste site. Deze route hield zijn eigen is_primary-only kopie aan, precies het
verspreide gedrag dat middleware/site.js zegt te hebben opgeruimd. Dus / gaf de
site en WebFinger gaf 404, uit dezelfde database, in hetzelfde verzoek.

Gevonden op instance loop (🩵.is.wildenvrij.nl): één site, slug "mee",
is_primary 0. De andere instances kunnen in dezelfde staat staan.

De nieuwe test zet alle vlaggen op 0 en eist dat een kale host dan nog steeds
de oudste site vindt.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/activitypub.js

    r26c5f71 r679924e  
    2020import OAuth from '../services/OAuthService.js';
    2121import * as Guardianship from '../services/guardianship/index.js';
     22import { getPrimarySite } from '../middleware/site.js';
    2223import multer from 'multer';
    2324import path from 'path';
     
    4344const hostOf = (req) => { try { return new URL(baseUrl(req)).host; } catch { return req.get('host'); } };
    4445const publicSite = (slug) => db.prepare('SELECT * FROM sites WHERE slug = ? AND (is_public IS NULL OR is_public = 1)').get(slug);
    45 const primarySlug = () => { const r = db.prepare('SELECT slug FROM sites WHERE is_primary = 1').get(); return r && r.slug; };
     46// The primary site, via the one source of truth in middleware/site.js — which
     47// falls back to the oldest site when nothing carries the is_primary flag. This
     48// route used to keep its own is_primary-only copy, so a fresh instance whose
     49// site was never flagged served its HTML at / (that resolver falls back) while
     50// WebFinger and the actor route insisted it had no primary at all.
     51const primarySlug = () => { const s = getPrimarySite(); return s && s.slug; };
    4652// A hostname as a human types it and as DNS stores it are the same host:
    4753// `🩵.is.wildenvrij.nl` IS `xn--zz9h.is.wildenvrij.nl`. WHATWG URL does the IDNA,
Note: See TracChangeset for help on using the changeset viewer.