const express = require('express'); const router = express.Router(); var { User } = require('../models/user'); var sendemail = require('../sendemail'); const tools = require('../tools/general'); var server_constants = require('../tools/server_constants'); const _ = require('lodash'); var reg = require('../reg/registration'); var { authenticate } = require('../middleware/authenticate'); var mongoose = require('mongoose'); const Subscription = mongoose.model('subscribers'); function existSubScribe(userId, access) { return Subscription.findOne({ userId, access }) .then(itemsub => { return itemsub }) .catch(err => { return null }) } // POST /users router.post('/', (req, res) => { tools.mylog("POST /users"); var body = _.pick(req.body, ['email', 'password', 'username', 'idapp', 'keyappid', 'lang']); var user = new User(body); // tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp); user.linkreg = reg.getlinkregByEmail(body.email, body.username); user.verified_email = false; if (tools.testing()) { user.verified_email = true; } user.save().then(() => { User.findByUsername(user.username) .then((usertrovato) => { tools.mylog("TROVATO USERNAME ? ", user.username, usertrovato); if (usertrovato !== null) { return user.generateAuthToken(req); } else { res.status(11100).send(); return 0; } }).then((token) => { // tools.mylog("passo il TOKEN: ", token); res.header('x-auth', token).send(user); // tools.mylog("LINKREG = " + user.linkreg); // Invia un'email all'utente // tools.mylog('process.env.TESTING_ON', process.env.TESTING_ON); if (!tools.testing()) { sendemail.sendEmail_Registration(res.locale, user.email, user.username, user.idapp, user.linkreg); } }); }).catch((e) => { res.status(400).send(e); }) }); router.get('/:username', (req, res) => { var username = req.params.username; User.findByUsername(username).then((user) => { if (!user) { return res.status(404).send(); } res.status(200).send(); }).catch((e) => { res.status(400).send(); }); }); router.post('/login', (req, res) => { var body = _.pick(req.body, ['username', 'password', 'idapp', 'keyappid', 'lang']); var user = new User(body); tools.mylog("LOGIN: username: " + user.username + " pwd = " + user.password); tools.mylog("user REC:", user); if (body.keyappid !== process.env.KEY_APP_ID) return res.status(400).send(); User.findByCredentials(user.username, user.password) .then((user) => { tools.mylog("CREDENZIALI ! "); if (!user) { tools.mylogshow("NOT FOUND !"); res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR }); } }) .then(user => { let mytoken = ''; return user.generateAuthToken(req).then((token) => { var usertosend = User(); usertosend.username = user.username; usertosend.email = user.email; usertosend.userId = user._id.toHexString(); usertosend.verified_email = user.verified_email; // tools.mylog("user.verified_email:" + user.verified_email); tools.mylog("usertosend.userId", usertosend.userId); // tools.mylog("usertosend:"); // tools.mylog(usertosend); return usertosend }) .then((usertosend) => { const useragent = req.get('User-Agent'); const access = 'auth ' + useragent; // if (usertosend.tokens.length > 0) // access = usertosend.tokens[usertosend.tokens.length - 1].access; return existSubScribe(usertosend.userId, access) .then(subscribe => { if (subscribe === null) { // Doesn't exist, so save sub passed in INPUT let subscriptionModel = new Subscription(req.body.subs); subscriptionModel.userId = usertosend._id; subscriptionModel.access = access; return subscriptionModel.save((err, subscription) => { if (err) { console.error(`Error occurred while saving subscription. Err: ${err}`); res.status(500).json({ error: 'Technical error occurred' }); } else { // Send 201 - resource created // res.status(201).json({ data: 'Subscription saved.' }); // res.send({ data: 'Subscription saved.' }); tools.sendBackNotif(subscription, req.body.options) } return { usertosend } }); } else { return { usertosend } } }); }) .then((usertosend) => { console.log('res', mytoken, usertosend); res.header('x-auth', mytoken).send({ usertosend, code: server_constants.RIS_CODE_OK }); // tools.mylog("TROVATOOO!"); tools.mylog('FINE LOGIN') }); }) .catch((e) => { tools.mylog("ERRORE IN LOGIN: " + e); res.status(400).send({ code: server_constants.RIS_CODE_LOGIN_ERR_GENERIC }); }); }); router.delete('/me/token', authenticate, (req, res) => { tools.mylog("TOKENREM = " + req.token); req.user.removeToken(req.token).then(() => { res.status(200).send(); }, () => { res.status(400).send(); }); }); module.exports = router;