Browse Source

Added some more auth implementation [Having rethinkdb errors]

Jonathan 7 years ago
parent
commit
c5d179788c
5 changed files with 61 additions and 76 deletions
  1. 1 1
      package.json
  2. 46 17
      src/app.js
  3. 12 55
      src/logic/coreHandler.js
  4. 2 1
      src/logic/expressHandler.js
  5. 0 2
      src/logic/global.js

+ 1 - 1
package.json

@@ -8,6 +8,7 @@
     "async": "2.0.1",
     "body-parser": "^1.15.2",
     "config": "^1.21.0",
+    "cookie-parser": "^1.4.3",
     "express": "^4.14.0",
     "express-session": "^1.14.0",
     "passport": "^0.3.2",
@@ -15,7 +16,6 @@
     "passport.socketio": "^3.6.2",
     "request": "^2.74.0",
     "rethinkdb": "^2.3.2",
-    "rethinkdbdash": "^2.3.21",
     "session-rethinkdb": "^2.0.0",
     "socket.io": "^1.4.8"
   },

+ 46 - 17
src/app.js

@@ -8,13 +8,13 @@ const path = require('path'),
 // npm modules
 const express          = require('express'),
       session          = require('express-session'),
-      store            = require('session-rethinkdb')(session),
+      rethinkdbStore   = require('session-rethinkdb')(session),
       bodyParser       = require('body-parser'),
       config           = require('config'),
       request          = require('request'),
       r                = require('rethinkdb'),
       passport         = require('passport'),
-      local            = require('passport-local').Strategy,
+      localStrategy    = require('passport-local').Strategy,
       passportSocketIo = require("passport.socketio");
 
 // custom modules
@@ -29,33 +29,62 @@ const server = app.listen(80);
 const io = require('socket.io')(server);
 
 // connect to our database before doing anything else
-r.connect( { host: 'localhost', port: 28015, db: 'musare' }, (err, rc) => {
+r.connect( { host: 'localhost', port: 28015, db: 'musare' }, function(err, rc) {
 	if (err) {
 		console.log(err);
 	} else {
 
 		global.rc = rc;
 		global.io = io;
-    global.passport = passport;
-    global.localStrategy = local;
 
-    const store = new RDBStore(r);
+        const store = new rethinkdbStore(r);
 
-    app.use(session({
-      secret: config.get('secret'),
-      store,
-      resave: true,
-      saveUninitialized: true
-    }));
+        app.use(passport.initialize());
+        app.use(passport.session());
 
-    io.use(passportSocketIo.authorize({
-      secret: config.get('secret'),
-      store,
-    }));
+        app.use(session({
+          secret: config.get('secret'),
+          store,
+          resave: true,
+          saveUninitialized: true
+        }));
+
+        io.use(passportSocketIo.authorize({
+          secret: config.get('secret'),
+          store: store,
+        }));
+
+        passport.serializeUser(function(user, done) {
+            done(null, user);
+        });
+
+        passport.deserializeUser(function(user, done) {
+            done(null, user);
+        });
+
+        passport.use(new localStrategy(function(username, password, done) {
+            process.nextTick(function() {
+                r.table('users').filter({
+                    username: username
+                }).run(rc, function (err, cursor) {
+                    if (err) return done(err);
+                    cursor.toArray(function (err, result) {
+                        if (!result) return done(null, false);
+                        if (result.password != password) return done(null, false);
+                        return done(null, user);
+                    });
+                });
+            });
+        }));
+
+        app.use(bodyParser.json());
+        app.use(bodyParser.urlencoded({
+            extended: true
+        }));
 
 		app.use(express.static(__dirname + '/../public'));
 
 		socketHandler(coreHandler, io);
 		expressHandler(coreHandler, app);
-	}
+    }
 });

+ 12 - 55
src/logic/coreHandler.js

@@ -9,34 +9,17 @@ const path   = require('path'),
 // npm modules
 const config    = require('config'),
       request   = require('request'),
-      waterfall = require('async/waterfall').
-      r         = require('rethinkdb');
+      waterfall = require('async/waterfall'),
+	  passport      = require('passport');
 
 // custom modules
-const global    = require('./global'),
-      passport  = global.passport,
-      localStrategy  = global.localStrategy,
-      stations = require('./stations');
+const global   = require('./global'),
+	  stations = require('./stations');
 
 var eventEmitter = new events.EventEmitter();
 
 module.exports = {
 
-  // auth
-
-  passport.serializeUser(function(user, cb) {
-    done(null, user.id);
-  });
-
-  passport.deserializeUser(function(id, cb) {
-    r.table('users').filter({id}).run(rc, (err, cursor) => {
-      done(err, cursor.toArray().result);
-    });
-  });
-
-  app.use(passport.initialize());
-  app.use(passport.session());
-
 	// module functions
 
 	on: function (name, cb) {
@@ -49,40 +32,14 @@ module.exports = {
 
 	// core route handlers
 
-	'/users/login': function (user, cb) {},
-
-	'/users/register': function (user, cb) {
-    passport.use('local-signup', new localStrategy({
-      usernameField : user.email,
-      passwordField : user.password,
-      passReqToCallback : true
-    }, (req, email, password, done) => {
-      process.nextTick(() => {
-        r.table('users').filter({
-    			email: user.email
-    		}).run(rc, (err, cursor) => {
-    			if (err) return done(err);
-    			else {
-    				cursor.toArray((err, result) => {
-    					if (result) {
-    						return done(null, false);
-    					} else {
-                r.table('authors').insert([{
-                  email,
-                  password: crypto.createHash('md5').update(password).digest("hex")
-                }]).run(connection, function(err, result) {
-                  if (err) throw err;
-                  return done(null, result);
-                  console.log(result);
-                });
-              }
-    				});
-    			}
-    		});
-      });
-    }));
-
-  },
+	'/users/login': function (user, cb) {
+		passport.authenticate('local', {
+			successRedirect: cb({ status: 'success', message: 'Successfully logged in' }),
+			failureRedirect: cb({ status: 'error', message: 'Error while trying to log in' })
+		});
+	},
+
+	'/users/register': function (user, cb) {},
 
 	'/stations': function (cb) {
 		cb(stations.getStations().map(function (result) {

+ 2 - 1
src/logic/expressHandler.js

@@ -11,11 +11,12 @@ module.exports = function (core, app) {
 
 		core['/users/login'](req.body.user, function (result) {
 			res.send(JSON.stringify(result));
+			console.log(JSON.stringify(result));
 		});
 	});
 
 	app.post('/users/register', function (req, res) {
-		core['/users/register'](req.body.user, (result) => {
+		core['/users/register'](req.body.user, function (result) {
 			res.send(JSON.stringify(result));
 		});
 		console.log('posted');

+ 0 - 2
src/logic/global.js

@@ -32,8 +32,6 @@ function Timer(callback, delay, paused) {
 module.exports = {
 	rc: null, // RethinkDB Connection, this gets set in app.js
 	io: null, // Socket.io
-	passport: null,
-	localStrategy: null,
 	htmlEntities: function(str) {
 		return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
 	},