const express = require('express') const app = express() app.use(express.json()) app.use(express.static('public')); const port = 3104 var chalk = require("chalk"); var db = require("kairoscope-db-models"); var e = chalk.red('ERROR:'); db.start().then(() => { app.get('/', (req, res) => { res.send("Mail Analytics Service"); }) app.get('/track/:id/image.png', function(req, res, next){ var id = req.params.id; res.sendFile('image.png', {root: './public'}); db.SentMail.findOne({message_id: id}).then((message) => { if(message != undefined) { message.opened = true; message.save().then((message) => { console.log(`Tracking email ${chalk.italic(id)}`); }).catch((error) => { console.log(error); }); } else { console.log(`${e} Tracking code not in database! (${chalk.italic(id)})`); } }).catch((error) => { console.log(error); }); }); app.get('/track/:id/redirect', function(req, res, next){ var id = req.params.id; var url = req.query.url; var link_title = req.query.link; res.redirect(url); console.log(`Redirecting to ${chalk.green(`\'${url}\'`)}`); db.SentMail.findOne({message_id: id}).then((message) => { if(message != undefined) { var duplicate = false; var link = undefined; for (let i = 0; i < message.opened_links.length; i++) { link = message.opened_links[i]; if(link.title == link_title){ duplicate = true; link.clicks += 1; link.updated_date = Date.now(); break; } } if(duplicate == false){ link = { title: link_title, url: url, clicks: 1, updated_date: Date.now(), } message.opened_links.push(link); } message.save().then((message) => { console.log(`Tracking link click ${chalk.italic(link_title)} from email ${chalk.italic(id)} (clicked ${link.clicks}x)`); }).catch((error) => { console.log(error); }); } else { console.log(`${e} Tracking code not in database! (${chalk.italic(id)})`); } }).catch((error) => { console.log(error); }); }); app.listen(port, () => { console.log(`Mail Analytics Service listening at ${chalk.cyan(`http://localhost:${port}`)}`); }) })