Changeset 8afbdd6 in Klonkt for src/server.js
- Timestamp:
- 06/14/2026 06:07:51 PM (3 months ago)
- Branches:
- main
- Children:
- c869272
- Parents:
- b94c08e
- File:
-
- 1 edited
-
src/server.js (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/server.js
rb94c08e r8afbdd6 1 1 /** 2 * PrutFolio v1— server bootstrap2 * Klonkt Hub Beta — server bootstrap 3 3 * 4 4 * Persoonlijk multi-site platform forked van PrutCMS v9 (PHP, file-based). … … 21 21 22 22 import { resolveSite, loadAudioTracks, loadTheme } from './middleware/site.js'; 23 import { isViewer } from './middleware/auth.js'; 24 import { renderPage } from './middleware/render.js'; 23 25 import authRoutes from './routes/auth.js'; 24 26 import accountRoutes from './routes/account.js'; … … 39 41 import feedRoutes from './routes/feed.js'; 40 42 import hubRoutes from './routes/hub.js'; 43 import artistsRoutes from './routes/artists.js'; 41 44 import postsRoutes from './routes/posts.js'; 42 45 … … 164 167 }); 165 168 166 // Read-only/kijk-accounts: alles bekijken mag, niets wijzigen. Blokkeert elke 167 // state-wijzigende methode (de login-POST zelf zet de sessie pas, dus die valt 168 // hier nog niet onder). 169 // Kijker-accounts: alles bekijken mag (incl. Beheer), niets wijzigen. Dit is de 170 // ENIGE schrijf-blokkade — fail-closed, vóór alle route-handlers. Elke state- 171 // wijzigende methode wordt geweigerd (de login-POST zet de sessie pas ná deze 172 // guard, dus die valt er niet onder). I.p.v. rauwe 403-tekst tonen we een nette 173 // pagina (of, bij HTMX, een ingeswapte melding). 169 174 app.use((req, res, next) => { 170 if (req.session?.user?.readonly && req.method !== 'GET' && req.method !== 'HEAD' && req.method !== 'OPTIONS') { 171 return res.status(403).send('Demo-account: alleen-lezen — wijzigen is uitgeschakeld.'); 175 const mutating = req.method !== 'GET' && req.method !== 'HEAD' && req.method !== 'OPTIONS'; 176 if (mutating && isViewer(req.session?.user)) { 177 if (req.headers['hx-request'] === 'true') { 178 // htmx swapt niet op 4xx; stuur 200 + retarget zodat de melding in #pcms-main verschijnt. 179 res.setHeader('HX-Retarget', '#pcms-main'); 180 res.setHeader('HX-Reswap', 'innerHTML'); 181 res.status(200); 182 } else { 183 res.status(403); 184 } 185 return renderPage(req, res, 'pages/viewer-blocked', { 186 pageTitle: 'Kijker-modus', 187 bodyClass: 'on-special', 188 }); 172 189 } 173 190 next(); … … 192 209 // Feed/sitemap routes are mounted at root because they're at well-known paths 193 210 app.use('/', feedRoutes); 211 app.use('/artiesten', artistsRoutes); // doorzoekbare artiesten-directory (alleen hub; solo: next()) 194 212 app.use('/', hubRoutes); // hub-overview op '/' (solo: next() -> postsRoutes) 195 213 app.use('/', postsRoutes); … … 215 233 res.json({ 216 234 id: idBase, 217 name: site?.title || ' PrutFolio',218 short_name: (site?.title || ' PrutFolio').slice(0, 12),235 name: site?.title || 'Klonkt Hub Beta', 236 short_name: (site?.title || 'Klonkt').slice(0, 12), 219 237 description: site?.description || site?.tagline || '', 220 238 scope, … … 324 342 return; 325 343 } 344 // Kijker-accounts zijn alleen-lezen: weiger de WS-upgrade. De HTTP-guard 345 // dekt geen WS, dus dit is de plek om schrijven via een (toekomstige) 346 // message-handler te voorkomen. 347 if (isViewer(req.session.user)) { 348 socket.write('HTTP/1.1 403 Forbidden\r\n\r\n'); 349 socket.destroy(); 350 return; 351 } 326 352 wss.handleUpgrade(req, socket, head, (ws) => { 327 353 ws.userId = req.session.user.id; … … 350 376 server.listen(PORT, () => { 351 377 console.log(''); 352 console.log('🪶 PrutFolio v1 — alpha');378 console.log('🪶 Klonkt Hub Beta'); 353 379 console.log(` http://localhost:${PORT}`); 354 380 console.log('');
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)