DodoApp: Public API to fetch allowed networks

Update landing page to communicate with dodo-app backend.

Change-Id: I269ad5150b9203eca9c1c9cc9a8a99b55c583419
diff --git a/apps/landing/hugo.toml b/apps/landing/hugo.toml
index 62892eb..b7cb8bc 100644
--- a/apps/landing/hugo.toml
+++ b/apps/landing/hugo.toml
@@ -1,3 +1,9 @@
 baseURL = 'https://example.org/'
 languageCode = 'en-us'
 title = 'Dodo'
+[[headers]]
+  for = '/**'
+  [headers.values]
+    Content-Security-Policy = 'connect-src app.v1.dodo.cloud'
+    Referrer-Policy = 'strict-origin-when-cross-origin'
+    X-Content-Type-Options = 'nosniff'
diff --git a/apps/landing/layouts/partials/register-form.html b/apps/landing/layouts/partials/register-form.html
index 1e1638c..3f35896 100644
--- a/apps/landing/layouts/partials/register-form.html
+++ b/apps/landing/layouts/partials/register-form.html
@@ -1,14 +1,19 @@
 <div class="form-container-footer">
-    <form method="POST" action="/register" class="form-group-footer">
+    <form id="register-form" method="POST" action="/register" class="form-group-footer" onsubmit="return register()">
 		<label>
 			domain
-			<select name="domain">
+			<select id="network" name="domain">
 				<option value="dodoapp.xyz">dodoapp.xyz</option>
 			</select>
 		</label>
 		<label>
 			subdomain
-			<input type="text" name="subdomain" />
+			<input id="subdomain" type="text" name="subdomain" />
+		</label>
+		<label>
+			application type
+			<select id="app-type" name="app-type">
+			</select>
 		</label>
         <label>
 			ssh public key
diff --git a/apps/landing/static/js/main.js b/apps/landing/static/js/main.js
index a068560..24e651e 100644
--- a/apps/landing/static/js/main.js
+++ b/apps/landing/static/js/main.js
@@ -139,3 +139,55 @@
         fact.addEventListener("mouseover", () => handleMouseover(facts[index].params.image, index, facts[index].params.title));
     });
 });
+
+async function loadPublicData() {
+  let networkSelect = document.querySelector("select#network");
+  if (networkSelect === undefined) {
+	return;
+  }
+  networkSelect.innerHTML = "";
+  let appTypeSelect = document.querySelector("select#app-type");
+  if (appTypeSelect === undefined) {
+	return;
+  }
+  appTypeSelect.innerHTML = "";
+  let resp = await fetch("https://app.v1.dodo.cloud/api/public-data");
+  if (!resp.ok) {
+	return;
+  }
+  let data = await resp.json();
+  data.networks.forEach((network) => {
+	let opt = document.createElement("option");
+	opt.setAttribute("value", network.domain);
+	opt.innerHTML = network.domain;
+	networkSelect.appendChild(opt);
+  });
+  data.types.forEach((t) => {
+	let opt = document.createElement("option");
+	opt.setAttribute("value", t);
+	opt.innerHTML = t;
+	appTypeSelect.appendChild(opt);
+  });
+}
+
+function register() {
+  var data = {
+	type: document.getElementById("app-type").value,
+	adminPublicKey: document.getElementById("public-key").value,
+	network: document.getElementById("network").value,
+	subdomain: document.getElementById("subdomain").value,
+  };
+  fetch("https://app.v1.dodo.cloud/api/apps", {
+	method: "POST",
+	body: JSON.stringify(data),
+  }).then((resp) => {
+	resp.json().then((r) => {
+	  console.log(r);
+	});
+  });
+  return false;
+}
+
+document.addEventListener("DOMContentLoaded", () => {
+  loadPublicData();
+});