Changeset 91094a4 in Klonkt for src/server.js


Ignore:
Timestamp:
06/19/2026 01:09:15 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
37edecd
Parents:
2e247e4
Message:

Download-for-email (premium feature #2)

Fan leaves their email -> receives the file; address is added to the mailing list
(source 'download', single opt-in so the download is not behind a confirm barrier).
Reuses SubscriberService (#1).

  • DB: audio_tracks.downloadable (default 0).
  • admin-audio: per-track no-JS toggle (POST /admin/audio/:id/downloadable) + ⬇ button in the admin list (premium-gated); downloadable also in the /api/:id whitelist.
  • routes/download.js (premium-gated): GET /downloads (list), GET /download/:id (capture page), POST /download/:id (save email + session grant), GET /download/:id/bestand (serves attachment from storage/audio, 15-min session window, path-traversal guards).
  • views: pages/downloads.ejs + pages/download.ejs (form/ready, auto-start download).
  • admin dashboard: ⬇ Downloads link (premium, non-hub).

node --check passed. Nothing else reuses this; #8 notify reuses subscribers.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/server.js

    r2e247e4 r91094a4  
    5555import newsletterRoutes from './routes/newsletter.js';
    5656import adminNewsletterRoutes from './routes/admin-newsletter.js';
     57import downloadRoutes from './routes/download.js';
    5758
    5859if (!process.env.SESSION_SECRET) {
     
    271272app.use('/', epkRoutes); // /pers perskit (premium; niet-premium: next() -> 404)
    272273app.use('/', newsletterRoutes); // /nieuwsbrief in/uitschrijven (premium; niet-premium: next())
     274app.use('/', downloadRoutes); // /downloads + /download/:id download-voor-email (premium)
    273275app.use('/', postsRoutes);
    274276
Note: See TracChangeset for help on using the changeset viewer.