index.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const express = require('express')
  2. const app = express()
  3. app.use(express.json())
  4. app.use(express.static('public'));
  5. const port = 3104
  6. var chalk = require("chalk");
  7. var db = require("kairoscope-db-models");
  8. var e = chalk.red('ERROR:');
  9. db.start().then(() => {
  10. app.get('/', (req, res) => {
  11. res.send("Mail Analytics Service");
  12. })
  13. app.get('/track/:id/image.png', function(req, res, next){
  14. var id = req.params.id;
  15. res.sendFile('image.png', {root: './public'});
  16. db.SentMail.findOne({message_id: id}).then((message) => {
  17. if(message != undefined) {
  18. message.opened = true;
  19. message.save().then((message) => {
  20. console.log(`Tracking email ${chalk.italic(id)}`);
  21. }).catch((error) => { console.log(error); });
  22. } else {
  23. console.log(`${e} Tracking code not in database! (${chalk.italic(id)})`);
  24. }
  25. }).catch((error) => { console.log(error); });
  26. });
  27. app.get('/track/:id/redirect', function(req, res, next){
  28. var id = req.params.id;
  29. var url = req.query.url;
  30. var link_title = req.query.link;
  31. res.redirect(url);
  32. console.log(`Redirecting to ${chalk.green(`\'${url}\'`)}`);
  33. db.SentMail.findOne({message_id: id}).then((message) => {
  34. if(message != undefined) {
  35. var duplicate = false;
  36. var link = undefined;
  37. for (let i = 0; i < message.opened_links.length; i++) {
  38. link = message.opened_links[i];
  39. if(link.title == link_title){
  40. duplicate = true;
  41. link.clicks += 1;
  42. link.updated_date = Date.now();
  43. break;
  44. }
  45. }
  46. if(duplicate == false){
  47. link = {
  48. title: link_title,
  49. url: url,
  50. clicks: 1,
  51. updated_date: Date.now(),
  52. }
  53. message.opened_links.push(link);
  54. }
  55. message.save().then((message) => {
  56. console.log(`Tracking link click ${chalk.italic(link_title)} from email ${chalk.italic(id)} (clicked ${link.clicks}x)`);
  57. }).catch((error) => { console.log(error); });
  58. } else {
  59. console.log(`${e} Tracking code not in database! (${chalk.italic(id)})`);
  60. }
  61. }).catch((error) => { console.log(error); });
  62. });
  63. app.listen(port, () => {
  64. console.log(`Mail Analytics Service listening at ${chalk.cyan(`http://localhost:${port}`)}`);
  65. })
  66. })