source: Klonkt/src/config/paths.js@ e2c3d09

main
Last change on this file since e2c3d09 was e2c3d09, checked in by Robin <roboburr@…>, 6 weeks ago

Media-submappen volgen nu MEDIA_PATH

De submappen voor avatars, post-images, reply-media, hero en audio-covers hadden
elk hun eigen env-variabele met een fallback naar <app>/storage/media/<sub>.
Daardoor negeerden ze MEDIA_PATH: wie zijn data buiten de checkout zette kreeg
alsnog een storage/-map in de work-tree, en uploads landden naast de code. Een
opruimstap bij een volgende deploy kan die vervolgens weggooien.

Nu leiden ze allemaal af van MEDIA_PATH via een gedeelde helper. Een eigen
override per submap wint nog steeds, dus bestaande installaties merken niets.
Dit maakt de scheiding van gebruikersdata en programmadata mogelijk met drie
regels in .env in plaats van acht.

Changed files:
src/routes/account.js

  • AVATAR_DIR via mediaDir(); dode dirname en fileURLToPath-import weg

src/routes/posts.js

  • POST_IMAGES_DIR en REPLY_MEDIA_DIR via mediaDir(); dode declaraties weg

src/routes/admin-media.js

  • POST_IMAGES_DIR en REPLY_MEDIA_DIR via mediaDir(); dode declaraties weg

src/routes/admin-settings.js

  • HERO_DIR via mediaDir(); dode declaraties weg

src/routes/admin-playlists.js

  • COVER_DIR via mediaDir(); dode dirname weg

src/routes/admin-audio.js

  • COVER_DIR via mediaDir(); AUDIO_DIR ongewijzigd (eigen wortel)

src/routes/admin-sites.js

  • PHOTO_DIR via mediaDir(), deelt bewust de avatars-map

src/routes/activitypub.js

  • AP_MEDIA_DIR via mediaDir(); ongebruikte fileURLToPath-import weg

New file:
src/config/paths.js

  • MEDIA_ROOT afgeleid van MEDIA_PATH
  • mediaDir(envVar, sub) voor submappen, met behoud van per-map overrides

DATABASE_PATH en AUDIO_PATH zijn eigen wortels en bewust ongemoeid gelaten.
Geverifieerd: 356 tests groen, en een server met externe MEDIA_PATH maakt al
zijn mappen buiten de checkout aan zonder de work-tree te raken.

-robo
Co-Authored-By: Claude Opus 5 <noreply@…>

  • Property mode set to 100644
File size: 1.3 KB
Line 
1/**
2 * Where user data lives on disk.
3 *
4 * Every media subdirectory derives from MEDIA_PATH, so one setting moves the
5 * whole media tree out of the checkout. That matters because the deploy checks
6 * out the work-tree: anything the app writes next to its own code can be wiped
7 * by a cleanup on the next deploy.
8 *
9 * Read at import time, like the rest of the config. `dotenv/config` is the first
10 * import in server.js, so the environment is already populated by the time this
11 * module is evaluated.
12 */
13import path from 'path';
14import { fileURLToPath } from 'url';
15
16const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
18/** Root for public, user-uploaded media (served by the /media handler). */
19export const MEDIA_ROOT = path.resolve(
20 process.env.MEDIA_PATH || path.join(__dirname, '..', '..', 'storage', 'media')
21);
22
23/**
24 * Resolve one media subdirectory.
25 *
26 * A per-subdirectory variable still wins, so installs that already pin an
27 * individual path keep working. Only the fallback changed: it now follows
28 * MEDIA_ROOT instead of pointing back into the checkout.
29 *
30 * @param {string} envVar per-subdirectory override, e.g. 'AVATAR_PATH'
31 * @param {string} sub subdirectory name under MEDIA_ROOT, e.g. 'avatars'
32 */
33export function mediaDir(envVar, sub) {
34 return path.resolve(process.env[envVar] || path.join(MEDIA_ROOT, sub));
35}
Note: See TracBrowser for help on using the repository browser.