app.post('/auth', function(req, res, next) { var code = req.query.code; // todo: change to request code from req.body instead of query. console.log('code', code, req.session); if(null === code) { res.status(400).send('An error occured'); next(); } // This should work: OAuth.auth('linkedin', req.session, { code: code }) .then(function (request_object) { return request_object.get('/me'); }) .then(function (info) { var user = { email: info.email, firstname: info.first_name, lastname: info.last_name }; //login your user here. res.status(200).send('Successfully logged in'); next(); }) .fail(function (e) { //handle errors here res.status(400).send('An error occured'); next(); }); });
exports.oauthdSetCode = function (req, res) { OAuth.setOAuthdURL(config.oauthd.serverURL); OAuth.initialize(config.oauthd.OAUTHD_ID, config.oauthd.OAUTHD_SECRET); var provider = req.body.provider; var code = req.body.code; debug('code = %s', code); debug('Generate Token = %s', OAuth.generateStateToken(req)); OAuth.auth(provider, req.session, { code: code //cf result.code client side }).then( function (obj) { signin(obj, provider) .then( function (user) { debug('REQ.SESSION = ', req.session); user = user.toObject(); var token = jwt.encode({ user: user._id, roles: user.roles }, config.jwt.secret); user.token = token; res.set(config.jwt.authHeaderName, token); providerHelpers.getUserProviderNames(user).then(function (names) { user.providerNames = names; req.session.user = user; res.status(200).send(req.session.user); }); }, function (err) { req.session.user = null; res.status(500).send(err); } ); }, function (err) { req.session.user = null; debug('Err thrown in OAuth.auth(), ', err); res.status(500).send(err); } ) .fail( function (err) { req.session.user = null; debug('Err thrown in OAuth.auth(), ', err); res.status(500).send(err); } ); };
require ('./server/mongo-connection')(function(err, dbConnection){ if (err) { console.log('no db connection'); return } /*Routes*/ //root*/ app.get("/", function (req, res) { if (!req.session.firstName) { res.redirect("/logout"); return; } res.sendFile(__dirname + '/dev/index.html'); }); app.get("/login", function (req, res) { if (!req.session.firstName) { res.redirect("/"); return; } res.sendFile(__dirname + '/dev/oath.html'); }); // fetch current user for navbar app.get('/fetch_current_user', function (req, res) { if(!req.session.firstName) { res.send('there is not a user in session'); return; } res.json({user: req.session.firstName}); }); app.get('/fetch-profile', function (req, res) { var myProfile = require('./server/api/fetch-profile')(dbConnection); myProfile(req, res); }); //logout app.get('/logout', function (req, res) { //destroy user's session to log them out req.session.destroy(function() { res.redirect('/oauth'); }); }); //OAUTH OAuth.initialize( config.oauthAppKey, config.oauthSecretKey); app.get("/oauth", function (req, res) { res.sendFile(__dirname + '/dev/oath.html'); }); app.get('/loginfacebook', OAuth.auth('facebook', 'http://localhost:3700/oauth/redirect')); app.get('/logingoogle', OAuth.auth('google', 'http://localhost:3700/oauth/redirect')); app.get('/oauth/redirect', OAuth.redirect(function(result, req, res) { if (result instanceof Error) { res.status(500).res.send("error: " + result.message); } result.me().done(function(data) { //console.log(me); console.log(data.firstname); console.log(data.lastname); const newUser = { "firstName": data.firstname, "lastName": data.lastname }; dbConnection.collection('users').find({"firstName": newUser.firstName, "lastName": newUser.lastName}) .toArray(function (err, matchingUsers) { assert.equal(err, null); if (matchingUsers != null && matchingUsers.length == 1) { //console.dir(matchingUsers); //console.dir(req.body.newcode); //workflow: user log in with oauth, // if they are not in the db, save the user to the db { firstName, lastName } req.session.firstName = matchingUsers[0].firstName; req.session.userId = matchingUsers[0]._id; res.redirect("/"); console.log("user found"); console.log(matchingUsers[0]._id); } else { // if they are not in the db, save the user to the db { firstName, lastName } dbConnection.collection('users').insertOne(newUser, function (err, result) { if (err) { res.send("error: something bad happened and you were not signed up") } res.redirect("/"); }); } }); }) })); app.post("/update-profile", function(req, res) { var myProfile = require('./server/api/update-profile')(dbConnection); myProfile(req, res); }); //Closet app.get("/items", function (req, res) { var items = require('./server/api/items')(dbConnection); items(req, res); }); app.get("/all_items", function (req, res) { var item = require('./server/api/all_items')(dbConnection); item(req, res); }); app.get('/fetch_item/:id', function(req, res){ const id = req.params.id; const obj_item = new ObjectID(`${id}`); dbConnection.collection('items').findOne({ '_id': obj_item}, function(err, result) { if (err) { console.log('error: item not found in db'); } else { console.log(result); console.log('item found in items collection'); //add function to determine 'isItemInMyItems' or isItemInSharedItems32 if (req.session.userId == result.user) { result.isMyItem = true; console.log('item found in user-myItems'); res.json(result); res.end(); } else { console.log(`userID of logged in user: ${req.session.userId}`); dbConnection.collection('users').findOne( {_id: ObjectID(req.session.userId)},{ _id:0, sharedItems: 1 }, function (err, matchedUser) { if (err) { console.log('user cannot be found'); res.json(result); res.end(); } else { var isShared = _.some(matchedUser.sharedItems, function(item) { return item.id.equals(obj_item); }); console.log(isShared); if (isShared == true){ result.isSharedItem = true; res.json(result); res.end(); } else { res.json(result); res.end(); } } }) } } }) }); app.get("/my_items", function (req, res) { var items = require('./server/api/items')(dbConnection); items(req, res); }); app.get("/shared_items", function (req, res) { var items = require('./server/api/shared_items')(dbConnection); items(req, res); }); app.get("/search_items", function (req, res) { var items = require('./server/api/search_items')(dbConnection); items(req, res); }); app.post("/newItem", function(req, res) { var newItem = require('./server/api/new-item')(dbConnection); newItem(req, res); }); app.post('/delete_item/:id', function(req,res) { const id = req.params.id; const obj_id = new ObjectID(`${id}`); console.log(`${obj_id} will be deleted`); dbConnection.collection('users').update( { _id: ObjectID(`${req.session.userId}`)}, { $pull: { myItems : { id: obj_id}}}, function(err, result) { if (err) { res.send("nested element removed from user collection myItems") } dbConnection.collection('items').deleteOne({ '_id': obj_id}, function(err, result) { if (err) { console.log('error: item not found in items collection'); } console.log('item successfully deleted'); res.end(); }); }); }); app.post('/add_shared/:id', function(req,res) { const id = req.params.id; const obj_id = new ObjectID(`${id}`); console.log(`${obj_id} will be added to sharedItems`); // find imageURL from items collection dbConnection.collection('items').findOne({ '_id': obj_id}, function(err, result) { if (err) { console.log('error: item not found in db'); } else { console.log(`item found in items collection: ${result}`); const image = result.image; //add id and image to myShared array in user collection dbConnection.collection('users').update( { _id: ObjectID(`${req.session.userId}`)}, { $push: { sharedItems : { "id": obj_id, "image" : image}}}, function(err, result) { if (err) { res.send("item not added to myShared in user collection") } console.log('item successfully added to myShared'); res.end(); }); } }); }); app.post('/remove_shared/:id', function(req,res) { const id = req.params.id; const obj_id = new ObjectID(`${id}`); console.log(`${obj_id} will be removed from sharedItems`); dbConnection.collection('users').update( { _id: ObjectID(`${req.session.userId}`)}, { $pull: { sharedItems : { id: obj_id}}}, function(err, result) { if (err) { res.send("item not removed from myShared in user collection") } res.send('item successfully removed from myShared'); res.end(); }); }); /*Always put last because it is sequential*/ app.use(express.static('dev')); app.use (require('webpack-dev-middleware')(compiler, { noInfo: true, publicPath: webpackConfig.output.publicPath })); app.use(require('webpack-hot-middleware')(compiler)); app.use(function (req, res, next) { // res.status(404); // res.send("File not found"); res.sendFile(__dirname + '/dev/index.html'); }); app.listen(PORT, function () { console.log("server started on port " + PORT); }); });
app.post('/forgot', userController.postForgot); app.get('/reset/:token', userController.getReset); app.post('/reset/:token', userController.postReset); app.get('/signup', userController.getSignup); app.post('/signup', userController.postSignup); app.get('/contact', contactController.getContact); app.post('/contact', contactController.postContact); app.get('/account', passportConf.isAuthenticated, userController.getAccount); app.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile); app.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword); app.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount); app.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink); OAuth.initialize('b38gzoiWDSrHtXmB3lrFuaaDI2Q', 'laGxa8vgGQ2lIzSmF2qLrA4F_xw'); app.get('/evernote',userController.evernote); app.get('/evernote/signin', OAuth.auth('evernote_sandbox', 'http://178.62.122.146:3000/evernote/redirect')); app.get('/evernote/redirect', OAuth.redirect(function(result, req, res) { var token = encodeURIComponent(result.oauth_token); res.redirect('/evernote/register/?token=' + token); /*console.log(client); var userStore = client.getUserStore(); console.log(userStore); userStore.getUser(function(err, user) { console.log(user); });*/ /*if (result instanceof Error) { res.send(500, "error: " + result.message);
module.exports = function(app) { OAuth.initialize(app.get('oauth').key, app.get('oauth').secret); // TODO: refactor var baseUrl = 'http://localhost:4001'; if('staging' == process.env.NODE_ENV) { baseUrl = 'https://api-acc-tedx-amsterdam.herokuapp.com'; } else if('production' == process.env.NODE_ENV) { baseUrl = 'https://api-tedx-amsterdam.herokuapp.com'; } // Two step authentication process. // Currently in use. // Step one: signin app.get('/signin', OAuth.auth('linkedin', baseUrl + '/oauth/redirect')); // Step two: redirect after authentication success. app.get('/oauth/redirect', OAuth.redirect(function(result, req, res) { if (result instanceof Error || null == result) { res.status(500).send("error: " + result.message); } result.me().done(function(me) { console.log(me); var member = app.models.Member; member.create({ id: md5(me.id), email: "", firstName: me.firstname, lastName: me.lastname, linkedinId: me.id, linkedinPictureUrl: me.avatar, linkedinUrl: me.url, linkedinBio: me.bio }, function(err, newMember) { console.log('created new member', newMember, err); }); res.status(200).send(JSON.stringify(me)); }); })); // Below is not used; for demo purposes: // Three step authentication process using a popup on the front-end. app.get('/oauth/token', function(req, res, next) { var token = OAuth.generateStateToken(req); res.status(200).send({token:token}); next(); }); // This function is not working properly yet; nearly there. app.post('/auth', function(req, res, next) { var code = req.query.code; // todo: change to request code from req.body instead of query. console.log('code', code, req.session); if(null === code) { res.status(400).send('An error occured'); next(); } // This should work: OAuth.auth('linkedin', req.session, { code: code }) .then(function (request_object) { return request_object.get('/me'); }) .then(function (info) { var user = { email: info.email, firstname: info.first_name, lastname: info.last_name }; //login your user here. res.status(200).send('Successfully logged in'); next(); }) .fail(function (e) { //handle errors here res.status(400).send('An error occured'); next(); }); }); };