Changeset 8aa85d0 in Klonkt
- Timestamp:
- 06/16/2026 06:58:03 AM (3 months ago)
- Branches:
- main
- Children:
- 2c246d4
- Parents:
- eef691e
- Location:
- src
- Files:
-
- 7 edited
-
middleware/render.js (modified) (2 diffs)
-
routes/prutter.js (modified) (2 diffs)
-
services/PatreonService.js (modified) (1 diff)
-
views/pages/admin-settings.ejs (modified) (1 diff)
-
views/pages/user.ejs (modified) (1 diff)
-
views/partials/bottom-tab.ejs (modified) (1 diff)
-
views/partials/topnav.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/middleware/render.js
reef691e r8aa85d0 18 18 import { isViewer } from './auth.js'; 19 19 import { getSetting } from '../services/SettingsService.js'; 20 import { isPremium as isPremiumInstance, premiumEnabled } from '../services/PatreonService.js';20 import { isPremium as isPremiumInstance, premiumEnabled, premiumUnlocked } from '../services/PatreonService.js'; 21 21 import { PLATFORMS as PLATFORMS_CATALOG } from '../services/PlatformIcons.js'; 22 22 … … 80 80 isPremium: isPremiumInstance(), 81 81 premiumEnabled: premiumEnabled(), 82 premiumUnlocked: premiumUnlocked(), 82 83 siteOwnerAvatar, 83 84 site: _site, -
src/routes/prutter.js
reef691e r8aa85d0 19 19 import { renderPage } from '../middleware/render.js'; 20 20 import { requireAuth, isViewer } from '../middleware/auth.js'; 21 import { getTenancy } from '../services/SettingsService.js'; 22 import { premiumUnlocked } from '../services/PatreonService.js'; 21 23 import PermissionsService from '../services/PermissionsService.js'; 22 24 … … 31 33 } 32 34 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 34 40 function requirePrutter(req, res, next) { 35 41 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 } 36 46 return requireAuth(req, res, next); 37 47 } -
src/services/PatreonService.js
reef691e r8aa85d0 82 82 } 83 83 84 // Is een premium-feature beschikbaar? True als de premium-laag UIT staat (dan is 85 // niets gegate — huidige gedrag), of AAN én deze instance is entitled. False alleen 86 // als premium aan staat maar er geen geldige Patreon-koppeling is (= betaalmuur). 87 export function premiumUnlocked() { 88 return !premiumEnabled() || isPremium(); 89 } 90 84 91 export function entitlementStatus() { 85 92 return { -
src/views/pages/admin-settings.ejs
reef691e r8aa85d0 44 44 <section class="set-card" style="margin-top:1rem"> 45 45 <h2>Premium (Patreon)</h2> 46 <p class="set-help">Ontgrendel de premium-modules (Hub-modus, Statistieken, Fan-login) 47 met je <strong>$10-lifetime</strong> Patreon-steun. De app en alle updates blijven gratis.</p> 46 <p class="set-help">Ontgrendel de premium-modules (Hub-modus, Statistieken, Fan-login, 47 Prutter-DMs) met je <strong>$10-lifetime</strong> Patreon-steun. De app en alle updates 48 blijven gratis.</p> 48 49 <% if (premium.premium) { %> 49 50 <p class="set-help"><strong>✓ Premium actief.</strong> -
src/views/pages/user.ejs
reef691e r8aa85d0 27 27 <% } %> 28 28 </p> 29 <% if (user && user.id !== author.id && site && site.enable_prutter ) { %>29 <% if (user && user.id !== author.id && site && site.enable_prutter && (typeof tenancy !== 'undefined' && tenancy === 'hub') && (typeof premiumUnlocked === 'undefined' || premiumUnlocked)) { %> 30 30 <p class="user-actions"> 31 31 <a href="<%= siteUrlBase %>/prutter/new?to=<%= encodeURIComponent(author.username) %>" class="btn btn-primary">💬 Send DM</a> -
src/views/partials/bottom-tab.ejs
reef691e r8aa85d0 13 13 const _canPost = !!(user && (typeof canMutate === 'undefined' || canMutate) 14 14 && permissions && permissions.canCreatePost && permissions.canCreatePost(user, site)); 15 const _hasPrutter = !!(user && site && site.enable_prutter && (typeof tenancy !== 'undefined' && tenancy === 'hub') );15 const _hasPrutter = !!(user && site && site.enable_prutter && (typeof tenancy !== 'undefined' && tenancy === 'hub') && (typeof premiumUnlocked === 'undefined' || premiumUnlocked)); 16 16 const _ownProfile = user ? ('/users/' + user.username) : null; 17 17 -
src/views/partials/topnav.ejs
reef691e r8aa85d0 15 15 const _isAdmin = typeof bodyClass !== 'undefined' && bodyClass.indexOf('on-admin') >= 0; 16 16 const _hasSearch = !site || site.show_search === undefined || site.show_search; 17 const _hasPrutter = user && site && site.enable_prutter && (typeof tenancy !== 'undefined' && tenancy === 'hub') ;17 const _hasPrutter = user && site && site.enable_prutter && (typeof tenancy !== 'undefined' && tenancy === 'hub') && (typeof premiumUnlocked === 'undefined' || premiumUnlocked); 18 18 const _canPost = user && (typeof canMutate === 'undefined' || canMutate) 19 19 && permissions && permissions.canCreatePost && permissions.canCreatePost(user, site);
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)