aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorsoruly <[email protected]>2020-04-02 23:54:22 +0800
committersoruly <[email protected]>2020-04-02 23:54:22 +0800
commit00cddb2266885bb70b5336f2e5c1aefae0e096f8 (patch)
tree66b30f85e9a998e2a184bcbe4e75e64a68152585 /api
downloadtrace.moe-image-proxy-00cddb2266885bb70b5336f2e5c1aefae0e096f8.tar.xz
trace.moe-image-proxy-00cddb2266885bb70b5336f2e5c1aefae0e096f8.zip
Init commit
Diffstat (limited to 'api')
-rw-r--r--api/image-proxy.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/api/image-proxy.ts b/api/image-proxy.ts
new file mode 100644
index 0000000..79c7d6e
--- /dev/null
+++ b/api/image-proxy.ts
@@ -0,0 +1,36 @@
+import { NowRequest, NowResponse } from "@now/node";
+import fetch from "node-fetch";
+
+export default async (request: NowRequest, response: NowResponse) => {
+ const { url } = request.query;
+ const imageURL = Array.isArray(url) ? url[0] : url;
+ if (!imageURL) {
+ return response.status(400).send("Error: No url from param");
+ }
+
+ try {
+ new URL(imageURL);
+ } catch (e) {
+ return response.status(400).send("Error: Invalid URL string");
+ }
+
+ const res = await fetch(imageURL, {
+ headers: {
+ "User-Agent": request.headers["user-agent"],
+ Referer: new URL(imageURL).origin,
+ },
+ redirect: "follow",
+ });
+
+ if (res.status >= 400) {
+ return response.status(res.status).send(await res.text());
+ }
+
+ if (res.headers.get("Content-Type").split("/")[0].toLowerCase() !== "image") {
+ return response.status(400).send("Error: Content-Type is not image");
+ }
+
+ response.setHeader("Content-Type", res.headers.get("Content-Type"));
+
+ return response.status(200).send(await res.buffer());
+};