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