Allow creating from a base64 encoded string in a query param

This commit is contained in:
Eric Allam
2022-04-29 15:04:27 +01:00
parent 55f47324cd
commit 12c5d47d08
2 changed files with 63 additions and 23 deletions
+33 -15
View File
@@ -1,31 +1,49 @@
import { LoaderFunction, redirect } from "remix";
import invariant from "tiny-invariant";
import { sendEvent } from "~/graphJSON.server";
import { createFromUrl } from "~/jsonDoc.server";
import { createFromRawJson, createFromUrl } from "~/jsonDoc.server";
export let loader: LoaderFunction = async ({ request, context }) => {
const url = new URL(request.url);
const jsonUrl = url.searchParams.get("url");
const base64EncodedJson = url.searchParams.get("j");
if (!jsonUrl) {
if (!jsonUrl && !base64EncodedJson) {
return redirect("/");
}
const jsonURL = new URL(jsonUrl);
if (jsonUrl) {
const jsonURL = new URL(jsonUrl);
invariant(jsonURL, "url must be a valid URL");
invariant(jsonURL, "url must be a valid URL");
const doc = await createFromUrl(jsonURL, jsonURL.href);
const doc = await createFromUrl(jsonURL, jsonURL.href);
context.waitUntil(
sendEvent({
type: "create",
from: "url",
hostname: jsonURL.hostname,
id: doc.id,
source: url.searchParams.get("utm_source") ?? url.hostname,
})
);
context.waitUntil(
sendEvent({
type: "create",
from: "url",
hostname: jsonURL.hostname,
id: doc.id,
source: url.searchParams.get("utm_source") ?? url.hostname,
})
);
return redirect(`/j/${doc.id}`);
return redirect(`/j/${doc.id}`);
}
if (base64EncodedJson) {
const doc = await createFromRawJson("Untitled", atob(base64EncodedJson));
context.waitUntil(
sendEvent({
type: "create",
from: "base64",
id: doc.id,
source: url.searchParams.get("utm_source"),
})
);
return redirect(`/j/${doc.id}`);
}
};