|
@@ -9,7 +9,7 @@ var db = require("kairoscope-db-models");
|
|
|
|
|
|
var e = chalk.red('ERROR:');
|
|
|
|
|
|
-db.start_database().then(() => {
|
|
|
+db.start().then(() => {
|
|
|
app.get('/', (req, res) => {
|
|
|
res.send("Mail Analytics Service");
|
|
|
})
|
|
@@ -27,6 +27,43 @@ db.start_database().then(() => {
|
|
|
}
|
|
|
}).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, () => {
|