diff --git a/.env.example b/.env.example index 74c686b..55fe31b 100644 --- a/.env.example +++ b/.env.example @@ -3,3 +3,4 @@ CUSTOM_HOST_NAME=SharX IMAGE_STORAGE_DIR=data/images PORT=8080 JWT_SECRET=very-insecure-secret +FRONTEND_URL=http://localhost:8000 diff --git a/package.json b/package.json index d96743f..1993782 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "devDependencies": { "@ryansonshine/commitizen": "4.2.8", "@ryansonshine/cz-conventional-changelog": "3.3.4", + "@types/cors": "^2.8.12", "@types/express": "4.17.13", "@types/jsonwebtoken": "^8.5.8", "@types/multer": "1.4.7", @@ -39,6 +40,7 @@ }, "dependencies": { "@prisma/client": "^4.0.0", + "cors": "^2.8.5", "dotenv": "^16.0.1", "express": "^4.18.1", "got": "^12.0.0", diff --git a/src/index.ts b/src/index.ts index 0dcb549..46715d8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import { PrismaClient } from "@prisma/client"; import { readdirSync } from "fs"; import { join } from "path"; import { randomBytes } from "crypto"; +import cors from "cors"; export let startTime: Date; @@ -43,6 +44,7 @@ const app = express(); const port = process.env.PORT || 8080; app.use(express.json()); +app.use(cors({ origin: process.env.FRONTEND_URL || true })); if (!process.env.JWT_SECRET) { signale.warn("$JWT_SECRET is not set. Using a random one. That means it will change every time the container is restarted and log everyone out!"); diff --git a/yarn.lock b/yarn.lock index a6e76da..976cb2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -632,6 +632,11 @@ dependencies: "@types/node" "*" +"@types/cors@^2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + "@types/express-serve-static-core@^4.17.18": version "4.17.29" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" @@ -1548,6 +1553,14 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig-typescript-loader@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz#7e7ce6064af041c910e1e43fb0fd9625cee56e93" @@ -3935,7 +3948,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5367,7 +5380,7 @@ validate-npm-package-name@^4.0.0: dependencies: builtins "^5.0.0" -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==