From 448fc30ad481f15360560e7b627cbd984e9ebd4d Mon Sep 17 00:00:00 2001 From: Stefan Hayden Date: Sat, 24 May 2025 23:43:11 +0000 Subject: [PATCH] let the data directory be set by enviorment vars --- src/activity-pub-db.js | 4 ++-- src/bookmarks-db.js | 4 ++-- src/routes/admin.js | 8 +++----- src/session-auth.js | 3 ++- src/util.js | 2 ++ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/activity-pub-db.js b/src/activity-pub-db.js index f26fdf3..52e3589 100644 --- a/src/activity-pub-db.js +++ b/src/activity-pub-db.js @@ -10,9 +10,9 @@ import fs from 'fs'; import sqlite3 from 'sqlite3'; import { open } from 'sqlite'; import crypto from 'crypto'; -import { account, domain, actorInfo } from './util.js'; +import { account, domain, actorInfo, dataDir } from './util.js'; -const dbFile = './.data/activitypub.db'; +const dbFile = `${dataDir}/activitypub.db`; let db; function actorJson(pubkey) { diff --git a/src/bookmarks-db.js b/src/bookmarks-db.js index 8689b0a..a9b46ed 100644 --- a/src/bookmarks-db.js +++ b/src/bookmarks-db.js @@ -11,12 +11,12 @@ import { open } from 'sqlite'; // unclear why eslint can't resolve this package // eslint-disable-next-line import/no-unresolved, node/no-missing-import import { stripHtml } from 'string-strip-html'; -import { timeSince, account, domain } from './util.js'; +import { timeSince, account, domain, dataDir } from './util.js'; const ACCOUNT_MENTION_REGEX = new RegExp(`^@${account}@${domain} `); // Initialize the database -const dbFile = './.data/bookmarks.db'; +const dbFile = `${dataDir}/bookmarks.db`; const exists = fs.existsSync(dbFile); let db; diff --git a/src/routes/admin.js b/src/routes/admin.js index 8847362..392e063 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -1,12 +1,10 @@ import express from 'express'; // eslint-disable-next-line import/no-unresolved, node/no-missing-import import { stringify as csvStringify } from 'csv-stringify/sync'; // https://github.com/adaltas/node-csv/issues/323 -import { domain, actorInfo, parseJSON } from '../util.js'; +import { domain, actorInfo, parseJSON, dataDir } from '../util.js'; import { isAuthenticated } from '../session-auth.js'; import { lookupActorInfo, createFollowMessage, createUnfollowMessage, signAndSend, getInboxFromActorProfile } from '../activitypub.js'; -const DATA_PATH = '/app/.data'; - const ADMIN_LINKS = [ { href: '/admin', label: 'Bookmarklet' }, { href: '/admin/bookmarks', label: 'Import bookmarks' }, @@ -98,7 +96,7 @@ router.get('/data', isAuthenticated, async (req, res) => { }); router.get('/bookmarks.db', isAuthenticated, async (req, res) => { - const filePath = `${DATA_PATH}/bookmarks.db`; + const filePath = `${dataDir}/bookmarks.db`; res.setHeader('Content-Type', 'application/vnd.sqlite3'); res.setHeader('Content-Disposition', 'attachment; filename="bookmarks.db"'); @@ -118,7 +116,7 @@ router.get('/bookmarks.csv', isAuthenticated, async (req, res) => { }); router.get('/activitypub.db', isAuthenticated, async (req, res) => { - const filePath = `${DATA_PATH}/activitypub.db`; + const filePath = `${dataDir}/activitypub.db`; res.setHeader('Content-Type', 'application/vnd.sqlite3'); res.setHeader('Content-Disposition', 'attachment; filename="activitypub.db"'); diff --git a/src/session-auth.js b/src/session-auth.js index 29ca463..173dd96 100644 --- a/src/session-auth.js +++ b/src/session-auth.js @@ -1,5 +1,6 @@ import session from 'express-session'; import connectSqlite from 'connect-sqlite3'; +import { dataDir } from './util.js'; const SQLiteStore = connectSqlite(session); @@ -7,7 +8,7 @@ export default () => session({ store: new SQLiteStore({ db: 'sessions.db', - dir: '.data/', + dir: `${dataDir}/`, }), secret: process.env.SESSION_SECRET, resave: false, diff --git a/src/util.js b/src/util.js index 0a41a4d..9fc2a2c 100644 --- a/src/util.js +++ b/src/util.js @@ -5,6 +5,8 @@ import * as dotenv from 'dotenv'; dotenv.config(); +export const dataDir = process.env.DATA_DIR || '.data'; + export const data = { errorMessage: 'Whoops! Error connecting to the database–please try again!', setupMessage: "🚧 Whoops! Looks like the database isn't setup yet! 🚧",