- Timestamp:
- 07/21/2026 12:38:08 AM (7 weeks ago)
- Branches:
- main
- Children:
- 928d1c7
- Parents:
- 4a08bfc
- git-author:
- Robin <roboburr@…> (07/21/2026 12:38:07 AM)
- git-committer:
- Robin <roboburr@…> (07/21/2026 12:38:08 AM)
- Location:
- src
- Files:
-
- 4 added
- 3 edited
-
config/database.js (modified) (1 diff)
-
routes/admin-paid.js (added)
-
server.js (modified) (2 diffs)
-
services/CryptoBox.js (added)
-
services/PaidPatreonService.js (added)
-
views/pages/admin-paid.ejs (added)
-
views/pages/admin.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/config/database.js
r4a08bfc r61e3daf 310 310 last_used_at DATETIME 311 311 ); 312 -- Paid posts (klonkt-demo-aki): the site owner's own Patreon campaign. 313 -- Secrets are encrypted at rest (CryptoBox). Never reuses the instance-level 314 -- patreon_* settings, which are Klonkt Premium's separate license flow. 315 CREATE TABLE IF NOT EXISTS paid_patreon ( 316 site_id TEXT PRIMARY KEY, 317 client_id TEXT, 318 client_secret_enc TEXT, 319 campaign_id TEXT, 320 access_token_enc TEXT, 321 refresh_token_enc TEXT, 322 token_exp INTEGER, -- unix seconds 323 default_min_cents INTEGER DEFAULT 0, 324 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP 325 ); 312 326 CREATE TABLE IF NOT EXISTS ap_outbox ( 313 327 id TEXT PRIMARY KEY, -- note path segment (uuid) → /ap/notes/<id> -
src/server.js
r4a08bfc r61e3daf 45 45 import adminPatreonRoutes from './routes/admin-patreon.js'; 46 46 import adminStatsRoutes from './routes/admin-stats.js'; 47 import adminPaidRoutes from './routes/admin-paid.js'; 47 48 import adminMediaRoutes from './routes/admin-media.js'; 48 49 import circleRoutes from './routes/circle.js'; … … 378 379 app.use('/admin/patreon', adminPatreonRoutes); 379 380 app.use('/admin/stats', adminStatsRoutes); 381 app.use('/admin/paid', adminPaidRoutes); 380 382 app.use('/admin/newsletter', adminNewsletterRoutes); 381 383 app.use('/admin/shows', adminShowsRoutes); -
src/views/pages/admin.ejs
r4a08bfc r61e3daf 46 46 <% if (typeof premiumUnlocked === 'undefined' || premiumUnlocked) { %> 47 47 <a href="/admin/stats" class="btn"><%= t('admin.b_stats') %></a> 48 <a href="/admin/paid" class="btn">Betaalde posts</a> 48 49 <a href="/admin/newsletter" class="btn"><%= t('admin.b_newsletter') %></a> 49 50 <% if (tenancy !== 'hub' && primarySite) { %><a href="/pers" class="btn" target="_blank"><%= t('admin.b_perskit') %></a><% } %>
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)