diff options
| author | soruly <[email protected]> | 2020-04-02 23:54:22 +0800 |
|---|---|---|
| committer | soruly <[email protected]> | 2020-04-02 23:54:22 +0800 |
| commit | 00cddb2266885bb70b5336f2e5c1aefae0e096f8 (patch) | |
| tree | 66b30f85e9a998e2a184bcbe4e75e64a68152585 /api | |
| download | trace.moe-image-proxy-00cddb2266885bb70b5336f2e5c1aefae0e096f8.tar.xz trace.moe-image-proxy-00cddb2266885bb70b5336f2e5c1aefae0e096f8.zip | |
Init commit
Diffstat (limited to 'api')
| -rw-r--r-- | api/image-proxy.ts | 36 |
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()); +}; |