Something went wrong. Try again.
(READ ONLY) Margin is an open annotation layer for the internet. Powered by the AT Protocol.
margin.at
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081const ROOT_DOMAIN = "margin.at";
export default { async fetch(request, env, ctx) { const url = new URL(request.url); const hostname = (request.headers.get("x-forwarded-host") || url.hostname).toLowerCase();
if (hostname === ROOT_DOMAIN || hostname.endsWith("." + ROOT_DOMAIN)) { return fetch(request); }
const handle = await env.ROUTING.get("host:" + hostname); if (!handle) { return new Response("Reading room not found", { status: 404 }); }
const path = url.pathname; const originUrl = new URL(request.url); originUrl.hostname = ROOT_DOMAIN; const pathPrefix = "/reading-room/" + handle; let isNote = false;
if (path === "/" || path === "") { originUrl.pathname = pathPrefix; } else if (path === "/note" || path.startsWith("/note/")) { isNote = true; originUrl.pathname = pathPrefix + "/note"; } else if (path === "/feed" || path === "/feed.xml" || path === "/rss") { originUrl.pathname = "/api/reading-room/rss/" + handle; } else if (path === "/.well-known/site.standard.publication" || path.startsWith("/.well-known/site.standard.publication/")) { originUrl.pathname = "/.well-known/site.standard.publication/reading-room/" + handle; } else if ( path.startsWith("/api/reading-room/") || path.startsWith("/api/avatar/") || path.startsWith("/_astro/") || path.startsWith("/dist/") || path.startsWith("/fonts/") || /\.(js|css|woff2?|ttf|svg|png|jpg|jpeg|gif|ico|webp|webmanifest|map)$/.test(path) ) { originUrl.pathname = path; } else { return Response.redirect("https://" + ROOT_DOMAIN + path + url.search, 302); }
const modifiedRequest = new Request(originUrl, { method: request.method, headers: new Headers(request.headers), body: request.body, redirect: "follow", }); modifiedRequest.headers.set("X-Reading-Room-Handle", handle); modifiedRequest.headers.set("X-Reading-Room-Domain", hostname); modifiedRequest.headers.delete("host"); modifiedRequest.headers.set("host", ROOT_DOMAIN); modifiedRequest.headers.delete("origin"); modifiedRequest.headers.delete("referer");
const response = await fetch(modifiedRequest);
const contentType = response.headers.get("content-type") || ""; if (contentType.includes("text/html")) { let html = await response.text(); const inject = `<script>window.__READING_ROOM_HANDLE__=${JSON.stringify(handle)};window.__READING_ROOM_IS_NOTE__=${isNote};</script>`; html = html.replace("</head>", inject + "</head>"); const newResponse = new Response(html, { status: response.status, statusText: response.statusText, headers: response.headers, }); newResponse.headers.set("X-Reading-Room-Domain", hostname); newResponse.headers.set("Access-Control-Allow-Origin", "*"); return newResponse; }
const newResponse = new Response(response.body, response); newResponse.headers.set("X-Reading-Room-Domain", hostname); newResponse.headers.set("Access-Control-Allow-Origin", "*"); return newResponse; },};