From 9ebfa7b79596f48bafbec2fa1dc434d0192b0dfb Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Tue, 28 Apr 2020 01:03:32 -0400 Subject: [PATCH] Support file uploads --- experiments/skin-database/index.js | 22 ++++++++++++++++ experiments/skin-database/package.json | 5 ++-- experiments/skin-database/yarn.lock | 35 ++++++++++++++++---------- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/experiments/skin-database/index.js b/experiments/skin-database/index.js index f50e4202..7f6a7475 100644 --- a/experiments/skin-database/index.js +++ b/experiments/skin-database/index.js @@ -6,11 +6,18 @@ const iaItems = db.get("internetArchiveItems"); const Skins = require("./data/skins"); const port = 3001; const graphql = require("./graphql").default; +const fileUpload = require("express-fileupload"); +const { addSkinFromBuffer } = require("./addSkin"); // TODO: Look into 766c4fad9088037ab4839b18292be8b1 // Has huge number of filenames in info.json app.set("json spaces", 2); +app.use( + fileUpload({ + limits: { fileSize: 50 * 1024 * 1024 }, + }) +); app.get("/", async (req, res) => { res.send("Hello World!"); @@ -26,6 +33,21 @@ app.get("/items/:identifier", async (req, res) => { res.json(item); }); +app.post("/skins/", async (req, res) => { + const files = req.files; + if (files == null) { + res.status(500).send({ error: "No file supplied" }); + return; + } + const upload = req.files.skin; + if (upload == null) { + res.status(500).send({ error: "No file supplied" }); + return; + } + result = await addSkinFromBuffer(upload.data, upload.name, "Web API"); + res.json({ ...result, filename: upload.name }); +}); + app.get("/skins/:md5", async (req, res) => { const { md5 } = req.params; const skin = await Skins.getSkinByMd5(md5); diff --git a/experiments/skin-database/package.json b/experiments/skin-database/package.json index 36e895db..bba01d2a 100644 --- a/experiments/skin-database/package.json +++ b/experiments/skin-database/package.json @@ -7,6 +7,7 @@ "aws-sdk": "^2.663.0", "discord.js": "^11.4.2", "express": "^4.17.1", + "express-fileupload": "^1.1.7-alpha.3", "express-graphql": "^0.9.0", "graphql": "^14.5.8", "image-hash": "^3.5.1", @@ -30,7 +31,7 @@ }, "prettier": {}, "devDependencies": { - "typescript": "^3.8.3", - "prettier": "^2.0.5" + "prettier": "^2.0.5", + "typescript": "^3.8.3" } } diff --git a/experiments/skin-database/yarn.lock b/experiments/skin-database/yarn.lock index d0aee75a..0a5318f6 100644 --- a/experiments/skin-database/yarn.lock +++ b/experiments/skin-database/yarn.lock @@ -137,7 +137,6 @@ asynckit@^0.4.0: aws-sdk@^2.663.0: version "2.663.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.663.0.tgz#003d8cc318635d1bf67deda586f5e5d583b7e384" - integrity sha512-xPOszNOaSXTRs8VGXaMbhTKXdlq2TlDRfFRVEGxkZrtow87hEIVZGAUSUme2e3GHqHUDnySwcufrUpUPUizOKQ== dependencies: buffer "4.9.1" events "1.1.1" @@ -291,6 +290,12 @@ buffer@^5.2.1: base64-js "^1.0.2" ieee754 "^1.1.4" +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + dependencies: + dicer "0.3.0" + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -598,6 +603,12 @@ diagnostics@^1.1.1: enabled "1.0.x" kuler "1.0.x" +dicer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + dependencies: + streamsearch "0.1.2" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -607,7 +618,6 @@ dir-glob@^3.0.1: discord.js@^11.4.2: version "11.6.4" resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-11.6.4.tgz#76bab98de08d7586ecde44c063ef310e6b9a2700" - integrity sha512-cK6rH1PuGjSjpmEQbnpuTxq1Yv8B89SotyKUFcr4RhnsiZnfBfDOev7DD7v5vhtEyyj51NuMWFoRJzgy/m08Uw== dependencies: long "^4.0.0" prism-media "^0.0.4" @@ -759,6 +769,12 @@ executable@^4.1.0: dependencies: pify "^2.2.0" +express-fileupload@^1.1.7-alpha.3: + version "1.1.7-alpha.3" + resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.1.7-alpha.3.tgz#7c09f42aeacb835a50979f241d7b2850d54ed92d" + dependencies: + busboy "^0.3.1" + express-graphql@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.9.0.tgz#00fd8552f866bac5c9a4612b2c4c82076107b3c2" @@ -1470,7 +1486,6 @@ logform@^2.1.1: long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== longest@^1.0.0: version "1.0.1" @@ -1532,7 +1547,6 @@ map-obj@^1.0.0, map-obj@^1.0.1: md5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= dependencies: charenc "~0.0.1" crypt "~0.0.1" @@ -1722,7 +1736,6 @@ nice-try@^1.0.4: node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" @@ -1979,12 +1992,10 @@ prepend-http@^2.0.0: prettier@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" - integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== prism-media@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-0.0.4.tgz#df5ddc6463670c97ff0e9cbac3c3e0db18df326f" - integrity sha512-dG2w7WtovUa4SiYTdWn9H8Bd4JNdei2djtkP/Bk9fXq81j5Q15ZPHYSwhUVvBRbp5zMkGtu0Yk62HuMcly0pRw== process-nextick-args@~2.0.0: version "2.0.0" @@ -2206,7 +2217,6 @@ reusify@^1.0.0: rgb-hex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-3.0.0.tgz#eab0168cc1279563b18a14605315389142e2e487" - integrity sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg== rimraf@^2.5.4, rimraf@^2.6.1, rimraf@~2.6.2: version "2.6.3" @@ -2312,7 +2322,6 @@ shebang-regex@^1.0.0: shell-escape@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/shell-escape/-/shell-escape-0.2.0.tgz#68fd025eb0490b4f567a027f0bf22480b5f84133" - integrity sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM= signal-exit@^3.0.0: version "3.0.2" @@ -2331,7 +2340,6 @@ slash@^3.0.0: snekfetch@^3.6.4: version "3.6.4" resolved "https://registry.yarnpkg.com/snekfetch/-/snekfetch-3.6.4.tgz#d13e80a616d892f3d38daae4289f4d258a645120" - integrity sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw== sort-keys-length@^1.0.0: version "1.0.1" @@ -2409,6 +2417,10 @@ stack-trace@0.0.x: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -2566,7 +2578,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: tweetnacl@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -2582,7 +2593,6 @@ typedarray@^0.0.6: typescript@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== unbzip2-stream@^1.0.9: version "1.3.3" @@ -2705,7 +2715,6 @@ wrappy@1: ws@^6.0.0, ws@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0"