Changeset 8aa85d0 in Klonkt for src/routes


Ignore:
Timestamp:
06/16/2026 06:58:03 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
2c246d4
Parents:
eef691e
Message:

Prutter = premium Hub feature: Hub-only + behind premium gate

Prutter (DMs) is now hard-scoped to Hub mode (route 404s outside hub) and
locked behind the premium gate via the new premiumUnlocked() (= premium off
→ freely available, demos keep working; premium on → Patreon required).
UI entry points (topnav/bottom-tab/Send DM) follow the same condition.
Added to the premium description in Admin → Settings.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/prutter.js

    reef691e r8aa85d0  
    1919import { renderPage } from '../middleware/render.js';
    2020import { requireAuth, isViewer } from '../middleware/auth.js';
     21import { getTenancy } from '../services/SettingsService.js';
     22import { premiumUnlocked } from '../services/PatreonService.js';
    2123import PermissionsService from '../services/PermissionsService.js';
    2224
     
    3133}
    3234
    33 // Middleware: require both auth + Prutter enabled
     35// Middleware: Prutter = Hub-feature achter de premium-laag, plus login.
     36//  - alleen in Hub-modus (DM tussen artiesten/leden van het collectief)
     37//  - vergrendeld als de premium-laag aan staat maar Patreon niet gekoppeld is
     38//    (premium uit = niet gegate → huidige gedrag, demo's blijven werken)
     39//  - geen anonieme DMs
    3440function requirePrutter(req, res, next) {
    3541  if (!siteAllowsDM(req, res)) return res.status(404).send('Prutter not enabled on this site');
     42  if (getTenancy() !== 'hub') return res.status(404).send('Prutter is alleen beschikbaar in Hub-modus');
     43  if (!premiumUnlocked()) {
     44    return res.status(403).send('Prutter is een premium-functie — koppel Patreon in Beheer → Instellingen.');
     45  }
    3646  return requireAuth(req, res, next);
    3747}
Note: See TracChangeset for help on using the changeset viewer.