Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var User = require(__dirname+'/schema.js');
- var mongoose = require('mongoose');
- var passport = require('passport');
- const nodemailer = require('nodemailer');
- const nodemailerSendgrid = require('nodemailer-sendgrid');
- const transport = nodemailer.createTransport(
- nodemailerSendgrid({
- apiKey: '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'
- })
- );
- module.exports = function(sd) {
- sd.use(passport.initialize());
- sd.use(passport.session());
- if(mongoose.connection.readyState==0){
- mongoose.connect(sd.mongoUrl, {
- useUnifiedTopology: true,
- useNewUrlParser: true,
- useCreateIndex: true,
- promiseLibrary: global.Promise
- });
- }
- passport.serializeUser(function(user, done) {
- done(null, user.id);
- });
- passport.deserializeUser(function(id, done) {
- User.findById(id, function(err, user) {
- done(err, user);
- });
- });
- /*
- * Initialize User and Mongoose
- */
- var router = sd.router('/api/user');
- router.get("/me", function(req, res) {
- var json = {};
- if(req.user){
- User.schema.eachPath(function(path) {
- path = path.split('.')[0];
- if(path=='password'||path=='__v'||json[path]) return;
- json[path] = req.user[path];
- });
- }else{
- json.sessionID = req.sessionID;
- json.data = req.session.data;
- }
- if(!json.data) json.data = {};
- if(!json.avatarUrl) json.avatarUrl = '/assets/avatar.png';
- res.json(json);
- });
- router.post("/status", function(req, res) {
- User.findOne({
- $or: [{
- reg_email: req.body.email.toLowerCase()
- },{
- email: req.body.email.toLowerCase()
- }]
- }, function(err, user) {
- var json = {};
- json.email = !!user;
- if(user&&req.body.password){
- json.pass = user.validPassword(req.body.password);
- }
- res.json(json);
- });
- });
- router.post("/request", function(req, res) {
- User.findOne({
- email: req.body.email.toLowerCase()
- }, function(err, user) {
- user.data.resetPin = Math.floor(Math.random() * (999999 - 100000)) + 100000;
- user.data.resetCreate = new Date().getTime();
- user.data.resetCounter = 3;
- user.markModified('data');
- user.save(function(err){
- if (err) throw err;
- res.json(true);
- transport.sendMail({
- from: 'support@webart.work',
- to: '<' + req.body.email + '>',
- subject: 'Password Reset',
- html: '<h2>Dear, '+user.email.split('@')[0]+'</h2>. <br> To reset your password at webart.work, please enter this code on the site: <h3>'+ user.data.resetPin +'</h3>This code will be avaliable for 10 min'
- })
- .then(([res]) => {
- console.log('Message delivered with code %s %s', res.statusCode, res.statusMessage);
- })
- .catch(err => {
- console.log('Errors occurred, failed to deliver message');
- if (err.response && err.response.body && err.response.body.errors) {
- err.response.body.errors.forEach(error => console.log('%s: %s', error.field, error.message));
- } else {
- console.log(err);
- }
- });
- });
- });
- });
- router.post("/change", function(req, res) {
- User.findOne({
- email: req.body.email.toLowerCase()
- }, function(err, user) {
- var message;
- var now = new Date().getTime();
- if (user.data.resetCounter > 0 && (now - user.data.resetCreate) <= 600000) {
- if (user.data.resetPin == req.body.pin) {
- user.password = user.generateHash(req.body.password);
- message = 'Password successfully changed.';
- delete user.data.resetPin;
- delete user.data.resetCounter;
- delete user.data.resetCreate;
- } else {
- user.data.resetCounter--;
- message = 'Wrong code.';
- }
- } else {
- message = 'I am sorry reset code is not active now.'
- delete user.data.resetPin;
- delete user.data.resetCounter;
- delete user.data.resetCreate;
- }
- user.markModified('data');
- user.save(function(err) {
- if (err) throw err;
- res.json(message);
- });
- });
- });
- router.post("/changePassword", sd._ensure, function(req, res) {
- if (req.user.validPassword(req.body.oldPass)){
- req.user.password = req.user.generateHash(req.body.newPass);
- req.user.save(function(){
- res.json({
- success: true,
- message: "Password successfully changed",
- typeOfMessage: 'info'
- });
- });
- } else {
- if(!req.user.validPassword(req.body.oldPass)) {
- res.json({
- success: false,
- message: "The old password is not correct",
- typeOfMessage: 'error'
- })
- } else {
- res.json({
- success: false,
- message: "An error occurred",
- typeOfMessage: 'error'
- });
- }
- }
- });
- router.get('/logout', function(req, res) {
- req.logout();
- res.redirect(sd._config.passport.local.successRedirect);
- });
- router.get('/logout-local', function(req, res) {
- req.logout();
- res.json(true);
- });
- router.post('/invite', function(req, res) {
- User.findOne({
- email: req.body.fromEmail
- }, (err, user) => {
- if(err)
- throw err
- var email = {
- from: 'support@webart.work',
- to: req.body.email,
- subject: 'Support | WebArt.Work',
- text: 'You are invited to the Memo Wallet from ' + req.body.fromName + '. Сlick on this link, to sign up http://'+user.domain+'/sign?name=' + req.body.name + '&email=' +req.body.email
- };
- client.sendMail(email, function(err, info){
- if (err) throw err
- res.json({
- success: true
- })
- });
- })
- })
- /*
- * Passport Management
- */
- var LocalStrategy = require('passport-local').Strategy;
- router.post('/login-local', passport.authenticate('login-local'), function(req, res) {
- let user = JSON.parse(JSON.stringify(req.user));
- delete user.password;
- delete user.recPass;
- delete user.recUntil;
- res.json(user);
- });
- passport.use('login-local', new LocalStrategy({
- usernameField : 'username',
- passwordField : 'password',
- passReqToCallback : true
- }, function(req, username, password, done) {
- User.findOne({
- email: username.toLowerCase(),
- blocked: {
- $ne: true
- }
- }, function(err, user) {
- if(!user.domain) user.domain=[];
- if(!user.domain.includes(req.get('host'))){
- user.domain.push(req.get('host'));
- user.save(function(){});
- }
- if (err) return done(err);
- if (!user) return done(null, false);
- if (!user.validPassword(password)) return done(null, false);
- return done(null, user);
- });
- }));
- router.post('/login', passport.authenticate('login', {
- successRedirect: '/',
- failureRedirect: '/Login'
- }));
- passport.use('login', new LocalStrategy({
- usernameField : 'username',
- passwordField : 'password',
- passReqToCallback : true
- }, function(req, username, password, done) {
- User.findOne({
- email: username.toLowerCase(),
- blocked: {
- $ne: true
- }
- }, function(err, user) {
- if(!user.domain) user.domain=[];
- if(!user.domain.includes(req.get('host'))){
- user.domain.push(req.get('host'));
- user.save(function(){});
- }
- if (err) return done(err);
- if (!user) return done(null, false);
- if (!user.validPassword(password)) return done(null, false);
- return done(null, user);
- });
- }));
- router.post('/signup-local', passport.authenticate('signup'), function(req, res) {
- let user = JSON.parse(JSON.stringify(req.user));
- delete user.password;
- delete user.recPass;
- delete user.recUntil;
- res.json(user);
- });
- passport.use('signup', new LocalStrategy({
- usernameField : 'username',
- passwordField : 'password',
- passReqToCallback : true
- }, function(req, username, password, done) {
- User.findOne({
- 'email': username.toLowerCase()
- }, function(err, user) {
- if (err) return done(err);
- if (user) return done(null, false);
- else {
- var newUser = new User();
- if(!newUser.domain) newUser.domain=[];
- if(!newUser.domain.includes(req.get('host'))){
- newUser.domain.push(req.get('host'));
- }
- newUser.is = {
- admin: false
- };
- newUser.name = req.body.name;
- newUser.email = username.toLowerCase();
- newUser.password = newUser.generateHash(password);
- newUser.data = req.session.data && typeof req.session.data == 'object' && req.session.data || {};
- newUser.data.fr = []
- newUser.data.friends = []
- newUser.data.balance = {}
- newUser.data.invites = []
- newUser.data.deleted = []
- newUser.data.declinedInvites = []
- newUser.data.phone = ''
- newUser.save(function(err) {
- if (err) throw err;
- return done(null, newUser);
- });
- }
- });
- }));
- router.post('/signup', passport.authenticate('local-signup', {
- successRedirect: '/',
- failureRedirect: '/Sign'
- }));
- passport.use('local-signup', new LocalStrategy({
- usernameField : 'username',
- passwordField : 'password',
- passReqToCallback : true
- }, function(req, username, password, done) {
- User.findOne({
- 'email': username.toLowerCase()
- }, function(err, user) {
- if (err) return done(err);
- if (user) return done(null, false);
- else {
- var newUser = new User();
- if(!newUser.domain) newUser.domain=[];
- if(!newUser.domain.includes(req.get('host'))){
- newUser.domain.push(req.get('host'));
- }
- newUser.is = {
- admin: false
- };
- newUser.email = username.toLowerCase();
- newUser.password = newUser.generateHash(password);
- newUser.data = req.session.data && typeof req.session.data == 'object' && req.session.data || {};
- newUser.save(function(err) {
- if (err) throw err;
- return done(null, newUser);
- });
- }
- });
- }));
- // Google
- if (sd._config.passport.google) {
- var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
- router.get('/google', passport.authenticate('google', {
- scope: ['profile', 'email']
- }));
- router.get('/google/callback', passport.authenticate('google', {
- successRedirect: '/',
- failureRedirect: '/'
- }));
- passport.use('google', new GoogleStrategy({
- clientID: sd._config.passport.google.clientID,
- clientSecret: sd._config.passport.google.clientSecret,
- callbackURL: sd._config.passport.google.callbackURL,
- passReqToCallback: true
- }, function(req, token, refreshToken, profile, done) {
- User.findOne({
- _id: req.user._id
- }, function(err, user) {
- if (err) return done(err);
- if (user) {
- var google = {};
- google.id = profile.id;
- google.url = profile._json.url;
- req.user.saveGoogle(google, function() {});
- return done(null, user);
- }
- });
- }));
- }
- // Instagram
- if (sd._config.passport.instagram) {
- var InstagramStrategy= require('passport-instagram').Strategy;
- router.get('/instagram',
- passport.authenticate('instagram')
- );
- router.get('/instagram/callback', passport.authenticate('instagram', {
- failureRedirect: '/login'
- }), function(req, res) {
- res.redirect('/');
- });
- passport.use('instagram',new InstagramStrategy({
- clientID : sd._config.passport.instagram.clientID,
- clientSecret : sd._config.passport.instagram.clientSecret,
- callbackURL : sd._config.passport.instagram.callbackURL,
- passReqToCallback:true
- }, function (req, accessToken, refreshToken, profile, done) {
- User.findOne({
- _id: req.user._id
- }, function(err, user) {
- if (err) return done(err);
- if (user) {
- var instagram = {};
- instagram.id = profile.id;
- instagram.username = profile.username;
- req.user.saveInstagram(instagram, function() {});
- return done(null, user);
- }
- });
- }));
- }
- // Facebook
- if (sd._config.passport.facebook) {
- var FacebookStrategy = require('passport-facebook').Strategy;
- router.get('/facebook', passport.authenticate('facebook', {
- display: 'page',
- scope: 'email'
- }));
- router.get('/facebook/callback', passport.authenticate('facebook', {
- failureRedirect: '/login'
- }), function(req, res) {
- res.redirect('/');
- });
- passport.use('facebook',new FacebookStrategy({
- clientID: sd._config.passport.facebook.clientID,
- clientSecret: sd._config.passport.facebook.clientSecret,
- callbackURL: sd._config.passport.facebook.callbackURL,
- profileFields: ['id', 'profileUrl'],
- passReqToCallback:true
- }, function (req,token, refreshToken, profile, done) {
- console.log(profile);
- User.findOne({
- _id:req.user._id
- },
- function (err, user) {
- if (err)return done(err);
- if (user) {
- var facebook={};
- facebook.profileUrl=profile.profileUrl;
- facebook.id=profile.id;
- req.user.saveFacebook(facebook,function(){
- });
- return done(null, user);
- }
- });
- }));
- }
- // Twitter
- if (sd._config.passport.twitter) {
- var TwitterStrategy = require('passport-twitter').Strategy;
- passport.use(new TwitterStrategy({
- consumerKey: sd._config.passport.twitter.consumerKey,
- consumerSecret: sd._config.passport.twitter.consumerSecret,
- callbackURL: sd._config.passport.twitter.callbackURL
- },function(token, tokenSecret, profile, done) {
- process.nextTick(function() {
- User.findOne({
- 'twitter.id': profile.id
- }, function(err, user) {
- if (err) return done(err);
- else if (user) return done(null, user);
- else {
- var newUser = new User();
- newUser.twitter = {
- displayName : profile.displayName,
- username : profile.username,
- id : profile.id,
- token : token,
- }
- newUser.save(function(err) {
- console.log(newUser);
- if (err) throw err;
- return done(null, newUser);
- });
- }
- });
- });
- }));
- router.get('/twitter', passport.authenticate('twitter'));
- router.get('/twitter/callback', passport.authenticate('twitter', {
- successRedirect: sd._config.passport.twitter.successRedirect,
- failureRedirect: sd._config.passport.twitter.failureRedirect
- }),function(req, res) {
- res.redirect(sd._config.passport.twitter.successRedirect);
- });
- }
- // End of Crud
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement