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