diff --git a/server/src/server/router/cdn/router.test.ts b/server/src/server/router/cdn/router.test.ts new file mode 100644 index 000000000..c248ca5df --- /dev/null +++ b/server/src/server/router/cdn/router.test.ts @@ -0,0 +1,20 @@ +import t from "tap"; +import { CDNStoreOrOverwrite } from "../../../lib/cdn/cdn"; +import { CloseAllConnections } from "../../../test-utils/close-connections"; +import mockApi from "../../../test-utils/mock-api"; + +t.test("GET /cdn", (t) => { + t.test("Should return this content at the CDN.", async (t) => { + await CDNStoreOrOverwrite("/foo", "hello world"); + + const res = await mockApi.get("/cdn/foo"); + + t.equal(res.body.toString(), "hello world"); + + t.end(); + }); + + t.end(); +}); + +t.teardown(CloseAllConnections); diff --git a/server/src/server/router/cdn/router.ts b/server/src/server/router/cdn/router.ts new file mode 100644 index 000000000..3e9e21df6 --- /dev/null +++ b/server/src/server/router/cdn/router.ts @@ -0,0 +1,21 @@ +import { Router } from "express"; +import { CDNRedirect } from "../../../lib/cdn/cdn"; + +const router: Router = Router({ mergeParams: true }); + +/** + * Redirect all /cdn/ requests to this servers' CDN. This is so the client can refer to + * (url)/cdn, and still have it resolve to our CDN internally. + * + * @example instead of + * + * @name GET /cdn/* + */ +router.get("*", (req, res) => { + console.log(req.originalUrl); + const url = req.originalUrl.replace(/^\/cdn/u, ""); + console.log(url); + return CDNRedirect(res, url); +}); + +export default router; diff --git a/server/src/server/router/router.ts b/server/src/server/router/router.ts index 5b5e6a9a6..3889a44e2 100644 --- a/server/src/server/router/router.ts +++ b/server/src/server/router/router.ts @@ -3,6 +3,7 @@ import { SetRequestPermissions } from "../middleware/auth"; import { RateLimitMiddleware } from "../middleware/rate-limiter"; import apiRouterV1 from "./api/v1/router"; import irRouter from "./ir/router"; +import cdnReRouter from "./cdn/router"; const router: Router = Router({ mergeParams: true }); @@ -15,5 +16,6 @@ router.use("/ir", irRouter); // but also may require custom authentication. router.use(SetRequestPermissions); router.use("/api/v1", apiRouterV1); +router.use("/cdn", cdnReRouter); export default router;