diff --git a/prisma/migrations/20251001031548_core_trust_proxy/migration.sql b/prisma/migrations/20251001031548_core_trust_proxy/migration.sql new file mode 100644 index 00000000..2b75cfc0 --- /dev/null +++ b/prisma/migrations/20251001031548_core_trust_proxy/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "public"."Zipline" ADD COLUMN "coreTrustProxy" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d2e2cbb4..dbfc719c 100755 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -20,6 +20,7 @@ model Zipline { coreReturnHttpsUrls Boolean @default(false) coreDefaultDomain String? coreTempDirectory String // default join(tmpdir(), 'zipline') + coreTrustProxy Boolean @default(false) chunksEnabled Boolean @default(true) chunksMax String @default("95mb") diff --git a/src/components/pages/serverSettings/parts/Core.tsx b/src/components/pages/serverSettings/parts/Core.tsx index b4537323..d694e0bd 100644 --- a/src/components/pages/serverSettings/parts/Core.tsx +++ b/src/components/pages/serverSettings/parts/Core.tsx @@ -17,11 +17,13 @@ export default function Core({ coreReturnHttpsUrls: boolean; coreDefaultDomain: string | null | undefined; coreTempDirectory: string; + coreTrustProxy: boolean; }>({ initialValues: { coreReturnHttpsUrls: false, coreDefaultDomain: '', coreTempDirectory: '/tmp/zipline', + coreTrustProxy: false, }, enhanceGetInputProps: (payload) => ({ disabled: data?.tampered?.includes(payload.field) || false, @@ -45,6 +47,7 @@ export default function Core({ coreReturnHttpsUrls: data.settings.coreReturnHttpsUrls ?? false, coreDefaultDomain: data.settings.coreDefaultDomain ?? '', coreTempDirectory: data.settings.coreTempDirectory ?? '/tmp/zipline', + coreTrustProxy: data.settings.coreTrustProxy ?? false, }); }, [data]); @@ -55,14 +58,20 @@ export default function Core({ Core
- - + + + + resolve(s)) .default(join(tmpdir(), 'zipline')), + trustProxy: z.boolean().default(false), }), chunks: z.object({ max: z.string().default('95mb'), diff --git a/src/server/index.ts b/src/server/index.ts index 72190396..57500094 100755 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -65,6 +65,13 @@ async function main() { await mkdir(config.core.tempDirectory, { recursive: true }); + logger.debug('creating server', { + port: config.core.port, + hostname: config.core.hostname, + ssl: notNull(config.ssl.key, config.ssl.cert), + trustProxy: config.core.trustProxy, + }); + const server = fastify({ https: notNull(config.ssl.key, config.ssl.cert) ? { @@ -72,6 +79,7 @@ async function main() { cert: await readFile(config.ssl.cert!, 'utf8'), } : null, + trustProxy: config.core.trustProxy, }); await server.register(fastifyCookie, { diff --git a/src/server/routes/api/server/settings/index.ts b/src/server/routes/api/server/settings/index.ts index 654188f3..c8071da7 100644 --- a/src/server/routes/api/server/settings/index.ts +++ b/src/server/routes/api/server/settings/index.ts @@ -118,6 +118,7 @@ export default fastifyPlugin( .nullable() .refine((value) => !value || /^[a-z0-9-.]+$/.test(value), 'Invalid domain format'), coreReturnHttpsUrls: z.boolean(), + coreTrustProxy: z.boolean(), chunksEnabled: z.boolean(), chunksMax: zBytes,