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'} }); }