From 207ef6266ac9ac35c07485cb26f3c030d8f153a7 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 27 Mar 2026 11:24:21 +0100 Subject: [PATCH] feat(deploy): add adult verification directory creation and permissions setup - Enhanced deploy-backend.sh and update-backend.sh to create the adult verification directory under /opt/yourpart-data. - Updated permissions for the new directory to ensure proper access control. - Refactored file path handling in AdminService and SettingsService to utilize the new directory structure for adult verification files. --- backend/services/adminService.js | 7 +++++-- backend/services/settingsService.js | 5 ++++- backend/utils/storagePaths.js | 26 ++++++++++++++++++++++++++ deploy-backend.sh | 3 +++ update-backend.sh | 4 +++- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 backend/utils/storagePaths.js diff --git a/backend/services/adminService.js b/backend/services/adminService.js index 6c2a5f1..5e4915a 100644 --- a/backend/services/adminService.js +++ b/backend/services/adminService.js @@ -34,6 +34,7 @@ import { v4 as uuidv4 } from 'uuid'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; +import { getAdultVerificationBaseDir, getLegacyAdultVerificationBaseDir } from '../utils/storagePaths.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -46,10 +47,12 @@ class AdminService { const candidates = []; if (requestData.fileName) { - candidates.push(path.join(__dirname, '..', 'images', 'adult-verification', requestData.fileName)); + candidates.push(path.join(getAdultVerificationBaseDir(), requestData.fileName)); + candidates.push(path.join(getLegacyAdultVerificationBaseDir(), requestData.fileName)); } if (requestData.storedFileName && requestData.storedFileName !== requestData.fileName) { - candidates.push(path.join(__dirname, '..', 'images', 'adult-verification', requestData.storedFileName)); + candidates.push(path.join(getAdultVerificationBaseDir(), requestData.storedFileName)); + candidates.push(path.join(getLegacyAdultVerificationBaseDir(), requestData.storedFileName)); } if (requestData.filePath) { candidates.push(path.isAbsolute(requestData.filePath) diff --git a/backend/services/settingsService.js b/backend/services/settingsService.js index b9a271b..9b72b76 100644 --- a/backend/services/settingsService.js +++ b/backend/services/settingsService.js @@ -16,6 +16,7 @@ import fsPromises from 'fs/promises'; import path from 'path'; import { fileURLToPath } from 'url'; import { v4 as uuidv4 } from 'uuid'; +import { getAdultVerificationBaseDir } from '../utils/storagePaths.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -105,7 +106,7 @@ class SettingsService extends BaseService{ } buildAdultVerificationFilePath(fileName) { - return path.join(__dirname, '..', 'images', 'adult-verification', fileName); + return path.join(getAdultVerificationBaseDir(), fileName); } async saveAdultVerificationDocument(file) { @@ -513,6 +514,8 @@ class SettingsService extends BaseService{ const savedFile = await this.saveAdultVerificationDocument(file); const requestPayload = { fileName: savedFile.fileName, + storedFileName: savedFile.fileName, + filePath: savedFile.filePath, originalName: file.originalname, mimeType: file.mimetype, note: note || '', diff --git a/backend/utils/storagePaths.js b/backend/utils/storagePaths.js new file mode 100644 index 0000000..c2c1f26 --- /dev/null +++ b/backend/utils/storagePaths.js @@ -0,0 +1,26 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +function getBackendRoot() { + return path.join(__dirname, '..'); +} + +export function getAdultVerificationBaseDir() { + if (process.env.ADULT_VERIFICATION_DIR && process.env.ADULT_VERIFICATION_DIR.trim()) { + return process.env.ADULT_VERIFICATION_DIR.trim(); + } + if (process.env.YOURPART_PERSISTENT_DATA_DIR && process.env.YOURPART_PERSISTENT_DATA_DIR.trim()) { + return path.join(process.env.YOURPART_PERSISTENT_DATA_DIR.trim(), 'adult-verification'); + } + if (process.env.STAGE === 'production' || process.env.NODE_ENV === 'production') { + return '/opt/yourpart-data/adult-verification'; + } + return path.join(getBackendRoot(), 'images', 'adult-verification'); +} + +export function getLegacyAdultVerificationBaseDir() { + return path.join(getBackendRoot(), 'images', 'adult-verification'); +} diff --git a/deploy-backend.sh b/deploy-backend.sh index ac95700..cdce715 100755 --- a/deploy-backend.sh +++ b/deploy-backend.sh @@ -25,6 +25,7 @@ sudo rm -rf /opt/yourpart/backend echo "Erstelle Backend-Verzeichnis..." sudo mkdir -p /opt/yourpart/backend +sudo mkdir -p /opt/yourpart-data/adult-verification echo "Kopiere neues Backend..." sudo cp -r * /opt/yourpart/backend/ @@ -33,6 +34,8 @@ sudo cp -r * /opt/yourpart/backend/ echo "Setting permissions..." sudo chown -R yourpart:yourpart /opt/yourpart/backend sudo chmod -R 755 /opt/yourpart/backend +sudo chown -R yourpart:yourpart /opt/yourpart-data +sudo chmod -R 755 /opt/yourpart-data # .env-Datei kopieren (falls vorhanden) if [ -f .env ]; then diff --git a/update-backend.sh b/update-backend.sh index a050044..d1028bd 100755 --- a/update-backend.sh +++ b/update-backend.sh @@ -40,6 +40,7 @@ sudo rm -rf /opt/yourpart/backend # Erstelle Backend-Verzeichnis echo "Erstelle Backend-Verzeichnis..." sudo mkdir -p /opt/yourpart/backend +sudo mkdir -p /opt/yourpart-data/adult-verification # Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis) echo "Kopiere neues Backend..." @@ -76,6 +77,8 @@ fi echo "Setting permissions..." sudo chown -R yourpart:yourpart /opt/yourpart/backend sudo chmod -R 755 /opt/yourpart/backend +sudo chown -R yourpart:yourpart /opt/yourpart-data +sudo chmod -R 755 /opt/yourpart-data # Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben if [ -f /opt/yourpart/backend/.env ]; then sudo chmod 600 /opt/yourpart/backend/.env @@ -104,4 +107,3 @@ echo "Checking service status..." sudo systemctl status yourpart --no-pager echo "Backend update completed!" -