diff --git a/VoidCat/Controllers/UploadController.cs b/VoidCat/Controllers/UploadController.cs index 744c59e..76e07dc 100644 --- a/VoidCat/Controllers/UploadController.cs +++ b/VoidCat/Controllers/UploadController.cs @@ -57,6 +57,8 @@ namespace VoidCat.Controllers /// True if you want to return only the url of the file in the response /// Returns [HttpPost] + [HttpOptions] + [HttpHead] [DisableRequestSizeLimit] [DisableFormValueModelBinding] [Authorize(AuthenticationSchemes = "Bearer,Nostr", Policy = Policies.RequireNostr)] @@ -73,6 +75,12 @@ namespace VoidCat.Controllers throw new InvalidOperationException("Site is in maintenance mode"); } + var bodyLength = Request.ContentLength ?? 0; + if ((ulong)bodyLength >= (_settings.MaxFileSize ?? ulong.MaxValue)) + { + throw new InvalidOperationException("File size too large"); + } + var uid = HttpContext.GetUserId(); var pubkey = HttpContext.GetPubKey(); if (uid == default && !string.IsNullOrEmpty(pubkey)) diff --git a/VoidCat/Model/VoidSettings.cs b/VoidCat/Model/VoidSettings.cs index 7ffb5d0..cb88f3d 100644 --- a/VoidCat/Model/VoidSettings.cs +++ b/VoidCat/Model/VoidSettings.cs @@ -26,6 +26,11 @@ namespace VoidCat.Model /// Size in bytes to split uploads into chunks /// public ulong? UploadSegmentSize { get; init; } + + /// + /// Max file size for upload + /// + public ulong? MaxFileSize { get; init; } /// /// Tor configuration diff --git a/VoidCat/VoidCat.csproj b/VoidCat/VoidCat.csproj index 8accc52..d603337 100644 --- a/VoidCat/VoidCat.csproj +++ b/VoidCat/VoidCat.csproj @@ -50,8 +50,9 @@ - - + + + @@ -90,9 +91,6 @@ - - - diff --git a/VoidCat/spa/src/app/package.json b/VoidCat/spa/src/app/package.json index ec95b91..c479152 100644 --- a/VoidCat/spa/src/app/package.json +++ b/VoidCat/spa/src/app/package.json @@ -2,7 +2,6 @@ "name": "@void-cat/app", "version": "0.1.0", "private": true, - "proxy": "http://localhost:7195", "dependencies": { "@hcaptcha/react-hcaptcha": "^1.1.1", "@reduxjs/toolkit": "^1.7.2", @@ -36,7 +35,7 @@ "vite-plugin-version-mark": "^0.0.10" }, "scripts": { - "start": "vite start", + "start": "vite", "build": "vite build" }, "eslintConfig": { diff --git a/VoidCat/spa/src/app/src/setupProxy.js b/VoidCat/spa/src/app/src/setupProxy.js deleted file mode 100644 index cc350c0..0000000 --- a/VoidCat/spa/src/app/src/setupProxy.js +++ /dev/null @@ -1,18 +0,0 @@ -const { createProxyMiddleware } = require("http-proxy-middleware"); -const settings = require("../package.json"); - -module.exports = function (app) { - const proxy = createProxyMiddleware({ - target: settings.proxy, - changeOrigin: true, - secure: false, - }); - - app.use("/admin", proxy); - app.use("/d", proxy); - app.use("/info", proxy); - app.use("/upload", proxy); - app.use("/auth", proxy); - app.use("/swagger", proxy); - app.use("/user", proxy); -}; diff --git a/VoidCat/spa/yarn.lock b/VoidCat/spa/yarn.lock index 55d7afe..26a0656 100644 --- a/VoidCat/spa/yarn.lock +++ b/VoidCat/spa/yarn.lock @@ -3274,19 +3274,6 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.12": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: b82e432bfc42075d4f6218e5ed5c4a7cdeb087e0416f969fc65a755c41d129d7e369c93e9a9dc59d43291327aa8d7cd149f3573d1c3b54d0192561d02bb225eb - languageName: node - linkType: hard - "@types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" @@ -3414,15 +3401,6 @@ __metadata: languageName: node linkType: hard -"@types/http-proxy@npm:^1.17.8": - version: 1.17.11 - resolution: "@types/http-proxy@npm:1.17.11" - dependencies: - "@types/node": "npm:*" - checksum: 7cda456611b4adfdd87e4317745af643153d502576fb7095806d5b1b397b9a878b105e14abff9b7ab1d1c71132b61b5fc7052461f766165963950f1b46e18315 - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -3458,13 +3436,6 @@ __metadata: languageName: node linkType: hard -"@types/preval.macro@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/preval.macro@npm:3.0.0" - checksum: 76aa51a31bb4632383763f283297c63f7dc664ea85e637ddd9b8a91c6583e690a0306d021dc7bdce52d1f3898f798cec5bb0ae9ae072b8999f1a79d56991616a - languageName: node - linkType: hard - "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -3735,7 +3706,6 @@ __metadata: "@hcaptcha/react-hcaptcha": "npm:^1.1.1" "@reduxjs/toolkit": "npm:^1.7.2" "@types/node": "npm:^20.5.3" - "@types/preval.macro": "npm:^3.0.0" "@types/qrcode.react": "npm:^1.0.2" "@types/react": "npm:^18.2.0" "@types/react-dom": "npm:^18.2.1" @@ -3746,9 +3716,7 @@ __metadata: "@void-cat/api": "npm:^1.0.10" eslint: "npm:^8.47.0" eslint-config-react-app: "npm:^7.0.1" - http-proxy-middleware: "npm:^2.0.6" moment: "npm:^2.29.4" - preval.macro: "npm:^5.0.0" prop-types: "npm:^15.8.1" qrcode.react: "npm:^3.1.0" react: "npm:^18.2.0" @@ -4024,7 +3992,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-macros@npm:^3.0.1, babel-plugin-macros@npm:^3.1.0": +"babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" dependencies: @@ -4107,18 +4075,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-preval@npm:^5.0.0": - version: 5.1.0 - resolution: "babel-plugin-preval@npm:5.1.0" - dependencies: - "@babel/runtime": "npm:^7.12.5" - "@types/babel__core": "npm:^7.1.12" - babel-plugin-macros: "npm:^3.0.1" - require-from-string: "npm:^2.0.2" - checksum: d4507d1f134a610b8a2d4de911afe147eba7aab782ea34e7b687e99bdfd2e28d2056e16b7fa4b66acb59bcbd681acc40e851a20f03f7be719ee4cc51fc88eee0 - languageName: node - linkType: hard - "babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": version: 0.4.24 resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" @@ -5393,7 +5349,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.1": +"eventemitter3@npm:^4.0.1": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346 @@ -5524,16 +5480,6 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" - peerDependenciesMeta: - debug: - optional: true - checksum: 8be0d39919770054812537d376850ccde0b4762b0501c440bd08724971a078123b55f57704f2984e0664fecc0c86adea85add63295804d9dce401cd9604c91d3 - languageName: node - linkType: hard - "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -5922,35 +5868,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.6": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" - dependencies: - "@types/http-proxy": "npm:^1.17.8" - http-proxy: "npm:^1.18.1" - is-glob: "npm:^4.0.1" - is-plain-obj: "npm:^3.0.0" - micromatch: "npm:^4.0.2" - peerDependencies: - "@types/express": ^4.17.13 - peerDependenciesMeta: - "@types/express": - optional: true - checksum: 768e7ae5a422bbf4b866b64105b4c2d1f468916b7b0e9c96750551c7732383069b411aa7753eb7b34eab113e4f77fb770122cb7fb9c8ec87d138d5ddaafda891 - languageName: node - linkType: hard - -"http-proxy@npm:^1.18.1": - version: 1.18.1 - resolution: "http-proxy@npm:1.18.1" - dependencies: - eventemitter3: "npm:^4.0.0" - follow-redirects: "npm:^1.0.0" - requires-port: "npm:^1.0.0" - checksum: 2489e98aba70adbfd8b9d41ed1ff43528be4598c88616c558b109a09eaffe4bb35e551b6c75ac42ed7d948bb7530a22a2be6ef4f0cecacb5927be139f4274594 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" @@ -6219,13 +6136,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^3.0.0": - version: 3.0.0 - resolution: "is-plain-obj@npm:3.0.0" - checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c - languageName: node - linkType: hard - "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -6676,7 +6586,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -7191,15 +7101,6 @@ __metadata: languageName: node linkType: hard -"preval.macro@npm:^5.0.0": - version: 5.0.0 - resolution: "preval.macro@npm:5.0.0" - dependencies: - babel-plugin-preval: "npm:^5.0.0" - checksum: 4e58715a7dacd5999c85f8f930029251921955fb46f981a54848c21a370a73efb1825eb9ab08a32cb3a53978b489c6a55ebc1bbddf6eceaef2aa297e0a007401 - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -7592,13 +7493,6 @@ __metadata: languageName: node linkType: hard -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: 878880ee78ccdce372784f62f52a272048e2d0827c29ae31e7f99da18b62a2b9463ea03a75f277352f4697c100183debb0532371ad515a2d49d4bfe596dd4c20 - languageName: node - linkType: hard - "reselect@npm:^4.1.8": version: 4.1.8 resolution: "reselect@npm:4.1.8"