Added backend functionality for validating requests.
This commit is contained in:
parent
25a32a234b
commit
7f7d29c666
@ -0,0 +1 @@
|
|||||||
|
{}
|
5
server/package-lock.json
generated
5
server/package-lock.json
generated
@ -3213,6 +3213,11 @@
|
|||||||
"set-value": "^2.0.1"
|
"set-value": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"uniqid": {
|
||||||
|
"version": "5.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.0.3.tgz",
|
||||||
|
"integrity": "sha512-R2qx3X/LYWSdGRaluio4dYrPXAJACTqyUjuyXHoJLBUOIfmMcnYOyY2d6Y4clZcIz5lK6ZaI0Zzmm0cPfsIqzQ=="
|
||||||
|
},
|
||||||
"unique-string": {
|
"unique-string": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
"http-errors": "~1.6.3",
|
"http-errors": "~1.6.3",
|
||||||
"morgan": "~1.9.1",
|
"morgan": "~1.9.1",
|
||||||
"pug": "^2.0.4",
|
"pug": "^2.0.4",
|
||||||
"sendmail": "^1.6.1"
|
"sendmail": "^1.6.1",
|
||||||
|
"uniqid": "^5.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
|
@ -1,18 +1,85 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
|
const fs = require('fs');
|
||||||
const sendmail = require('sendmail')({silent: true});
|
const sendmail = require('sendmail')({silent: true});
|
||||||
|
const uniqid = require('uniqid');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
var router = express.Router();
|
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) => {
|
router.post('/', (req, res, _next) => {
|
||||||
|
const id = uniqid();
|
||||||
sendmail({
|
sendmail({
|
||||||
from: 'surpise-box@jobbel.nl',
|
from: 'surpise-box@jobbel.nl',
|
||||||
to: req.body.email,
|
to: req.body.email,
|
||||||
subject: 'test sendmail',
|
subject: 'test sendmail',
|
||||||
html: 'Mail of test sendmail',
|
html: `
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Deze email is verzonden omdat u surprise box ${req.body.number} voor de kerstmarkt van Het Heerenlanden heeft aangevraagd.<br>
|
||||||
|
Om uw aanvraag te bevestigen, moet u om de volgende link klikken:<br>
|
||||||
|
<a href='http://localhost:3000/mail/validate/${id}'>http://localhost:3000/mail/validate/${id}</a><br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Met vriendelijk groet,<br> het surprise box team van Het Heerenlanden</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`,
|
||||||
}, function(err, reply) {
|
}, function(err, reply) {
|
||||||
if (err) res.json({result: err});
|
if (err) {
|
||||||
else res.json({result: reply});
|
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;
|
module.exports = router;
|
||||||
|
Loading…
Reference in New Issue
Block a user