diff --git a/.gitignore b/.gitignore index c2b77e9238ade495a520342b3de4b0479961794f..23c1a956bc8381a05673482e04ecf2c193fc0980 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ lab-designs/viewer .vscode doc/ web-service/npm-debug.log -web-service/server/npm-debug.log +web-service/server/npm-debug.log \ No newline at end of file diff --git a/web-service/public/js/index.js b/web-service/public/js/index.js index 293ecf1b46d202aa1c176945e1983effebf27f8b..112bd1b9822b6234bb29b7a59fb725602396fbf6 100644 --- a/web-service/public/js/index.js +++ b/web-service/public/js/index.js @@ -6,7 +6,7 @@ let peer; let player; /** - * Validates that the user is logged in + * Validates that the user is logged in by sending the token */ checkIfLoggedIn = async () => { // const token = window.localStorage.getItem('token') @@ -32,11 +32,6 @@ checkIfLoggedIn = async () => { // } } -//Redirects the user to google authentication -handleLogin = () => { - window.location.href="/google"; -} - /** * Returns a list of available streams */ @@ -100,34 +95,6 @@ renderThumbnails = async () => { } -/** - * Renders button that will redirect to google login - */ -renderLogin = () => { - const containerDiv = document.getElementById('container'); - containerDiv.innerHTML = - `<div id='Login'> - <h2>Welcome to Future Technology Lab</h2> - <h3>Please login!</h3> - <a className="button" onClick="handleLogin()"> - <div> - <span class="svgIcon t-popup-svg"> - <svg class="svgIcon-use" width="25" height="37" viewBox="0 0 25 25"> - <g fill="none" fill-rule="evenodd"> - <path d="M20.66 12.693c0-.603-.054-1.182-.155-1.738H12.5v3.287h4.575a3.91 3.91 0 0 1-1.697 2.566v2.133h2.747c1.608-1.48 2.535-3.65 2.535-6.24z" fill="#4285F4"/> - <path d="M12.5 21c2.295 0 4.22-.76 5.625-2.06l-2.747-2.132c-.76.51-1.734.81-2.878.81-2.214 0-4.088-1.494-4.756-3.503h-2.84v2.202A8.498 8.498 0 0 0 12.5 21z" fill="#34A853"/> - <path d="M7.744 14.115c-.17-.51-.267-1.055-.267-1.615s.097-1.105.267-1.615V8.683h-2.84A8.488 8.488 0 0 0 4 12.5c0 1.372.328 2.67.904 3.817l2.84-2.202z" fill="#FBBC05"/> - <path d="M12.5 7.38c1.248 0 2.368.43 3.25 1.272l2.437-2.438C16.715 4.842 14.79 4 12.5 4a8.497 8.497 0 0 0-7.596 4.683l2.84 2.202c.668-2.01 2.542-3.504 4.756-3.504z" fill="#EA4335"/> - </g> - </svg> - </span> - <span class="button-label">Sign in with Google</span> - </div> - </a> - </div>` -} - - /** * Method to create a single thumbnail */ @@ -147,14 +114,12 @@ createPeer = () => { } webSocketTest = () => { - console.log(current_data.uri) peer.send("update_cfg", "ftl://utu.fi#reconstruction_default/0/renderer/cool_effect", "true") } connectToStream = () => { const element = document.getElementById('ftlab-stream-video'); - console.log(VideoConverter) const converter = new VideoConverter.default(element, 20, 6); peer.bind(current_data.uri, (latency, streampckg, pckg) => { @@ -208,7 +173,6 @@ loadConfigs = async (str) => { const response = await rawResp.json(); const content = JSON.parse(response); container.innerHTML += `<p>${response}</p>`; - console.log(content) } // current_data.configData = '{"peers": 1}'; @@ -227,5 +191,4 @@ saveConfigs = async () => { body: JSON.stringify({peerURI: uri, configURI, data: configData, saveToCPP: true}) }); const content = await rawResp.json(); - console.log(content) } \ No newline at end of file diff --git a/web-service/server/package-lock.json b/web-service/server/package-lock.json index ca101a4aa64560dd08aabd8416ac4964ebf53693..4aafecdec0df9686bd9cd3f779655a8f77cac605 100644 --- a/web-service/server/package-lock.json +++ b/web-service/server/package-lock.json @@ -106,11 +106,6 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, "bl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", @@ -337,11 +332,6 @@ "ieee754": "^1.1.4" } }, - "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", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -602,14 +592,6 @@ "readable-stream": "^2.0.2" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -933,49 +915,6 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "kareem": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", @@ -991,47 +930,12 @@ "stream-splicer": "^2.0.0" } }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -1241,11 +1145,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1309,40 +1208,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "passport": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", - "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "requires": { - "passport-oauth2": "1.x.x" - } - }, - "passport-oauth2": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.5.0.tgz", - "integrity": "sha512-kqBt6vR/5VlCK8iCx1/KpY42kQ+NEHZwsSyt4Y6STiNjU+wWICG1i8ucc1FapXDGO15C5O5VZz7+7vRzrDPXXQ==", - "requires": { - "base64url": "3.x.x", - "oauth": "0.9.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" - }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", @@ -1372,11 +1237,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" - }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -1810,11 +1670,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" - }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", diff --git a/web-service/server/package.json b/web-service/server/package.json index f16e9961741b80defaa6dc071fd88c60c50d3ebb..af0c459ede99227ca71debcef2883c69047ae1aa 100644 --- a/web-service/server/package.json +++ b/web-service/server/package.json @@ -18,11 +18,8 @@ "express": "^4.16.4", "express-ws": "^4.0.0", "h264-converter": "^0.1.0", - "jsonwebtoken": "^8.5.1", "mongoose": "^5.7.3", "msgpack5": "^4.2.1", - "passport": "^0.4.0", - "passport-google-oauth20": "^2.0.0", "url-parse": "^1.4.7", "uuid": "^3.3.3" }, diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js index 9640ce4e723e9fa8d2a6d26f8cd1b1f42eb4fa56..a89006de05825dfeae4751f558f1d6dd7be61e3d 100644 --- a/web-service/server/src/index.js +++ b/web-service/server/src/index.js @@ -2,10 +2,6 @@ const express = require('express'); const app = express(); const expressWs = require('express-ws')(app); const Peer = require('./peer.js'); -const jwt = require('jsonwebtoken'); -const passport = require('passport'); -const passportSetup = require('./passport/passport'); //Without this, the app doesn't know passports google strategy -const keys = require('./passport/keys') const mongoose = require('mongoose') const config = require('./utils/config') const User = require('./models/users') @@ -14,19 +10,10 @@ const bodyParser = require('body-parser') const Url = require('url-parse') // ---- INDEXES ---------------------------------------------------------------- -app.use(passport.initialize()); app.use(express.static(__dirname + '/../../public')); app.use(bodyParser.json()) - -passport.serializeUser((user, done) => { - done(null, user); -}) - -passport.deserializeUser((userDataFromCookie, done) => { - done(null, userDataFromCookie); -}) - +// //CONNECTS THE APP TO MONGODB // mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true }) // .then(() => { // console.log('Connected to MongoDB'); @@ -161,27 +148,6 @@ 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) - console.log('DECODED', decoded) - try{ - const data = await User.find({ googleID: decoded }) - console.log('DATA', data) - if(data.length !== 0){ - return res.status(200).json("success") - }else { - return res.status(403) - } - }catch(err){ - console.log('ERROR ERROR') - console.log(err) - } -}) - app.get('/streams', (req, res) => { res.json(Object.keys(uri_data)); @@ -230,8 +196,8 @@ app.post('/stream/config', async (req, res) => { console.log(e) } - } - + }// else{ + // //Save to MongoDB // const savedConfigs = new Configs({ // settingsURI: configURI, // data @@ -244,26 +210,24 @@ app.post('/stream/config', async (req, res) => { // console.log(err) // return res.status(500).json("Something's wrong I can feel it") // } - - - // } // } + }) app.get('/stream/config', async(req, res) => { + //example of uri ftlab.utu.fi/stream/config?uri=ftl://utu.fi#reconstruction_snap10/merge const settings = req.query.settings; const uri = req.query.uri; const parsedURI = stringSplitter(uri) - //Check if DB has data + // //Checks if DB has data // let dbData = await Configs.find({Settings: settings}); // if(dbData[0].data){ // return res.status(200).json(dbData[0]); // }else{ let peer = uri_data[parsedURI].peer if(peer){ - console.log("get_cfg", settings) peer.rpc("get_cfg", (response) => { if(response){ return res.status(200).json(response); @@ -281,64 +245,6 @@ app.get('/stream', (req, res) => { }) -/* - * Route for Google authentication API page - */ -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. - */ -app.get('/auth/google/redirect', passport.authenticate('google'), async (req, res) => { - console.log(req.user) - //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) - return res.status(500).json('Login failed') - } -}) - function checkStreams(peer) { if (!peer.master) { peer.rpc("list_streams", (streams) => { diff --git a/web-service/server/src/passport/keys.js b/web-service/server/src/passport/keys.js deleted file mode 100644 index 3357a6194a5a4b87f2fcd326524eaaf2560f7545..0000000000000000000000000000000000000000 --- a/web-service/server/src/passport/keys.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - - //This needs to be changed - //Currently linked to Sami's google account - google: { - clientID: '', //Ends in apps.googleusercontent.com - clientSecret: '' - }, - - jwt: { - secret: '' - } -} \ No newline at end of file diff --git a/web-service/server/src/passport/passport.js b/web-service/server/src/passport/passport.js deleted file mode 100644 index 3b855658a5a176d8513545f582f8ed2e8112a427..0000000000000000000000000000000000000000 --- a/web-service/server/src/passport/passport.js +++ /dev/null @@ -1,16 +0,0 @@ -const passport = require('passport'); -const GoogleStrategy = require('passport-google-oauth20'); -const keys = require('./keys') - -passport.use( - new GoogleStrategy({ - clientID: keys.google.clientID, - clientSecret: keys.google.clientSecret, - callbackURL: '/auth/google/redirect', - passReqToCallback: true - }, (req, accessToken, refreshToken, profile, done) => { - -// console.log(profile) - return done(null, profile) - }) -) \ No newline at end of file diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js index 034efc52f22ed2c51f277f58527b96f7fc808455..dd943a09387f6de8925e32c36c2d383ffa5030f7 100644 --- a/web-service/server/src/peer.js +++ b/web-service/server/src/peer.js @@ -1,7 +1,7 @@ const msgpack = require('msgpack5')() , encode = msgpack.encode , decode = msgpack.decode; -const uuidv4 = require('uuid/v4') +const uuidv4 = require('uuid') //Deprecated method, should use require('uuid/v4') const uuidParser = require('./utils/uuidParser') const kConnecting = 1; diff --git a/web-service/server/src/utils/config.js b/web-service/server/src/utils/config.js index c1d14c2e7ea54d1a5dd9487fbed0c7dd02553f18..a30bba3549f654d62c106edb11552fa8faa3455d 100644 --- a/web-service/server/src/utils/config.js +++ b/web-service/server/src/utils/config.js @@ -1,8 +1,9 @@ module.exports = { /** - * Currently linked to Sami's mongo-atlas account - * Lookup the models for user and generic from the models folder - * + * The URI for MongoDB needs to be added here + * + * When installing MongoDB lookup the models for + * user and generic from the models folder */ MONGODB_URI: '' //Add the mongo URI here } \ No newline at end of file