From c19d16cf26307b26e13d22246b7029f9f21672e0 Mon Sep 17 00:00:00 2001
From: Sami Spets <savasp@utu.fi>
Date: Mon, 7 Oct 2019 15:16:07 +0300
Subject: [PATCH] Added mongoose and started to build config route

---
 web-service/server/package-lock.json     | 111 +++++++++++++++++++++++
 web-service/server/package.json          |   2 +
 web-service/server/public/js/index.js    |   8 +-
 web-service/server/src/index.js          |  94 +++++++++++++++----
 web-service/server/src/models/configs.js |  32 +++++++
 web-service/server/src/models/users.js   |   8 ++
 web-service/server/src/utils/config.js   |   6 ++
 7 files changed, 241 insertions(+), 20 deletions(-)
 create mode 100644 web-service/server/src/models/configs.js
 create mode 100644 web-service/server/src/models/users.js
 create mode 100644 web-service/server/src/utils/config.js

diff --git a/web-service/server/package-lock.json b/web-service/server/package-lock.json
index 48e2bd484..59715be6a 100644
--- a/web-service/server/package-lock.json
+++ b/web-service/server/package-lock.json
@@ -37,6 +37,11 @@
         "safe-buffer": "^5.1.1"
       }
     },
+    "bluebird": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+      "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+    },
     "body-parser": {
       "version": "1.19.0",
       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
@@ -54,6 +59,11 @@
         "type-is": "~1.6.17"
       }
     },
+    "bson": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
+      "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg=="
+    },
     "buffer-equal-constant-time": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -285,6 +295,11 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "kareem": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
+      "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
+    },
     "lodash.includes": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
@@ -353,6 +368,73 @@
         "mime-db": "1.40.0"
       }
     },
+    "mongodb": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.2.tgz",
+      "integrity": "sha512-fqJt3iywelk4yKu/lfwQg163Bjpo5zDKhXiohycvon4iQHbrfflSAz9AIlRE6496Pm/dQKQK5bMigdVo2s6gBg==",
+      "requires": {
+        "bson": "^1.1.1",
+        "require_optional": "^1.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "mongoose": {
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.7.3.tgz",
+      "integrity": "sha512-CKCCCAhFnJRtmdmver8Ud9/NZ9m7D2H/xLgmrcL6cb9D4nril/idL8lsWWpBsJI81AOCVsktiZJ4X4vfo2S0fw==",
+      "requires": {
+        "bson": "~1.1.1",
+        "kareem": "2.3.1",
+        "mongodb": "3.3.2",
+        "mongoose-legacy-pluralize": "1.0.2",
+        "mpath": "0.6.0",
+        "mquery": "3.2.2",
+        "ms": "2.1.2",
+        "regexp-clone": "1.0.0",
+        "safe-buffer": "5.1.2",
+        "sift": "7.0.1",
+        "sliced": "1.0.1"
+      },
+      "dependencies": {
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "mongoose-legacy-pluralize": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
+      "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
+    },
+    "mpath": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz",
+      "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw=="
+    },
+    "mquery": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
+      "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
+      "requires": {
+        "bluebird": "3.5.1",
+        "debug": "3.1.0",
+        "regexp-clone": "^1.0.0",
+        "safe-buffer": "5.1.2",
+        "sliced": "1.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
     "ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -485,6 +567,25 @@
         "util-deprecate": "~1.0.1"
       }
     },
+    "regexp-clone": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
+      "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
+    },
+    "require_optional": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+      "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+      "requires": {
+        "resolve-from": "^2.0.0",
+        "semver": "^5.1.0"
+      }
+    },
+    "resolve-from": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+      "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+    },
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -543,6 +644,16 @@
       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
       "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
     },
+    "sift": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
+      "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
+    },
+    "sliced": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+      "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
+    },
     "statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
diff --git a/web-service/server/package.json b/web-service/server/package.json
index 3270a7958..6edd4aa9b 100644
--- a/web-service/server/package.json
+++ b/web-service/server/package.json
@@ -14,9 +14,11 @@
   "author": "Nicolas Pope",
   "license": "ISC",
   "dependencies": {
+    "body-parser": "^1.19.0",
     "express": "^4.16.4",
     "express-ws": "^4.0.0",
     "jsonwebtoken": "^8.5.1",
+    "mongoose": "^5.7.3",
     "msgpack5": "^4.2.1",
     "passport": "^0.4.0",
     "passport-google-oauth20": "^2.0.0"
diff --git a/web-service/server/public/js/index.js b/web-service/server/public/js/index.js
index a44155fb8..ab33359bb 100644
--- a/web-service/server/public/js/index.js
+++ b/web-service/server/public/js/index.js
@@ -1,8 +1,10 @@
-
 const checkIfLoggedIn = async () => {
     const token = window.localStorage.getItem('token')
+    console.log(token)
     if(!token){
         console.log("You need to login")
+        const containerDiv = document.getElementById('container');
+        containerDiv = login;
     //User has a token saved in the browser
     }else{
         //validate that token
@@ -10,14 +12,14 @@ const checkIfLoggedIn = async () => {
             method: 'POST',
             headers: {'Authorization': token}
         })
-        console.log(response)
+        console.log('RESPONSE', response)
         //Token is valid
         if(response.status === 200){
             console.log("SUCCESS")
             /*
             Most likely it will render a new HTML file
             */
-            document.getElementById('container').innerHTML = "<p>Salainen sivu</p>"
+            renderThumbnails()
         }
     }
 }
diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js
index 150a69ab0..9e28d9316 100644
--- a/web-service/server/src/index.js
+++ b/web-service/server/src/index.js
@@ -3,14 +3,19 @@ const app = express();
 const expressWs = require('express-ws')(app);
 const Peer = require('./peer.js');
 const passport = require('passport');
-const passportSetup = require('./passport/passport');
+const passportSetup = require('./passport/passport'); //Without this, the app doesn't know passports google strategy
 const jwt = require('jsonwebtoken');
 const keys = require('./passport/keys')
+const mongoose = require('mongoose')
+const config = require('./utils/config')
+const User = require('./models/users')
+const Configuration = require('./models/configs')
+const bodyParser = require('body-parser')
 
 // ---- INDEXES ----------------------------------------------------------------
 app.use(passport.initialize());
 app.use(express.static(__dirname + './../public'));
-console.log(__dirname)
+app.use(bodyParser.json( ))
 
 
 passport.serializeUser((user, done) => {
@@ -21,6 +26,14 @@ passport.deserializeUser((userDataFromCookie, done) => {
     done(null, userDataFromCookie);
 })
 
+mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
+	.then(() => {
+		console.log('Connected to MongoDB');
+	})
+	.catch((err) => {
+		console.log(err);
+	})
+
 let peer_by_id = {};
 //let uri_to_peer = {};
 let peer_uris = {};
@@ -143,11 +156,19 @@ app.get('/', (req, res) => {
 	res.end();
 });
 
-app.post('/auth/validation', (req, res) => {
+app.post('/auth/validation', async (req, res) => {
 	const token = req.headers.authorization.split(" ")
 	const decoded = jwt.verify(token[1], keys.jwt.secret)
-
-	return res.status(200)
+	try{
+		const data = await User.find({decoded})
+		if(data){
+			console.log(data)
+			return res.status(200).json("success")
+		}
+	}catch(err){
+		console.log('ERROR ERROR')
+		console.log(err)
+	}	
 })
 // app.get('/login/google', (req, res) => {
 // })
@@ -182,6 +203,14 @@ app.get('/stream/depth', (req, res) => {
 	res.end();
 });
 
+app.post('/stream/config', (req, res) => {
+	const configurations = req.body
+
+	console.log(configurations)
+
+	return res.json(200)
+})
+
 //app.get('/stream', (req, res))
 
 /*
@@ -195,19 +224,50 @@ app.get('/google', passport.authenticate('google', {
  * Google authentication API callback route. 
  * Sets the JWT to clients browser and redirects the user back to front page.
  */
-app.get('/auth/google/redirect', passport.authenticate('google'), (req, res) => {
+app.get('/auth/google/redirect', passport.authenticate('google'), async (req, res) => {
 	console.log(req.user)
-	const token = jwt.sign(req.user.id, keys.jwt.secret);
-	const htmlWithEmbeddedJWT = `
-    <html>
-        <body><h3> You will be automatically redirected to next page.<h3><body>
-        <script>
-			window.localStorage.setItem('token', 'bearer ${token}');
-			window.location.href = '/';
-        </script>
-    <html>
-    `;
-    res.send(htmlWithEmbeddedJWT)
+	//Save the req.user.id into MongoDB
+
+	const user = new User({
+		googleID: req.user.id
+	})
+	try{
+		const listOfUsers = await User.find({});
+		console.log(listOfUsers);
+		
+		//Checks if the userID is already in db
+		for(let i=0; i<listOfUsers.length; i++){
+			if(listOfUsers[i].googleID == req.user.id){
+				const token = jwt.sign(req.user.id, keys.jwt.secret);
+				const htmlWithEmbeddedJWT = `
+				<html>
+					<body><h3> You will be automatically redirected to next page.<h3><body>
+					<script>
+						window.localStorage.setItem('token', 'bearer ${token}');
+						window.location.href = '/';
+					</script>
+				<html>
+				`;
+				return res.send(htmlWithEmbeddedJWT)		
+			}
+		}
+
+
+		await user.save()
+		const token = jwt.sign(req.user.id, keys.jwt.secret);
+		const htmlWithEmbeddedJWT = `
+		<html>
+			<body><h3> You will be automatically redirected to next page.<h3><body>
+			<script>
+				window.localStorage.setItem('token', 'bearer ${token}');
+				window.location.href = '/';
+			</script>
+		<html>
+		`;
+		return res.send(htmlWithEmbeddedJWT)
+	}catch(err){
+		console.log(err)
+	}
 })
 
 function checkStreams(peer) {
diff --git a/web-service/server/src/models/configs.js b/web-service/server/src/models/configs.js
new file mode 100644
index 000000000..073485e9d
--- /dev/null
+++ b/web-service/server/src/models/configs.js
@@ -0,0 +1,32 @@
+const mongoose = require('mongoose')
+
+const configSchema = mongoose.Schema({    
+    board_size: Array,
+    square_size: Number,
+    frame_delay: Number,
+    num_frames: Number,
+    assume_zero_tangential_distortion: Boolean,
+    fix_aspect_ratio: Boolean,
+    fix_principal_point_at_center: Boolean,
+    use_fisheye_model: Boolean,
+    fix_k1: {type: Boolean, default: false},
+    fix_k2: {type: Boolean, default: false},
+    fix_k3: {type: Boolean, default: false},
+    fix_k4: {type: Boolean, default: true},
+    fix_k5: {type: Boolean, default: true},
+    //Mongoose doesn't let you use attribute save
+    //save: {type: Boolean, default: true},
+    use_intrinsics: {type: Boolean, default: true},
+    use_extrinsics: {type: Boolean, default: true},
+    flip_vertical: {type: Boolean, default: true},
+  })
+
+  configSchema.set('toJSON', {
+    transform: (document, returnedObject) => {
+      returnedObject.id = returnedObject._id
+      delete returnedObject._id
+      delete returnedObject.__v
+    }
+  })
+  
+module.exports = mongoose.model('Config', configSchema)
\ No newline at end of file
diff --git a/web-service/server/src/models/users.js b/web-service/server/src/models/users.js
new file mode 100644
index 000000000..7baa6448f
--- /dev/null
+++ b/web-service/server/src/models/users.js
@@ -0,0 +1,8 @@
+const mongoose = require('mongoose')
+
+const userSchema = mongoose.Schema({
+    googleID: Number,
+    hakaID: String
+  })
+  
+module.exports = mongoose.model('User', userSchema)
\ No newline at end of file
diff --git a/web-service/server/src/utils/config.js b/web-service/server/src/utils/config.js
new file mode 100644
index 000000000..d1ec0b035
--- /dev/null
+++ b/web-service/server/src/utils/config.js
@@ -0,0 +1,6 @@
+
+const MONGODB_URI = 'mongodb+srv://ftl:sOgIX%2638@FTL-w141e.mongodb.net/FTL?retryWrites=true&w=majority'
+
+module.exports = {
+    MONGODB_URI
+}
\ No newline at end of file
-- 
GitLab