diff --git a/models/user.model.js b/models/user.model.js index 534598a87cb082ccc0c199be62cd73e644df0f4b..9e183c65337dcbdd90d19bcdc745e66f3a2e2ba9 100644 --- a/models/user.model.js +++ b/models/user.model.js @@ -1,5 +1,6 @@ var Sequelize = require('sequelize'); var sequelize = require('./sequelize'); +const moment = require('moment') sequelize .authenticate() @@ -11,37 +12,65 @@ sequelize }); var Users = sequelize.define('Users', { - uName: Sequelize.STRING, + uName: { + type : Sequelize.STRING, + allowNull: false, + unique: true, + }, fName: Sequelize.STRING, lName: Sequelize.STRING, - phoneNumber: Sequelize.STRING -}, { + phoneNumber: Sequelize.STRING, + token: Sequelize.STRING, + expires: Sequelize.DATE +},{ timestamps: false, tableUser: 'Users', }); -sequelize.sync().then(() => { - Users.create({ - uName: '2015cochetg', - fName: 'Gabriel', - lName: 'Cochet', - phoneNumber: '+33631615426', - }).then(out => console.log(out.dataValues)); - - Users.create({ - uName: '2015fleyn', - fName: 'Nicolas', - lName: 'Fley', - phoneNumber: '+33650588938', - }).then(out => console.log(out.dataValues)); -}) +sequelize.sync({force:true}) + +function refreshUser(user){ + expiresTime = user.toJSON().expires + if( moment.duration(moment(expiresTime).diff(moment())).asHours() < 23){ + user.updateAttributes({ + expires : moment().add(1,'days') + }) + } +} +function refreshById(id,timeLeft){ + if( moment.duration(moment(user.expires).diff(moment())).asHours() < 23){ + return true; + }else{ + return false; + } +} function getUser(id) { return Users.findById(id); } -function addUser(uName, fName, lName, phoneNumber) { - return Users.create({ uName: uName, fName: fName, lName: lName, phoneNumber: phoneNumber }); +function getUserUName(uName) { + return Users.findOne( + { where: { uName: uName } } + ); +} + +function authUser(userInfos) { + return Users.upsert( + userInfos + ).then(function(users) { + return users; + }).catch((err) => { + console.log(err) + }) +} + +function isAuthed(uName,token){ + return Users.findOne({where : {uName : uName, token : token}}); +} + +function addUser(uName, fName, lName, phoneNumber, token, expires) { + return Users.create({ uName: uName, fName: fName, lName: lName, phoneNumber: phoneNumber, token : token, expires : expires }); } function deleteUser(id) { @@ -50,7 +79,9 @@ function deleteUser(id) { ) .then(function(users) { return users.destroy(); - }) + }).catch((err) => { + console.log(err) + }) } -module.exports = {getUser, addUser, deleteUser} \ No newline at end of file +module.exports = {getUser, addUser, deleteUser, authUser, refreshUser,getUserUName} \ No newline at end of file diff --git a/package.json b/package.json index b8e86d651be2b5b52869d0a579b8bbdd8afda16a..37625ec4feed2b23a81ce835af22a31b9082a7f5 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "debug": "~2.6.3", "express": "~4.15.2", "express-session": "^1.15.3", + "moment": "^2.18.1", "morgan": "~1.8.1", "mysql": "^2.13.0", "mysql2": "^1.3.2", diff --git a/routes/auth.route.js b/routes/auth.route.js index 4198ff4f86ae53d521a787e468c8857449d95610..6ffa171f2e4bddb0f822b497de67663806b0fe91 100644 --- a/routes/auth.route.js +++ b/routes/auth.route.js @@ -1,7 +1,10 @@ const express = require('express'); +const moment = require('moment'); const myPassport = require('../config/my-passport'); +const userModel = require('../models/user.model'); + const router = express.Router(); router.get('/', function(req,res){ @@ -16,6 +19,10 @@ router.get('/failed', function(req,res){ res.status(200).send('Failed : <a href="/auth">Try again</a>'); }); +router.get('/success', function(req,res){ + res.status(200).send(JSON.stringify(req.session.user)); +}); + router.get('/connect', myPassport.authenticate('oauth2')); @@ -27,9 +34,30 @@ router.get('/disconnect', function(req,res){ router.get('/connect/callback', myPassport.authenticate('oauth2', { failureRedirect: '/auth/failed' }), function(req, res) { - // Successful authentication, redirect home. - req.session.connected = 1; - res.redirect('/auth'); + // Successful authentication, auth user & redirect home. + let user = res.req.user + req.session.user = null + let userInfos = { + uName : user.login, + fName : user.first_name, + lName : user.last_name, + phoneNumber : user.mobile_number, + token : req.query.code, + expires : moment().add(1,'days') + } + userModel.authUser(userInfos) + .then(()=>{ + userModel.getUserUName(userInfos.uName) + .then((loggedUser)=>{ + userModel.refreshUser(loggedUser); + req.session.user = loggedUser.toJSON(); + res.redirect('/auth/success'); + }) + }) + .catch((err) => { + console.log(err); + res.redirect('/auth/failed'); + }) } );