user.js 3.8 KB
var config = require('../../server/config.json');
var loopback = require("loopback")
var path = require('path');
module.exports = function(user) {
	
	var app;
	user.on('attached', function(a) {
		app = a;
	});

	user.observe('after save', function setRoleMapping(ctx, next) {
		var RoleMapping = app.models.RoleMapping;
	  	var Role = app.models.Role;
  		if (ctx.instance) {
    		if(ctx.isNewInstance) {
      			var roleId = ctx.instance.role;
		      	Role.findOne({where: {name: roleId}}, function(err, role) {
		      		if (err){
		      			console.log("role find in user", err,new Date())
		      			next(err);
		      		}
		      		role.principals.create({
		        		principalType: RoleMapping.USER,
		        		principalId: ctx.instance.id
			      	}, function(err, principal) {
	           			if (err){
		      				console.log("role create in user", err,new Date())
	           				next(err);
	           			}
		         	});
			    });


    		}
    		next();
    		
  		} else{
	  		if(ctx.data.role){
	  			Role.findOne({where:{name:ctx.data.role}}, function(err, roleContent){
	  				if (err){
		     			console.log("data.role create in user", err,new Date())
	  					next(err);
	  				}
	  				var getRoleId = roleContent.id;
					RoleMapping.findOne({where:{principalId:ctx.where.id}},function(err,updateRole){
						if(err){
			     			console.log("RoleMapping find in user", err,new Date())
							next(err);
						}
						updateRole.updateAttribute("roleId",getRoleId,function(err,res){
							if (err){
								console.log("updateRole in user",err, new Date())
								next(err);
							}
						});
					});
				});
	  		}
	  	next();
  		}
	});

	user.afterRemote('signUp', function(context, userdata, next) {
		console.log("userdata----",userdata);
		user.findById(userdata.res.id,function(err,userInstance){
			console.log("-------------",userInstance);
			var options = {
				type: 'email',
				host:config.host,
				to: userInstance.email,
				from: 'test@viithiisys.com',
				subject: 'Thanks for registering.',
				template: path.resolve(__dirname, '../../server/views/verify.ejs'),
				redirect: 'http://localhost:3000/#/login',
				user: user
			};
			userInstance.verify(options, function(err, response, next) {
				if (err) return next(err);
				console.log('> verification email sent:', response);
				userInstance.title = 'Signed up successfully',
				userInstance.content =  'Please check your email and click on the verification link before logging in.',
				userInstance.redirectTo = '/',
				userInstance.redirectToLinkText = 'Log in'
				context.res.send(userInstance);
			});
		})
	});

	user.afterRemote('login', function(ctx, member, next) {
        user.findById(member.userId, function(err, response) {
            if(err){
            	console.log("afterRemote in extendedUser",err, new Date())
            	next(err);
            } else{
            	if(response && response.status == "false"){
            		user.logout(member.id, function (err) {
            			var error = new Error();
            			error.message = "Account Deactivated";
						next(error);
					});		
            	} else {
            		member.username = response.username;
		        	member.email = response.email;
		        	member.role = response.role;
		        	member.status = response.status;
		        	next();
            	}
            }
        });
    });

    
    user.signUp = function(req, cb) {
    	req.role = "user";
 		user.create(req,function(err,users){
 			if(err){
 				cb(err,null)
 			}else{
 				console.log("users==============",users);
 				cb(null,users)
 			}
 		})
    }
    user.remoteMethod('signUp', {
		accepts: [
			{arg: 'req', type: 'object', 'http': {source: 'body'}}
		],
		returns: [{arg: 'res', type: 'object', 'http': {source: 'body'}}],
		description: ['Sign up of user.'],
		http: {path:'/signUp', verb: 'post'}
	});

}