105 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { Observable } from 'rx';
 | |
| import debugFactory from 'debug';
 | |
| import { isEmail } from 'validator';
 | |
| import path from 'path';
 | |
| 
 | |
| const debug = debugFactory('fcc:user:remote');
 | |
| const isDev = process.env.NODE_ENV !== 'production';
 | |
| 
 | |
| function destroyAllRelated(id, Model) {
 | |
|   return Observable.fromNodeCallback(
 | |
|     Model.destroyAll,
 | |
|     Model
 | |
|   )({ userId: id });
 | |
| }
 | |
| 
 | |
| module.exports = function(app) {
 | |
|   var User = app.models.User;
 | |
|   var UserIdentity = app.models.UserIdentity;
 | |
|   var UserCredential = app.models.UserCredential;
 | |
|   User.observe('before delete', function(ctx, next) {
 | |
|     debug('removing user', ctx.where);
 | |
|     var id = ctx.where && ctx.where.id ? ctx.where.id : null;
 | |
|     if (!id) {
 | |
|       return next();
 | |
|     }
 | |
|     return Observable.combineLatest(
 | |
|       destroyAllRelated(id, UserIdentity),
 | |
|       destroyAllRelated(id, UserCredential),
 | |
|       function(identData, credData) {
 | |
|         return {
 | |
|           identData: identData,
 | |
|           credData: credData
 | |
|         };
 | |
|       }
 | |
|     )
 | |
|       .subscribe(
 | |
|         function(data) {
 | |
|           debug('deleted', data);
 | |
|         },
 | |
|         function(err) {
 | |
|           debug('error deleting user %s stuff', id, err);
 | |
|           next(err);
 | |
|         },
 | |
|         function() {
 | |
|           debug('user stuff deleted for user %s', id);
 | |
|           next();
 | |
|         }
 | |
|       );
 | |
|   });
 | |
| 
 | |
|   // set email varified false on user email signup
 | |
|   // should not be set with oauth signin methods
 | |
|   User.beforeRemote('create', function(ctx, user, next) {
 | |
|     var body = ctx.req.body;
 | |
|     if (body) {
 | |
|       // this is workaround for preventing a server crash
 | |
|       // refer strongloop/loopback/#1364
 | |
|       if (body.password === '') {
 | |
|         body.password = null;
 | |
|       }
 | |
|       body.emailVerified = false;
 | |
|     }
 | |
|     next();
 | |
|   });
 | |
| 
 | |
|   // send welcome email to new camper
 | |
|   User.afterRemote('create', function({ req, res }, user, next) {
 | |
|     debug('user created, sending email');
 | |
|     if (!user.email || !isEmail(user.email)) { return next(); }
 | |
|     const redirect = req.session && req.session.returnTo ?
 | |
|       req.session.returnTo :
 | |
|       '/';
 | |
| 
 | |
|     var mailOptions = {
 | |
|       type: 'email',
 | |
|       to: user.email,
 | |
|       from: 'Team@freecodecamp.com',
 | |
|       subject: 'Welcome to Free Code Camp!',
 | |
|       protocol: isDev ? null : 'https',
 | |
|       host: isDev ? 'localhost' : 'freecodecamp.com',
 | |
|       port: isDev ? null : 443,
 | |
|       template: path.join(
 | |
|         __dirname,
 | |
|         '..',
 | |
|         'views',
 | |
|         'emails',
 | |
|         'a-extend-user-welcome.ejs'
 | |
|       ),
 | |
|       redirect: '/email-signin'
 | |
|     };
 | |
| 
 | |
|     debug('sending welcome email');
 | |
|     return user.verify(mailOptions, function(err) {
 | |
|       if (err) { return next(err); }
 | |
|       req.flash('success', {
 | |
|         msg: [ 'Congratulations ! We\'ve created your account. ',
 | |
|                'Please check your email. We sent you a link that you can ',
 | |
|                'click to verify your email address and then login.'
 | |
|              ].join('')
 | |
|       });
 | |
|       return res.redirect(redirect);
 | |
|     });
 | |
|   });
 | |
| };
 |