Skip to content

Commit d13d08c

Browse files
committed
fix: read CORS allowedOrigins from SERVER_ORIGIN env var instead of hardcoding
Replace hardcoded ['http://localhost:3000'] with getAllowedOrigins() helper that reads SERVER_ORIGIN from the env/config system. Falls back to localhost for local dev when SERVER_ORIGIN is not set. Also fixes the pre-existing hardcoded value in BucketProvisionerPreset.
1 parent a03ee0f commit d13d08c

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

graphile/graphile-settings/src/presets/constructive-preset.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { PresignedUrlPreset } from 'graphile-presigned-url-plugin';
1919
import { BucketProvisionerPreset } from 'graphile-bucket-provisioner-plugin';
2020
import { SqlExpressionValidatorPreset } from 'graphile-sql-expression-validator';
2121
import { constructiveUploadFieldDefinitions } from '../upload-resolver';
22-
import { getPresignedUrlS3Config, createBucketNameResolver, createEnsureBucketProvisioned } from '../presigned-url-resolver';
22+
import { getPresignedUrlS3Config, createBucketNameResolver, createEnsureBucketProvisioned, getAllowedOrigins } from '../presigned-url-resolver';
2323
import { getBucketProvisionerConnection } from '../bucket-provisioner-resolver';
2424

2525
/**
@@ -93,11 +93,11 @@ export const ConstructivePreset: GraphileConfig.Preset = {
9393
PresignedUrlPreset({
9494
s3: getPresignedUrlS3Config,
9595
resolveBucketName: createBucketNameResolver(),
96-
ensureBucketProvisioned: createEnsureBucketProvisioned(['http://localhost:3000']),
96+
ensureBucketProvisioned: createEnsureBucketProvisioned(),
9797
}),
9898
BucketProvisionerPreset({
9999
connection: getBucketProvisionerConnection,
100-
allowedOrigins: ['http://localhost:3000'],
100+
allowedOrigins: getAllowedOrigins(),
101101
}),
102102
SqlExpressionValidatorPreset(),
103103
PgTypeMappingsPreset,

graphile/graphile-settings/src/presigned-url-resolver.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ export function createBucketNameResolver(): BucketNameResolver {
8484
};
8585
}
8686

87+
/**
88+
* Resolve CORS allowed origins from the env/config system.
89+
*
90+
* Reads SERVER_ORIGIN from the standard env hierarchy
91+
* (pgpmDefaults → config file → env vars) and wraps it in an array.
92+
* Falls back to ['http://localhost:3000'] for local development.
93+
*/
94+
export function getAllowedOrigins(): string[] {
95+
const { server } = getEnvOptions();
96+
if (server?.origin) return [server.origin];
97+
return ['http://localhost:3000'];
98+
}
99+
87100
/**
88101
* Create a lazy bucket provisioner callback for the presigned URL plugin.
89102
*
@@ -92,13 +105,10 @@ export function createBucketNameResolver(): BucketNameResolver {
92105
* (Block Public Access, CORS, policies, lifecycle rules for temp buckets).
93106
*
94107
* Uses the same S3 connection config as the bucket provisioner plugin
95-
* (getBucketProvisionerConnection) and the same CORS origins.
96-
*
97-
* @param allowedOrigins - CORS origins for presigned URL uploads
108+
* (getBucketProvisionerConnection) and reads CORS origins from
109+
* SERVER_ORIGIN env var (falls back to localhost for local dev).
98110
*/
99-
export function createEnsureBucketProvisioned(
100-
allowedOrigins: string[],
101-
): EnsureBucketProvisioned {
111+
export function createEnsureBucketProvisioned(): EnsureBucketProvisioned {
102112
let provisioner: BucketProvisioner | null = null;
103113

104114
return async (
@@ -109,7 +119,7 @@ export function createEnsureBucketProvisioned(
109119
if (!provisioner) {
110120
provisioner = new BucketProvisioner({
111121
connection: getBucketProvisionerConnection(),
112-
allowedOrigins,
122+
allowedOrigins: getAllowedOrigins(),
113123
});
114124
}
115125

0 commit comments

Comments
 (0)