diff --git a/app/routes/_index.tsx b/app/routes/_index.tsx index f31c562..173e0ff 100644 --- a/app/routes/_index.tsx +++ b/app/routes/_index.tsx @@ -1,16 +1,85 @@ -import { Box, Container, Text } from "@chakra-ui/react"; +import { Box, Container, Flex, Heading } from "@chakra-ui/react"; +import { type LinksFunction } from "@remix-run/cloudflare"; +import { useLoaderData } from "@remix-run/react"; +import stylesheet from "../styles/_index.css"; + +export const links: LinksFunction = () => { + return [{ href: stylesheet, rel: "stylesheet" }]; +}; + +export async function loader({ + context, +}: { + context: RequestContext; +}): Promise { + if (context.request.headers.get("Save-Data") === "on") return []; + + const signingKey = await crypto.subtle.importKey( + "raw", + // @ts-expect-error + Uint8Array.from(atob(context.env.URL_SIGNING_KEY), (m) => m.codePointAt(0)), + { hash: "SHA-1", name: "HMAC" }, + false, + ["sign"], + ); + + const expiration = Math.floor(Date.now() / 1000) + 600; + const baseURLs = [ + `https://mediaproxy.carcrushers.cc/trailer.webm?Expires=${expiration}&KeyName=portal-media-linkgen`, + `https://mediaproxy.carcrushers.cc/trailer.mp4?Expires=${expiration}&KeyName=portal-media-linkgen`, + ]; + + const signaturePromises = []; + + for (const baseURL of baseURLs) + signaturePromises.push( + crypto.subtle.sign("HMAC", signingKey, new TextEncoder().encode(baseURL)), + ); + + const signatures = Array.from( + (await Promise.allSettled(signaturePromises)).values(), + ); + const urls = []; + + for (let i = 0; i < baseURLs.length; i++) { + const sig = signatures[i]; + + if (sig.status === "rejected") + throw new Response(`Failed to create signature for ${baseURLs[i]}`, { + status: 500, + }); + + const urlSig = btoa(String.fromCharCode(...new Uint8Array(sig.value))) + .replaceAll("+", "-") + .replaceAll("/", "_") + .replaceAll("=", ""); + + urls.push(`${baseURLs[i]}&Signature=${urlSig}`); + } + + return urls; +} export default function () { + const sourceURLs = useLoaderData(); + return ( <> - - - - srfidukjghdiuftgrteutgrtsu,k jhsrte h hjgtsredbfdgns srthhfg h fgdyh - y - - - + + + + Fueling Destruction since 2012 + + ); }