From c3453db5639acb191f24528842c364d8ef8d3924 Mon Sep 17 00:00:00 2001
From: Sami Spets <savasp@utu.fi>
Date: Thu, 5 Dec 2019 10:06:47 +0200
Subject: [PATCH] Fixed the convertUUID function. Added comments.

---
 web-service/server/package-lock.json       |   5 +
 web-service/server/package.json            |   1 +
 web-service/server/src/index.js            |  13 +-
 web-service/server/src/peer.js             |  50 +----
 web-service/server/src/public/js/bundle.js | 234 ++++++++++-----------
 web-service/server/src/public/js/index.js  |  18 +-
 6 files changed, 147 insertions(+), 174 deletions(-)

diff --git a/web-service/server/package-lock.json b/web-service/server/package-lock.json
index 9ae07c2c8..88a977e6f 100644
--- a/web-service/server/package-lock.json
+++ b/web-service/server/package-lock.json
@@ -3247,6 +3247,11 @@
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
     },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+    },
     "vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/web-service/server/package.json b/web-service/server/package.json
index 6114443c5..3cc858fcd 100644
--- a/web-service/server/package.json
+++ b/web-service/server/package.json
@@ -22,6 +22,7 @@
     "msgpack5": "^4.2.1",
     "passport": "^0.4.0",
     "passport-google-oauth20": "^2.0.0",
+    "uuid": "^3.3.3",
     "watchify": "^3.11.1"
   }
 }
diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js
index 8f8b1c9d8..29c842b6a 100644
--- a/web-service/server/src/index.js
+++ b/web-service/server/src/index.js
@@ -158,6 +158,9 @@ app.get('/', (req, res) => {
 	res.end();
 });
 
+/**
+ * This is the route that actually validates the users JWT token.
+ */
 app.post('/auth/validation', async (req, res) => {
 	const token = req.headers.authorization.split(" ")
 	const decoded = jwt.verify(token[1], keys.jwt.secret)
@@ -177,12 +180,11 @@ app.post('/auth/validation', async (req, res) => {
 })
 
 
-
-
 app.get('/streams', (req, res) => {
 	res.json(Object.keys(uri_data));
 });
 
+
 /**
  * A list that has Object.keys(uri_data) values and also the image that is 
  * binded to that 
@@ -197,6 +199,7 @@ app.get('/stream/rgb', (req, res) => {
 	res.end();
 });
 
+
 app.get('/stream/depth', (req, res) => {
 	let uri = req.query.uri;
 	if (uri_data.hasOwnProperty(uri)) {
@@ -271,6 +274,7 @@ app.get('/stream', (req, res) => {
 	res.end();
 })
 
+
 /*
  * Route for Google authentication API page
  */
@@ -278,6 +282,7 @@ app.get('/google', passport.authenticate('google', {
 	scope: ['profile']
 }))
 
+
 /**
  * Google authentication API callback route. 
  * Sets the JWT to clients browser and redirects the user back to front page.
@@ -310,7 +315,6 @@ app.get('/auth/google/redirect', passport.authenticate('google'), async (req, re
 			}
 		}
 
-
 		await user.save()
 		const token = jwt.sign(req.user.id, keys.jwt.secret);
 		const htmlWithEmbeddedJWT = `
@@ -354,11 +358,10 @@ function broadcastExcept(exc, name, ...args) {
 
 app.ws('/', (ws, req) => {
 	console.log("New web socket request");
-	//console.log('WEBSOCKET',ws)
+	//console.log('WEBSOCKET', ws)
 	
 	let p = new Peer(ws);
 	peer_data.push(p);
-	// console.log(peer_data)
 
 	p.on("connect", (peer) => {
 		console.log("Node connected...", peer.string_id);
diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js
index 957bdd352..161ae6533 100644
--- a/web-service/server/src/peer.js
+++ b/web-service/server/src/peer.js
@@ -236,8 +236,9 @@ Peer.prototype.send = function(name, ...args) {
 	}
 }
 
-//This was a problem and needed to change it so that
-//this.sock.close() can only be called by server (this.sock.on !== undefined)
+/**
+ * Closes the socket
+ */
 Peer.prototype.close = function() {
 	if(this.sock.on !== undefined){
 		this.sock.close();
@@ -275,45 +276,14 @@ Peer.prototype.on = function(evt, f) {
  * Returns a string of the UUID
  */
 Peer.prototype.convertUUID = function() {
-	const uuid = cpp_my_uuid
-	console.log("MY_UUID", uuid)
-
 	const digits = "0123456789abcdef";
-	let rc = "";
-	let j=0;
-		for (let i=0; i<4; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			console.log(digits[digits.indexOf(uuid[i])]);
-			rc[j] = digits[digits.indexOf(uuid[i+1])];
-			console.log(digits[digits.indexOf(uuid[i+1])]);
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=4 ; i<6; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=6 ; i<8; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=8 ; i<10; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=10 ; i<16; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		console.log("RC", rc)
-	return rc;
+	let returnVal = "";
+
+	//If the char is "-" add it, else add the letter/digit represented in the variable digits
+	for(let i=0; i<cpp_my_uuid.length; i++){
+		returnVal += (cpp_my_uuid[i] == "-") ? "-" : digits[digits.indexOf(cpp_my_uuid[i])]
+	}
+	return returnVal;
 }
 
 module.exports = Peer;
diff --git a/web-service/server/src/public/js/bundle.js b/web-service/server/src/public/js/bundle.js
index 1bc7a6dde..901db4035 100644
--- a/web-service/server/src/public/js/bundle.js
+++ b/web-service/server/src/public/js/bundle.js
@@ -383,7 +383,7 @@ BufferList.prototype._match = function(offset, search) {
 
 module.exports = BufferList
 
-},{"readable-stream":19,"safe-buffer":20,"util":44}],2:[function(require,module,exports){
+},{"readable-stream":18,"safe-buffer":19,"util":44}],2:[function(require,module,exports){
 (function (Buffer){
 // Copyright Joyent, Inc. and other Node contributors.
 //
@@ -493,8 +493,8 @@ function objectToString(o) {
   return Object.prototype.toString.call(o);
 }
 
-}).call(this,{"isBuffer":require("../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
-},{"../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js":38}],3:[function(require,module,exports){
+}).call(this,{"isBuffer":require("../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js")})
+},{"../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js":38}],3:[function(require,module,exports){
 if (typeof Object.create === 'function') {
   // implementation from standard node.js 'util' module
   module.exports = function inherits(ctor, superCtor) {
@@ -613,7 +613,7 @@ function msgpack (options) {
 
 module.exports = msgpack
 
-},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":29,"bl":1,"safe-buffer":20}],6:[function(require,module,exports){
+},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":29,"bl":1,"safe-buffer":19}],6:[function(require,module,exports){
 'use strict'
 
 var bl = require('bl')
@@ -1396,7 +1396,7 @@ function encodeFloat (obj, forceFloat64) {
   return buf
 }
 
-},{"bl":1,"safe-buffer":20}],8:[function(require,module,exports){
+},{"bl":1,"safe-buffer":19}],8:[function(require,module,exports){
 'use strict'
 
 var Transform = require('readable-stream').Transform
@@ -1488,7 +1488,7 @@ Decoder.prototype._transform = function (buf, enc, done) {
 module.exports.decoder = Decoder
 module.exports.encoder = Encoder
 
-},{"bl":1,"inherits":3,"readable-stream":19}],9:[function(require,module,exports){
+},{"bl":1,"inherits":3,"readable-stream":18}],9:[function(require,module,exports){
 (function (process){
 'use strict';
 
@@ -2739,7 +2739,7 @@ function indexOf(xs, x) {
   return -1;
 }
 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":40,"core-util-is":2,"events":36,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":20,"string_decoder/":18,"util":34}],13:[function(require,module,exports){
+},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":40,"core-util-is":2,"events":36,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":19,"string_decoder/":20,"util":34}],13:[function(require,module,exports){
 // Copyright Joyent, Inc. and other Node contributors.
 //
 // Permission is hereby granted, free of charge, to any person obtaining a
@@ -3644,7 +3644,7 @@ Writable.prototype._destroy = function (err, cb) {
   cb(err);
 };
 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
-},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":40,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":20,"timers":41,"util-deprecate":21}],15:[function(require,module,exports){
+},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":40,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":19,"timers":41,"util-deprecate":21}],15:[function(require,module,exports){
 'use strict';
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -3724,7 +3724,7 @@ if (util && util.inspect && util.inspect.custom) {
     return this.constructor.name + ' ' + obj;
   };
 }
-},{"safe-buffer":20,"util":34}],16:[function(require,module,exports){
+},{"safe-buffer":19,"util":34}],16:[function(require,module,exports){
 'use strict';
 
 /*<replacement>*/
@@ -3803,6 +3803,79 @@ module.exports = {
 module.exports = require('events').EventEmitter;
 
 },{"events":36}],18:[function(require,module,exports){
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = exports;
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
+
+},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],19:[function(require,module,exports){
+/* eslint-disable node/no-deprecated-api */
+var buffer = require('buffer')
+var Buffer = buffer.Buffer
+
+// alternative to using Object.keys for old browsers
+function copyProps (src, dst) {
+  for (var key in src) {
+    dst[key] = src[key]
+  }
+}
+if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+  module.exports = buffer
+} else {
+  // Copy properties from require('buffer')
+  copyProps(buffer, exports)
+  exports.Buffer = SafeBuffer
+}
+
+function SafeBuffer (arg, encodingOrOffset, length) {
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+// Copy static methods from Buffer
+copyProps(Buffer, SafeBuffer)
+
+SafeBuffer.from = function (arg, encodingOrOffset, length) {
+  if (typeof arg === 'number') {
+    throw new TypeError('Argument must not be a number')
+  }
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+SafeBuffer.alloc = function (size, fill, encoding) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  var buf = Buffer(size)
+  if (fill !== undefined) {
+    if (typeof encoding === 'string') {
+      buf.fill(fill, encoding)
+    } else {
+      buf.fill(fill)
+    }
+  } else {
+    buf.fill(0)
+  }
+  return buf
+}
+
+SafeBuffer.allocUnsafe = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return Buffer(size)
+}
+
+SafeBuffer.allocUnsafeSlow = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return buffer.SlowBuffer(size)
+}
+
+},{"buffer":35}],20:[function(require,module,exports){
 // Copyright Joyent, Inc. and other Node contributors.
 //
 // Permission is hereby granted, free of charge, to any person obtaining a
@@ -4099,80 +4172,7 @@ function simpleWrite(buf) {
 function simpleEnd(buf) {
   return buf && buf.length ? this.write(buf) : '';
 }
-},{"safe-buffer":20}],19:[function(require,module,exports){
-exports = module.exports = require('./lib/_stream_readable.js');
-exports.Stream = exports;
-exports.Readable = exports;
-exports.Writable = require('./lib/_stream_writable.js');
-exports.Duplex = require('./lib/_stream_duplex.js');
-exports.Transform = require('./lib/_stream_transform.js');
-exports.PassThrough = require('./lib/_stream_passthrough.js');
-
-},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],20:[function(require,module,exports){
-/* eslint-disable node/no-deprecated-api */
-var buffer = require('buffer')
-var Buffer = buffer.Buffer
-
-// alternative to using Object.keys for old browsers
-function copyProps (src, dst) {
-  for (var key in src) {
-    dst[key] = src[key]
-  }
-}
-if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
-  module.exports = buffer
-} else {
-  // Copy properties from require('buffer')
-  copyProps(buffer, exports)
-  exports.Buffer = SafeBuffer
-}
-
-function SafeBuffer (arg, encodingOrOffset, length) {
-  return Buffer(arg, encodingOrOffset, length)
-}
-
-// Copy static methods from Buffer
-copyProps(Buffer, SafeBuffer)
-
-SafeBuffer.from = function (arg, encodingOrOffset, length) {
-  if (typeof arg === 'number') {
-    throw new TypeError('Argument must not be a number')
-  }
-  return Buffer(arg, encodingOrOffset, length)
-}
-
-SafeBuffer.alloc = function (size, fill, encoding) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  var buf = Buffer(size)
-  if (fill !== undefined) {
-    if (typeof encoding === 'string') {
-      buf.fill(fill, encoding)
-    } else {
-      buf.fill(fill)
-    }
-  } else {
-    buf.fill(0)
-  }
-  return buf
-}
-
-SafeBuffer.allocUnsafe = function (size) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  return Buffer(size)
-}
-
-SafeBuffer.allocUnsafeSlow = function (size) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  return buffer.SlowBuffer(size)
-}
-
-},{"buffer":35}],21:[function(require,module,exports){
+},{"safe-buffer":19}],21:[function(require,module,exports){
 (function (global){
 
 /**
@@ -4576,8 +4576,9 @@ Peer.prototype.send = function(name, ...args) {
 	}
 }
 
-//This was a problem and needed to change it so that
-//this.sock.close() can only be called by server (this.sock.on !== undefined)
+/**
+ * Closes the socket
+ */
 Peer.prototype.close = function() {
 	if(this.sock.on !== undefined){
 		this.sock.close();
@@ -4615,45 +4616,14 @@ Peer.prototype.on = function(evt, f) {
  * Returns a string of the UUID
  */
 Peer.prototype.convertUUID = function() {
-	const uuid = cpp_my_uuid
-	console.log("MY_UUID", uuid)
-
 	const digits = "0123456789abcdef";
-	let rc = "";
-	let j=0;
-		for (let i=0; i<4; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			console.log(digits[digits.indexOf(uuid[i])]);
-			rc[j] = digits[digits.indexOf(uuid[i+1])];
-			console.log(digits[digits.indexOf(uuid[i+1])]);
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=4 ; i<6; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=6 ; i<8; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=8 ; i<10; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		rc[j++] = '-';
-		for (let i=10 ; i<16; ++i) {
-			rc[j+1] = digits[digits.indexOf(uuid[i])];
-			rc[j] = digits[digits.indexOf(uuid[i])];
-			j+=2;
-		}
-		console.log("RC", rc)
-	return rc;
+	let returnVal = "";
+
+	//If the char is "-" add it, else add the letter/digit represented in the variable digits
+	for(let i=0; i<cpp_my_uuid.length; i++){
+		returnVal += (cpp_my_uuid[i] == "-") ? "-" : digits[digits.indexOf(cpp_my_uuid[i])]
+	}
+	return returnVal;
 }
 
 module.exports = Peer;
@@ -4668,6 +4638,9 @@ let peer;
 let decoder;
 let player;
 
+/**
+ * Validates that the user is logged in
+ */
 checkIfLoggedIn = async () => {
     //     const token = window.localStorage.getItem('token')
     //     console.log(token)
@@ -4711,6 +4684,7 @@ getAvailableStreams = async () => {
     }
 }
 
+
 createVideoPlayer = () => {
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails(); closeStream()">Go back</button><br>
@@ -4786,7 +4760,9 @@ renderLogin = () => {
 }
 
 
-
+/** 
+ * Method to create a single thumbnail
+ */
 createCard = (url, viewers) => {
     return `<div class='ftlab-card-component' >
                 <img src='${url}' class="thumbnail-img" alt="Hups" width="250px"></img>
@@ -4829,13 +4805,16 @@ configs = () => {
     renderConfigOptions();
 }
 
+
 renderConfigOptions = () => {
     const input = `<p>input1</p><br>ftl://utu.fi#<input type="text">`
     const doc = document.getElementsByClassName('ftlab-configurations')[0];
     doc.innerHTML = input;
 }
 
-
+/**
+ * 
+ */
 loadConfigs = async (str) => {
     const configURI = encodeURIComponent(`ftl://utu.fi#reconstruction_snap8${str}`);
     const uri = encodeURIComponent(current_data.uri)
@@ -4846,8 +4825,11 @@ loadConfigs = async (str) => {
     console.log(content)
 }
 
-current_data.configData = '{"peers": 1}';
+// current_data.configData = '{"peers": 1}';
 
+/**
+ * Method to send configurations to backend 
+ */
 saveConfigs = async () => {
     let {uri, configURI, configData} = current_data
     const rawResp = await fetch('http://localhost:8080/stream/config', {
diff --git a/web-service/server/src/public/js/index.js b/web-service/server/src/public/js/index.js
index 5392d6ea5..e99d5d412 100644
--- a/web-service/server/src/public/js/index.js
+++ b/web-service/server/src/public/js/index.js
@@ -6,6 +6,9 @@ let peer;
 let decoder;
 let player;
 
+/**
+ * Validates that the user is logged in
+ */
 checkIfLoggedIn = async () => {
     //     const token = window.localStorage.getItem('token')
     //     console.log(token)
@@ -49,6 +52,7 @@ getAvailableStreams = async () => {
     }
 }
 
+
 createVideoPlayer = () => {
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails(); closeStream()">Go back</button><br>
@@ -124,7 +128,9 @@ renderLogin = () => {
 }
 
 
-
+/** 
+ * Method to create a single thumbnail
+ */
 createCard = (url, viewers) => {
     return `<div class='ftlab-card-component' >
                 <img src='${url}' class="thumbnail-img" alt="Hups" width="250px"></img>
@@ -167,13 +173,16 @@ configs = () => {
     renderConfigOptions();
 }
 
+
 renderConfigOptions = () => {
     const input = `<p>input1</p><br>ftl://utu.fi#<input type="text">`
     const doc = document.getElementsByClassName('ftlab-configurations')[0];
     doc.innerHTML = input;
 }
 
-
+/**
+ * 
+ */
 loadConfigs = async (str) => {
     const configURI = encodeURIComponent(`ftl://utu.fi#reconstruction_snap8${str}`);
     const uri = encodeURIComponent(current_data.uri)
@@ -184,8 +193,11 @@ loadConfigs = async (str) => {
     console.log(content)
 }
 
-current_data.configData = '{"peers": 1}';
+// current_data.configData = '{"peers": 1}';
 
+/**
+ * Method to send configurations to backend 
+ */
 saveConfigs = async () => {
     let {uri, configURI, configData} = current_data
     const rawResp = await fetch('http://localhost:8080/stream/config', {
-- 
GitLab