From cd7a924ffecde6d0e4e0fa5b03372f758f532431 Mon Sep 17 00:00:00 2001 From: Sara Vieira Date: Tue, 19 Jul 2022 12:37:45 +0200 Subject: [PATCH] have env check for variables --- apps/designer/env-check.js | 21 +++++++++++++++++++++ packages/asset-uploader/src/constants.ts | 6 ++++++ packages/asset-uploader/src/index.ts | 14 +++++++------- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/apps/designer/env-check.js b/apps/designer/env-check.js index 6f4d96c545..73f0fea2d8 100644 --- a/apps/designer/env-check.js +++ b/apps/designer/env-check.js @@ -14,6 +14,12 @@ require("dotenv").config(); const REQUIRED_ENVS = ["DATABASE_URL", "AUTH_SECRET"]; +const S3_KEYS = [ + "S3_ENDPOINT", + "S3_REGION", + "S3_SECRET_ACCESS_KEY", + "S3_ACCESS_KEY_ID", +]; const errors = []; @@ -30,6 +36,21 @@ if (process.env.DEPLOYMENT_ENVIRONMENT === "production") { } } +// check for when user has some S3 env variables but not all required +if ( + S3_KEYS.some((key) => Object.keys(process.env).includes(key)) && + !S3_KEYS.every((key) => Object.keys(process.env).includes(key)) +) { + const notIncluded = S3_KEYS.filter( + (key) => !Object.keys(process.env).includes(key) + ); + errors.push( + `👉 You don't have all the necessary envriroment variables to have S3 asset hosting, you are missing ${notIncluded.join( + "," + )}` + ); +} + if (errors.length) { // eslint-disable-next-line no-console console.error("❌ Invalid environment variables:"); diff --git a/packages/asset-uploader/src/constants.ts b/packages/asset-uploader/src/constants.ts index 6750073003..3db345548f 100644 --- a/packages/asset-uploader/src/constants.ts +++ b/packages/asset-uploader/src/constants.ts @@ -1 +1,7 @@ export const DEFAULT_UPLPOAD_PATH = "uploads"; +export const S3_ENV_KEYS = [ + "S3_ENDPOINT", + "S3_REGION", + "S3_SECRET_ACCESS_KEY", + "S3_ACCESS_KEY_ID", +]; diff --git a/packages/asset-uploader/src/index.ts b/packages/asset-uploader/src/index.ts index 3020a60b73..523f0bbcdc 100644 --- a/packages/asset-uploader/src/index.ts +++ b/packages/asset-uploader/src/index.ts @@ -1,4 +1,4 @@ -import { DEFAULT_UPLPOAD_PATH } from "./constants"; +import { DEFAULT_UPLPOAD_PATH, S3_ENV_KEYS } from "./constants"; import path from "path"; import { unstable_createFileUploadHandler, @@ -8,6 +8,10 @@ import { s3UploadHandler } from "./targets/s3/handler"; import { uploadToS3 } from "./targets/s3/uploader"; import { uploadToDisk } from "./targets/disk/upload"; +const isS3Upload = Boolean( + S3_ENV_KEYS.every((key) => Object.keys(process.env).includes(key)) +); + export const uploadAsset = async ({ request, projectId, @@ -19,17 +23,13 @@ export const uploadAsset = async ({ db: unknown; dirname: string; }) => { - const IS_S3_UPLOAD = - process.env.S3_ENDPOINT && - process.env.S3_SECRET_ACCESS_KEY && - process.env.S3_ACCESS_KEY_ID; const uploads = path.join(dirname, "../public"); const folderInPublic = process.env.FILE_UPLOAD_PATH || DEFAULT_UPLPOAD_PATH; const directory = path.join(uploads, folderInPublic); try { const formData = await unstable_parseMultipartFormData( request, - IS_S3_UPLOAD + isS3Upload ? (file) => s3UploadHandler(file) : unstable_createFileUploadHandler({ maxPartSize: 10_000_000, @@ -37,7 +37,7 @@ export const uploadAsset = async ({ file: ({ filename }) => filename, }) ); - if (IS_S3_UPLOAD) { + if (isS3Upload) { await uploadToS3({ projectId, formData,