From 4713353241392cb250e753bb6a73c296c90c526d Mon Sep 17 00:00:00 2001
From: Greg Fodor <gfodor@gmail.com>
Date: Fri, 9 Mar 2018 18:27:40 -0800
Subject: [PATCH] Add local storage based info with schema validation

---
 package.json                    |  2 ++
 src/react-components/ui-root.js |  6 +++---
 src/room.js                     | 24 ++++++++----------------
 src/utils/identity.js           | 29 ++---------------------------
 yarn.lock                       |  6 +++++-
 5 files changed, 20 insertions(+), 47 deletions(-)

diff --git a/package.json b/package.json
index f9dd871bf..215cee49a 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
     "aframe-teleport-controls": "https://github.com/netpro2k/aframe-teleport-controls#feature/teleport-origin",
     "aframe-xr": "github:brianpeiris/aframe-xr#3162aed",
     "detect-browser": "^2.1.0",
+    "jsonschema": "^1.2.2",
     "material-design-lite": "^1.3.0",
     "minijanus": "^0.4.0",
     "naf-janus-adapter": "^0.3.0",
@@ -30,6 +31,7 @@
     "react": "^16.1.1",
     "react-dom": "^16.1.1",
     "react-router-dom": "^4.2.2",
+    "uuid": "^3.2.1",
     "webrtc-adapter": "^6.0.2"
   },
   "devDependencies": {
diff --git a/src/react-components/ui-root.js b/src/react-components/ui-root.js
index 42ceddbe8..7239f2289 100644
--- a/src/react-components/ui-root.js
+++ b/src/react-components/ui-root.js
@@ -69,7 +69,7 @@ class UIRoot extends Component {
     toneInterval: null,
     tonePlaying: false,
     micLevel: 0,
-    micUpdateInterval: null
+    micUpdateInterval: null,
   }
 
   componentDidMount() {
@@ -133,7 +133,7 @@ class UIRoot extends Component {
   }
 
   enterGearVR = async () => {
-    console.log("gear");
+    document.location = `ovrweb://${document.location.toString()}`;
   }
 
   enterDaydream = async () => {
@@ -211,7 +211,7 @@ class UIRoot extends Component {
     this.setState({ micDevices: mediaDevices.filter(d => d.kind === "audioinput").map(d => ({ deviceId: d.deviceId, label: d.label }))});
   }
 
-  onAudioReadyButton = async () => {
+  onAudioReadyButton = () => {
     if (this.state.enterInVR) {
       document.querySelector("a-scene").enterVR();
     }
diff --git a/src/room.js b/src/room.js
index a9a847d72..218783a06 100644
--- a/src/room.js
+++ b/src/room.js
@@ -47,11 +47,12 @@ import "./systems/personal-space-bubble";
 
 import "./elements/a-gltf-entity";
 
-import { promptForName, getCookie, parseJwt } from "./utils/identity";
 import registerNetworkSchemas from "./network-schemas";
 import { inGameActions, config } from "./input-mappings";
 import registerTelemetry from "./telemetry";
+import Store from "./storage/store";
 
+import { generateDefaultProfile } from "./utils/identity.js";
 import { getAvailableVREntryTypes } from "./utils/vr-caps-detect.js";
 
 AFRAME.registerInputBehaviour("vive_trackpad_dpad4", vive_trackpad_dpad4);
@@ -64,6 +65,11 @@ AFRAME.registerInputMappings(config);
 registerNetworkSchemas();
 registerTelemetry();
 
+const store = new Store();
+
+// Always layer in any new default profile bits
+store.update({ profile:  { ...generateDefaultProfile(), ...(store.state.profile || {}) }})
+
 async function enterScene(mediaStream) {
   const qs = queryString.parse(location.search);
   const scene = document.querySelector("a-scene");
@@ -82,22 +88,8 @@ async function enterScene(mediaStream) {
     playerRig.setAttribute("virtual-gamepad-controls", {});
   }
 
-  let username;
-  const jwt = getCookie("jwt");
-  if (jwt) {
-    //grab name from jwt
-    const data = parseJwt(jwt);
-    username = data.typ.name;
-  }
-
-  if (qs.name) {
-    username = qs.name; //always override with name from querystring if available
-  } else {
-    username = promptForName(username); // promptForName is blocking
-  }
-
   const myNametag = document.querySelector("#player-rig .nametag");
-  myNametag.setAttribute("text", "value", username);
+  myNametag.setAttribute("text", "value", store.state.profile.display_name);
 
   const avatarScale = parseInt(qs.avatarScale, 10);
 
diff --git a/src/utils/identity.js b/src/utils/identity.js
index 545392863..72cabdf00 100644
--- a/src/utils/identity.js
+++ b/src/utils/identity.js
@@ -161,32 +161,7 @@ const names = [
   "yonath"
 ];
 
-export function generateName() {
+export function generateDefaultProfile() {
   const name = names[Math.floor(Math.random() * names.length)];
-  return name.replace(/^./, name[0].toUpperCase());
-}
-
-export function promptForName(username) {
-  if (!username) username = generateName();
-
-  do {
-    username = prompt("Choose a username", username);
-  } while (!(username && username.length));
-  return username;
-}
-
-export function getCookie(name) {
-  var value = "; " + document.cookie;
-  var parts = value.split("; " + name + "=");
-  if (parts.length == 2)
-    return parts
-      .pop()
-      .split(";")
-      .shift();
-}
-
-export function parseJwt(token) {
-  var base64Url = token.split(".")[1];
-  var base64 = base64Url.replace("-", "+").replace("_", "/");
-  return JSON.parse(window.atob(base64));
+  return { display_name: name.replace(/^./, name[0].toUpperCase()) };
 }
diff --git a/yarn.lock b/yarn.lock
index b27d10b90..2503a504c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3976,6 +3976,10 @@ jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
 
+jsonschema@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc"
+
 jsprim@^1.2.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -6870,7 +6874,7 @@ utils-merge@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
 
-uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
+uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
 
-- 
GitLab