Changes in / [0b7ebbf:63edb0d] in Klonkt


Ignore:
Files:
8 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • src/config/database.js

    r0b7ebbf r63edb0d  
    4747  // Per-site Prutter toggle: when off, DM endpoints/UI are hidden for that site.
    4848  ensureColumn('sites', 'enable_prutter', 'INTEGER DEFAULT 1');
    49   // Cirkels: mag deze site in cirkels van anderen verschijnen (surfacing opt-out).
    50   ensureColumn('sites', 'allow_circle', 'INTEGER DEFAULT 1');
    5149
    5250  // v9 audit additions —————————————————————————————————————————
     
    108106  `);
    109107  db.prepare("INSERT OR IGNORE INTO app_settings (key, value) VALUES ('tenancy', 'solo')").run();
    110 
    111   // ── Cirkels (federatie) ─────────────────────────────────────
    112   // Decentrale, asymmetrische verbindingen tussen solo-instances.
    113   db.exec(`
    114     CREATE TABLE IF NOT EXISTS circle_links (
    115       id TEXT PRIMARY KEY,
    116       local_site_id TEXT NOT NULL,
    117       remote_url TEXT NOT NULL,
    118       remote_actor_id TEXT,
    119       label TEXT,
    120       status TEXT DEFAULT 'active',
    121       added_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    122       last_synced DATETIME,
    123       last_error TEXT,
    124       UNIQUE(local_site_id, remote_url),
    125       FOREIGN KEY (local_site_id) REFERENCES sites(id)
    126     );
    127     CREATE TABLE IF NOT EXISTS remote_actors (
    128       id TEXT PRIMARY KEY,
    129       url TEXT UNIQUE NOT NULL,
    130       name TEXT,
    131       summary TEXT,
    132       avatar TEXT,
    133       public_key TEXT NOT NULL,
    134       fetched_at DATETIME DEFAULT CURRENT_TIMESTAMP
    135     );
    136     CREATE TABLE IF NOT EXISTS remote_posts (
    137       id TEXT PRIMARY KEY,
    138       actor_id TEXT NOT NULL,
    139       published DATETIME,
    140       title TEXT,
    141       summary TEXT,
    142       url TEXT,
    143       media_json TEXT,
    144       raw_json TEXT,
    145       fetched_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    146       FOREIGN KEY (actor_id) REFERENCES remote_actors(id)
    147     );
    148   `);
    149108}
    150109
  • src/routes/admin-settings.js

    r0b7ebbf r63edb0d  
    8888
    8989    if (typeof req.body.tenancy !== 'undefined') {
    90       setTenancy(req.body.tenancy); // valideert naar solo | hub | circle
     90      setTenancy(req.body.tenancy === 'hub' ? 'hub' : 'solo');
    9191    }
    9292    if (typeof req.body.hub_title !== 'undefined') {
  • src/server.js

    r0b7ebbf r63edb0d  
    4343import artistsRoutes from './routes/artists.js';
    4444import postsRoutes from './routes/posts.js';
    45 import federationRoutes from './routes/federation.js';
    46 import { startCircleSyncLoop } from './services/CircleService.js';
    47 import adminCircleRoutes from './routes/admin-circle.js';
    48 import circleRoutes from './routes/circle.js';
    4945
    5046if (!process.env.SESSION_SECRET) {
     
    149145initializeDatabase();
    150146
    151 // Cirkels: periodieke achtergrond-sync van remote instances (no-op tenzij tenancy='circle').
    152 startCircleSyncLoop();
    153 
    154147// Bundle HTMX: copy from node_modules into our own assets dir so we can serve
    155148// it locally (no third-party CDN). Idempotent — only copies if size differs.
     
    172165const prutter = new PrutterService(db);
    173166app.locals.prutter = prutter;
    174 
    175 // Cirkels-federatie: publieke, site-agnostische endpoints (/.klonkt/*).
    176 // Vóór resolveSite/theme — ze hebben geen site-context nodig.
    177 app.use(federationRoutes);
    178167
    179168app.use(resolveSite);
     
    227216app.use('/admin/comments', adminCommentsRoutes);
    228217app.use('/admin/settings', adminSettingsRoutes);
    229 app.use('/admin/circle', adminCircleRoutes);
    230218app.use('/admin', adminRoutes);
    231219app.use('/prutter', prutterRoutes);
     
    241229app.get('/artiesten', (req, res) => res.redirect(301, req.originalUrl.replace(/^\/artiesten/, '/leden'))); // oude URL -> /leden
    242230app.use('/', hubRoutes); // hub-overview op '/' (solo: next() -> postsRoutes)
    243 app.use('/', circleRoutes); // /cirkel-feed (solo/hub: next() -> postsRoutes)
    244231app.use('/', postsRoutes);
    245232
  • src/services/SettingsService.js

    r0b7ebbf r63edb0d  
    3535
    3636export function getTenancy() {
    37   const v = getSetting('tenancy', 'solo');
    38   return v === 'hub' ? 'hub' : v === 'circle' ? 'circle' : 'solo';
     37  return getSetting('tenancy', 'solo') === 'hub' ? 'hub' : 'solo';
    3938}
    4039
    4140export function setTenancy(mode) {
    42   const m = (mode === 'hub' || mode === 'circle') ? mode : 'solo';
    43   setSetting('tenancy', m);
     41  setSetting('tenancy', mode === 'hub' ? 'hub' : 'solo');
    4442}
  • src/views/pages/admin-settings.ejs

    r0b7ebbf r63edb0d  
    2525          <strong>Hub</strong> — bedrijfssite met <code>/user/</code>.
    2626          <small>Jij (admin) wijst gebruikers een eigen Klonkt Hub toe. Gesloten cirkel: geen open registratie.</small>
    27         </span>
    28       </label>
    29       <label class="set-opt">
    30         <input type="radio" name="tenancy" value="circle" <%= tenancy === 'circle' ? 'checked' : '' %>>
    31         <span>
    32           <strong>Cirkels</strong> &mdash; solo + federatie.
    33           <small>E&eacute;n eigen site die de publieke posts van andere Klonkt-sites toont. Asymmetrisch: jij bepaalt wie in jouw cirkel zit.</small>
    3427        </span>
    3528      </label>
     
    8780  </section>
    8881  <% } %>
    89 
    90   <% if (tenancy === 'circle') { %>
    91   <section class="set-card" style="margin-top:1rem">
    92     <h2>Cirkel</h2>
    93     <p class="set-help">
    94       Beheer welke andere Klonkt-sites je in je cirkel toont, en of jouw site in
    95       cirkels van anderen mag verschijnen.
    96     </p>
    97     <p><a href="/admin/circle" class="btn btn-primary">Beheer je cirkel &rarr;</a></p>
    98   </section>
    99   <% } %>
    10082</div>
    10183
Note: See TracChangeset for help on using the changeset viewer.