summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorRuby Iris Juric <ruby@srxl.me>2025-05-25 23:27:23 +1000
committerRuby Iris Juric <ruby@srxl.me>2025-05-26 22:52:00 +1000
commit4291a3d6483808c14d76821859e023708ce775ef (patch)
tree5a9ea83fdeb099427fea4814f348f046dbca782b /packages
parentmerge: Enforce HTTPS for all federation (!1042) (diff)
downloadsharkey-4291a3d6483808c14d76821859e023708ce775ef.tar.gz
sharkey-4291a3d6483808c14d76821859e023708ce775ef.tar.bz2
sharkey-4291a3d6483808c14d76821859e023708ce775ef.zip
add mediaDirectory config option to configure location of uploaded media
Diffstat (limited to 'packages')
-rw-r--r--packages/backend/src/config.ts5
-rw-r--r--packages/backend/src/core/InternalStorageService.ts11
2 files changed, 6 insertions, 10 deletions
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index e02f09bbe1..392ce09142 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -111,6 +111,7 @@ type Source = {
deliverJobMaxAttempts?: number;
inboxJobMaxAttempts?: number;
+ mediaDirectory?: string;
mediaProxy?: string;
proxyRemoteFiles?: boolean;
videoThumbnailGenerator?: string;
@@ -297,6 +298,7 @@ export type Config = {
frontendManifestExists: boolean;
frontendEmbedEntry: string;
frontendEmbedManifestExists: boolean;
+ mediaDirectory: string;
mediaProxy: string;
externalMediaProxyEnabled: boolean;
videoThumbnailGenerator: string | null;
@@ -463,6 +465,7 @@ export function loadConfig(): Config {
signToActivityPubGet: config.signToActivityPubGet ?? true,
attachLdSignatureForRelays: config.attachLdSignatureForRelays ?? true,
checkActivityPubGetSignature: config.checkActivityPubGetSignature,
+ mediaDirectory: config.mediaDirectory ?? resolve(_dirname, '../../../files'),
mediaProxy: externalMediaProxy ?? internalMediaProxy,
externalMediaProxyEnabled: externalMediaProxy !== null && externalMediaProxy !== internalMediaProxy,
videoThumbnailGenerator: config.videoThumbnailGenerator ?
@@ -638,7 +641,7 @@ function applyEnvOverrides(config: Source) {
_apply_top(['sentryForFrontend', 'vueIntegration', 'tracingOptions', 'timeout']);
_apply_top(['sentryForFrontend', 'browserTracingIntegration', 'routeLabel']);
_apply_top([['clusterLimit', 'deliverJobConcurrency', 'inboxJobConcurrency', 'relashionshipJobConcurrency', 'deliverJobPerSec', 'inboxJobPerSec', 'relashionshipJobPerSec', 'deliverJobMaxAttempts', 'inboxJobMaxAttempts']]);
- _apply_top([['outgoingAddress', 'outgoingAddressFamily', 'proxy', 'proxySmtp', 'mediaProxy', 'proxyRemoteFiles', 'videoThumbnailGenerator']]);
+ _apply_top([['outgoingAddress', 'outgoingAddressFamily', 'proxy', 'proxySmtp', 'mediaDirectory', 'mediaProxy', 'proxyRemoteFiles', 'videoThumbnailGenerator']]);
_apply_top([['maxFileSize', 'maxNoteLength', 'maxRemoteNoteLength', 'maxAltTextLength', 'maxRemoteAltTextLength', 'pidFile', 'filePermissionBits']]);
_apply_top(['import', ['downloadTimeout', 'maxFileSize']]);
_apply_top([['signToActivityPubGet', 'checkActivityPubGetSignature', 'setupPassword', 'disallowExternalApRedirect']]);
diff --git a/packages/backend/src/core/InternalStorageService.ts b/packages/backend/src/core/InternalStorageService.ts
index b00c5796d2..abdbbc61d3 100644
--- a/packages/backend/src/core/InternalStorageService.ts
+++ b/packages/backend/src/core/InternalStorageService.ts
@@ -6,18 +6,11 @@
import * as fs from 'node:fs';
import { copyFile, unlink, writeFile, chmod } from 'node:fs/promises';
import * as Path from 'node:path';
-import { fileURLToPath } from 'node:url';
-import { dirname } from 'node:path';
import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { bindThis } from '@/decorators.js';
-const _filename = fileURLToPath(import.meta.url);
-const _dirname = dirname(_filename);
-
-const path = Path.resolve(_dirname, '../../../../files');
-
@Injectable()
export class InternalStorageService {
constructor(
@@ -25,12 +18,12 @@ export class InternalStorageService {
private config: Config,
) {
// No one should erase the working directory *while the server is running*.
- fs.mkdirSync(path, { recursive: true });
+ fs.mkdirSync(this.config.mediaDirectory, { recursive: true });
}
@bindThis
public resolvePath(key: string) {
- return Path.resolve(path, key);
+ return Path.resolve(this.config.mediaDirectory, key);
}
@bindThis