Guest User

Promises are good qualities

a guest
Jan 29th, 2016
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Promise = require("bluebird");
  2. var bcrypt = Promise.promisifyAll(require('bcrypt-nodejs'));
  3. var config = require(global.base + 'config.json');
  4. var gcloud = Promise.promisifyAll(require('gcloud')({
  5.   projectId: config.app.projectId,
  6.   keyFilename: config.app.keyFilename
  7. }));
  8. var bunyan = require('bunyan');
  9.  
  10. var log = bunyan.createLogger({name: 'main'});
  11. var dataset = Promise.promisifyAll(gcloud.datastore.dataset({namespace: 'users'}));
  12.  
  13. module.exports.getUser = function(id){
  14.     return new Promise(function(resolve) {
  15.         //we must have a callback here because google is no fun and will not let us pass resolve
  16.         dataset.get(dataset.key(['User', id]), function(err, entity){
  17.             if(err)
  18.                 throw err;
  19.             resolve(entity)
  20.         });
  21.     });
  22. }
  23.  
  24. module.exports.register = function(data){
  25.     return new Promise(function(resolve) {
  26.         log.info("registering user");
  27.  
  28.         var key = dataset.key(['User', data.email]);
  29.  
  30.         //we must have a callback here because google is no fun and will not let us pass resolve
  31.         dataset.save({ key: key, data: data }, function(err){
  32.             if(err)
  33.                 throw err;
  34.         });
  35.     });
  36. }
  37.  
  38. module.exports.reqRegister = function(req, res){
  39.     return new Promise(function initialChecks(resolve){
  40.         log.info("register request");
  41.         var email = req.body.email;
  42.         var password = req.body.password;
  43.         var tos = req.body.tos != '0';
  44.  
  45.         if(!tos){
  46.             throw 'Must accept TOS';
  47.         }
  48.  
  49.         if(email == null || password == null){
  50.             throw 'Must fill entire form';
  51.         }
  52.  
  53.         if(false){
  54.             throw 'Must enter valid email';
  55.         }
  56.  
  57.         if(password.length < 6){
  58.             throw 'Password must be 6 characters long';
  59.         }
  60.  
  61.         if(password.length > 256 || email.length > 256){
  62.             throw 'Email and password may not exceed 256 characters';
  63.         }
  64.         log.info("passed basic checks");
  65.         resolve(email);
  66.     })
  67.     .then(module.exports.getUser)
  68.     .then(function userExistsCheck( entity){
  69.         if(entity != null){
  70.             throw req.body.email + ' is in use';
  71.         }
  72.         log.info("user does not exist");
  73.         return req.body.password;
  74.     })
  75.     .then(function jsonify(password){
  76.         log.info("jsonifying");
  77.         return {
  78.             email : req.body.email,
  79.             password : bcrypt.hashSync(password)
  80.         };
  81.     })
  82.     .then(module.exports.register)
  83.     .then(function success(){
  84.         log.info("Success!");
  85.  
  86.         //login user here
  87.     })
  88.     .catch(function error(err){
  89.         log.error(err);
  90.  
  91.         var data = {
  92.             error: err
  93.         }
  94.  
  95.         res.json(data);
  96.     });
  97. }
Add Comment
Please, Sign In to add comment