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.
This commit is contained in:
Torsten Schulz (local)
2026-03-27 11:24:21 +01:00
parent 02837c7b73
commit 207ef6266a
5 changed files with 41 additions and 4 deletions

View File

@@ -34,6 +34,7 @@ import { v4 as uuidv4 } from 'uuid';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import { getAdultVerificationBaseDir, getLegacyAdultVerificationBaseDir } from '../utils/storagePaths.js';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);
@@ -46,10 +47,12 @@ class AdminService {
const candidates = []; const candidates = [];
if (requestData.fileName) { 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) { 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) { if (requestData.filePath) {
candidates.push(path.isAbsolute(requestData.filePath) candidates.push(path.isAbsolute(requestData.filePath)

View File

@@ -16,6 +16,7 @@ import fsPromises from 'fs/promises';
import path from 'path'; import path from 'path';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { getAdultVerificationBaseDir } from '../utils/storagePaths.js';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);
@@ -105,7 +106,7 @@ class SettingsService extends BaseService{
} }
buildAdultVerificationFilePath(fileName) { buildAdultVerificationFilePath(fileName) {
return path.join(__dirname, '..', 'images', 'adult-verification', fileName); return path.join(getAdultVerificationBaseDir(), fileName);
} }
async saveAdultVerificationDocument(file) { async saveAdultVerificationDocument(file) {
@@ -513,6 +514,8 @@ class SettingsService extends BaseService{
const savedFile = await this.saveAdultVerificationDocument(file); const savedFile = await this.saveAdultVerificationDocument(file);
const requestPayload = { const requestPayload = {
fileName: savedFile.fileName, fileName: savedFile.fileName,
storedFileName: savedFile.fileName,
filePath: savedFile.filePath,
originalName: file.originalname, originalName: file.originalname,
mimeType: file.mimetype, mimeType: file.mimetype,
note: note || '', note: note || '',

View File

@@ -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');
}

View File

@@ -25,6 +25,7 @@ sudo rm -rf /opt/yourpart/backend
echo "Erstelle Backend-Verzeichnis..." echo "Erstelle Backend-Verzeichnis..."
sudo mkdir -p /opt/yourpart/backend sudo mkdir -p /opt/yourpart/backend
sudo mkdir -p /opt/yourpart-data/adult-verification
echo "Kopiere neues Backend..." echo "Kopiere neues Backend..."
sudo cp -r * /opt/yourpart/backend/ sudo cp -r * /opt/yourpart/backend/
@@ -33,6 +34,8 @@ sudo cp -r * /opt/yourpart/backend/
echo "Setting permissions..." echo "Setting permissions..."
sudo chown -R yourpart:yourpart /opt/yourpart/backend sudo chown -R yourpart:yourpart /opt/yourpart/backend
sudo chmod -R 755 /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) # .env-Datei kopieren (falls vorhanden)
if [ -f .env ]; then if [ -f .env ]; then

View File

@@ -40,6 +40,7 @@ sudo rm -rf /opt/yourpart/backend
# Erstelle Backend-Verzeichnis # Erstelle Backend-Verzeichnis
echo "Erstelle Backend-Verzeichnis..." echo "Erstelle Backend-Verzeichnis..."
sudo mkdir -p /opt/yourpart/backend sudo mkdir -p /opt/yourpart/backend
sudo mkdir -p /opt/yourpart-data/adult-verification
# Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis) # Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis)
echo "Kopiere neues Backend..." echo "Kopiere neues Backend..."
@@ -76,6 +77,8 @@ fi
echo "Setting permissions..." echo "Setting permissions..."
sudo chown -R yourpart:yourpart /opt/yourpart/backend sudo chown -R yourpart:yourpart /opt/yourpart/backend
sudo chmod -R 755 /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 # Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben
if [ -f /opt/yourpart/backend/.env ]; then if [ -f /opt/yourpart/backend/.env ]; then
sudo chmod 600 /opt/yourpart/backend/.env sudo chmod 600 /opt/yourpart/backend/.env
@@ -104,4 +107,3 @@ echo "Checking service status..."
sudo systemctl status yourpart --no-pager sudo systemctl status yourpart --no-pager
echo "Backend update completed!" echo "Backend update completed!"