require('./config/config'); const _ = require('lodash'); const cors = require('cors'); var fs = require('fs'); var http = require('http'); var https = require('https'); const port = process.env.PORT; var express = require('express'); i18n = require("i18n"); if (process.env.NODE_ENV === 'production') { var privateKey = fs.readFileSync(process.env.PATH_CERT_KEY, 'utf8'); var certificate = fs.readFileSync(process.env.PATH_SERVER_CRT, 'utf8'); var credentials = {key: privateKey, cert: certificate}; porthttp = port + 1 }else{ porthttp = port } console.log("DB: " + process.env.DATABASE); console.log("PORT: " + process.env.PORT); console.log("MONGODB_URI: " + process.env.MONGODB_URI); const bodyParser = require('body-parser'); const { ObjectID } = require('mongodb'); var { mongoose } = require('./db/mongoose'); var { Todo } = require('./models/todo'); var { User } = require('./models/user'); var { authenticate } = require('./middleware/authenticate'); var sendemail = require('./sendemail'); var reg = require('./reg/registration'); var tools = require('./tools/general'); var server_constants = require('./tools/server_constants'); var app = express(); var bcrypt = require('bcrypt'); i18n.configure({ locales: ['it', 'en'], directory: __dirname + '/locales' }); app.use(cors({ exposedHeaders: ['x-auth'], })); app.use(bodyParser.json()); app.use(i18n.init); function getlang(res) { return res.locale; } app.post(process.env.LINKVERIF_REG, (req, res) => { var body = _.pick(req.body, ['idapp', 'idlink']); var idapp = body.idapp; var idlink = body.idlink; console.log("POST " + process.env.LINKVERIF_REG + " idapp= " + idapp + " idlink = " + idlink); // Cerco l'idlink se è ancora da Verificare User.findByLinkreg(idapp, idlink).then((user) => { if (!user) { //console.log("NON TROVATO!"); return res.status(404).send(); } else { if (user.verified_email) { res.send({ code: server_constants.RIS_CODE_EMAIL_ALREADY_VERIFIED, msg: res.__("L'Email è già stata Verificata.") }); } else { user.verified_email = true; user.save().then(() => { //console.log("TROVATOOOOOO!"); res.send({ code: server_constants.RIS_CODE_EMAIL_VERIFIED, msg: res.__('Email Verificata!') }); }); } } }).catch((e) => { console.log(e); res.status(400).send(); }); }); // Faccio richiesta di una Nuova Password app.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => { var body = _.pick(req.body, ['idapp', 'email']); var idapp = body.idapp; var email = body.email; console.log("POST " + process.env.LINK_REQUEST_NEWPASSWORD + " idapp= " + idapp + " email = " + email); User.findByEmail(idapp, email).then((user) => { if (!user) { return res.status(404).send(); } else { // Creo il tokenforgot user.tokenforgot = jwt.sign(user._id.toHexString(), process.env.SIGNCODE).toString(); user.date_tokenforgot = new Date(); user.save().then(() => { sendemail.sendEmail_RequestNewPassword(getlang(res), user.email, user.idapp, user.tokenforgot); res.send({ code: server_constants.RIS_CODE_OK, msg: '' }); }); } }).catch((e) => { console.log(e); res.status(400).send(); res.send({ code: server_constants.RIS_CODE_ERR, msg: e }); }); }); // Invio la Nuova Password richiesta dal reset! // Ritorna il token per poter effettuare le chiamate... app.post(process.env.LINK_UPDATE_PASSWORD, (req, res) => { var body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'password']); var idapp = body.idapp; var email = body.email; var tokenforgot = body.tokenforgot; var password = body.password; console.log("POST " + process.env.LINK_UPDATE_PASSWORD + " idapp= " + idapp + " email = " + email + " tokenforgot = " + tokenforgot); User.findByLinkTokenforgot(idapp, email, tokenforgot).then((user) => { if (!user) { return res.status(404).send(); } else { // aggiorna la nuova password user.password = password; // Crea token user.generateAuthToken().then(token => { user.tokenforgot = ''; // Svuota il tokenforgot perché non ti servirà più... // Salva lo User user.save().then(() => { res.header('x-auth', token).send(user); // Ritorna il token di ritorno }); }) } }).catch((e) => { console.log(e); res.status(400).send(); }); }); // POST /users app.post('/users', (req, res) => { console.log("POST /users"); var body = _.pick(req.body, ['email', 'password', 'username', 'idapp', 'keyappid', 'lang']); var user = new User(body); console.log("LANG PASSATO = " + user.lang); console.log("IDAPP = " + user.idapp); user.linkreg = reg.getlinkregByEmail(body.email, body.username); user.verified_email = false; user.save().then(() => { User.findByUsername(user.username) .then((usertrovato) => { //console.log("USERNAME : " + user.username); //console.log("TROVATO USERNAME ? " + usertrovato); if (usertrovato !== null) { //console.log("Non esiste ancora"); // Non esiste ancora, allora genero il TOKEN ! return user.generateAuthToken(); } else { //console.log("Esiste già! Quindi non creo lo user."); // Esiste già! Quindi non creo lo user. res.status(11100).send(); return 0; } }).then((token) => { // passo il token in x-auth //console.log("USER"); //console.log(user); console.log("TOKEN: "); console.log(token); res.header('x-auth', token).send(user); console.log("LINKREG = " + user.linkreg); // Invia un'email all'utente sendemail.sendEmail_Registration(getlang(res), user.email, user.username, user.idapp, user.linkreg); }); }).catch((e) => { res.status(400).send(e); }) }); app.get('/users/: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(); }); }); app.get('/email/:email', (req, res) => { var email = req.params.email; User.findByEmail(email).then((user) => { if (!user) { return res.status(404).send(); } res.status(200).send(); }).catch((e) => { res.status(400).send(); }); }); app.post('/users/login', (req, res) => { var body = _.pick(req.body, ['username', 'password', 'idapp', 'keyappid', 'lang']); var user = new User(body); console.log("user: " + user.username + " pwd = " + user.password); if (body.keyappid !== process.env.KEY_APP_ID) // Se non faccio la richesa con la IDAPP giusta, allora esco! return res.status(400).send(); User.findByCredentials(user.username, user.password) .then((user) => { console.log("CREDENZIALI ! "); if (!user) { console.log("NOT FOUND !"); res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR }); } else { return user.generateAuthToken().then((token) => { var usertosend = User(); usertosend.username = user.username; usertosend.email = user.email; usertosend._id = user._id; usertosend.verified_email = user.verified_email; console.log("user.verified_email:" + user.verified_email); console.log("usertosend:"); console.log(usertosend); res.header('x-auth', token).send(usertosend); console.log("TROVATOOO!"); }); } }).catch((e) => { console.log("ERR: " + e); res.status(400).send({ code: server_constants.RIS_CODE_LOGIN_ERR_GENERIC }); }); }); app.delete('/users/me/token', authenticate, (req, res) => { console.log("TOKENREM = " + req.token); req.user.removeToken(req.token).then(() => { res.status(200).send(); }, () => { res.status(400).send(); }); }); var httpServer = http.createServer(app); var httpsServer = https.createServer(credentials, app); console.log("httpServer: port ", porthttp); httpServer.listen(porthttp); if (process.env.NODE_ENV === 'production') { console.log("httpsServer: port ", port); httpsServer.listen(port); } //app.listen(port, () => { // console.log(`Server started at port ${port}`); //}); module.exports = { app }; if (process.env.TEST_ATTIVO) { eseguitest(); } function eseguitest() { if (true) { console.log("ESEGUI I TEST:"); console.log("linkreg = " + sendemail.getlinkReg(1, "myusername")); } //sendemail.sendEmail_Registration("en", "paolo.arena77@gmail.com", "paoloar77", "miapwd", 1, "http://provalink.com"); }