const express = require('express');
const fs = require('fs');
const sendmail = require('sendmail')({silent: true});
const uniqid = require('uniqid');
const path = require('path');
var router = express.Router();
const confirmationsPath = '../database/confirmations.json';
const writeJsonFile = (file, data) => {
fs.writeFileSync(path.join(__dirname, file), JSON.stringify(data));
};
const readJsonFile = (file) => {
return JSON.parse(fs.readFileSync(path.join(__dirname, file)).toString());
};
router.post('/', (req, res, _next) => {
const id = uniqid();
sendmail({
from: 'surpise-box@jobbel.nl',
to: req.body.email,
subject: 'test sendmail',
html: `
Deze email is verzonden omdat u surprise box ${req.body.number} voor de kerstmarkt van Het Heerenlanden heeft aangevraagd.
Om uw aanvraag te bevestigen, moet u om de volgende link klikken:
http://localhost:3000/mail/validate/${id}
Met vriendelijk groet,
het surprise box team van Het Heerenlanden
`,
}, function(err, reply) {
if (err) {
res.json({result: {success: false, data: err}});
} else {
writeJsonFile(confirmationsPath, {
...readJsonFile(confirmationsPath),
[id]: {
'number': Number(req.body.number),
'timestamp': Date.now()
}
})
res.json({result: {success: true, data: reply}});
}
});
});
router.get('/validate/:id', (req, res, _next) => {
const data = readJsonFile(confirmationsPath);
const id = req.params.id;
// If id is found and the user is in time
if (data[id] && Date.now() <= (data[id].timestamp + 3600000 /* one hour in milliseconds */)) {
// send success result
res.json({result: {success: true, data: data[id].number}});
// Delete the record
delete data[id];
writeJsonFile(confirmationsPath, data);
} else {
// Else if the id is found but the time is expired
if (data[id] && Date.now() > (data[id].timestamp + 3600000)) {
// send result
res.json({result: {success: false, data: 'expired'}});
// delete the record
delete data[id];
writeJsonFile(confirmationsPath, data);
// If the id is not found
} else {
res.json({result: {success: false, data: 'ID not found'}});
}
}
});
module.exports = router;