Signing up for the API work again

- Can use the same email more than once, the only difference is that it wont create a new key, only a new link to the key
This commit is contained in:
Kasper Rynning-Tønnesen
2018-06-04 16:21:36 +02:00
parent 9912e57148
commit 9a6ee1baa2
3 changed files with 57 additions and 52 deletions

View File

@@ -24,9 +24,11 @@ window.addEventListener("DOMContentLoaded", function(e) {
Helper.toggleClass(".submit", "disabled"); Helper.toggleClass(".submit", "disabled");
Helper.removeClass(".full-form-token", "hide"); Helper.removeClass(".full-form-token", "hide");
var captcha_response = grecaptcha.getResponse(); var captcha_response = grecaptcha.getResponse();
console.log(captcha_response);
Helper.ajax({ Helper.ajax({
type: "POST", type: "POST",
url: "/api/apply", url: "/api/apply",
headers: {"Content-Type": "application/json;charset=UTF-8"},
data: { data: {
origin: origin, origin: origin,
email: email, email: email,

View File

@@ -11,6 +11,7 @@ var List = require(pathThumbnails + '/handlers/list.js');
var Functions = require(pathThumbnails + '/handlers/functions.js'); var Functions = require(pathThumbnails + '/handlers/functions.js');
var Frontpage = require(pathThumbnails + '/handlers/frontpage.js'); var Frontpage = require(pathThumbnails + '/handlers/frontpage.js');
var Search = require(pathThumbnails + '/handlers/search.js'); var Search = require(pathThumbnails + '/handlers/search.js');
var uniqid = require('uniqid');
var toShowChannel = { var toShowChannel = {
start: 1, start: 1,
@@ -1254,42 +1255,10 @@ try {
token_db.collection("api_links").find({token: token}, function(e, d) { token_db.collection("api_links").find({token: token}, function(e, d) {
if(results_find.length == 0 || (d.length == 0 && results_find.length > 0 && !results_find[0].active)) { if(results_find.length == 0 || (d.length == 0 && results_find.length > 0 && !results_find[0].active)) {
token_db.collection("api_token").insert({name: name, origin: origin, token: id, usage: 0, active: false, limit: 20}, function(err, docs){ token_db.collection("api_token").insert({name: name, origin: origin, token: id, usage: 0, active: false, limit: 20}, function(err, docs){
token_db.collection("api_links").insert({id: uniqid_link, token: id, createdAt: new Date()}, function(err, docs) { createApiLink(req, res, uniqid_link, id, name);
let transporter = nodemailer.createTransport(mailconfig);
transporter.verify(function(error, success) {
if (error) {
token_db.collection("api_links").remove({id: uniqid_link}, function(e,d) {
res.send("failed");
return;
})
} else {
var subject = 'ZOFF: API-key';
var message = "Link to API-key: <a href='https://zoff.me/api/apply/" + uniqid_link + "'/>https://zoff.me/api/apply/" + uniqid_link + "</a>\n\nThis link expires in 1 day.";
var msg = {
from: mailconfig.from,
to: name,
subject: subject,
text: message,
html: message,
}
transporter.sendMail(msg, (error, info) => {
if (error) {
res.status(400).send("failed");
transporter.close();
return;
}
res.status(200).send("success");
transporter.close();
return;
});
}
});
})
}); });
} else { } else {
res.send("failed"); createApiLink(req, res, uniqid_link, token, name);
return;
} }
}); });
}) })
@@ -1299,6 +1268,40 @@ try {
} }
}); });
function createApiLink(req, res, uniqid_link, id, name) {
token_db.collection("api_links").insert({id: uniqid_link, token: id, createdAt: new Date()}, function(err, docs) {
let transporter = nodemailer.createTransport(mailconfig);
transporter.verify(function(error, success) {
if (error) {
token_db.collection("api_links").remove({id: uniqid_link}, function(e,d) {
res.send("failed");
return;
})
} else {
var subject = 'ZOFF: API-key';
var message = "Hello,<br><br>Thanks for signing up for the API, here is your key: <a href='https://zoff.me/api/apply/" + uniqid_link + "'/>https://zoff.me/api/apply/" + uniqid_link + "</a><br><br>This link will expire in 1 day, so please write it down.<br><br><img src='https://zoff.me/assets/images/small-square.jpg' width='100' height='100' alt='zoff-logo' />";
var msg = {
from: mailconfig.from,
to: name,
subject: subject,
text: message,
html: message,
}
transporter.sendMail(msg, (error, info) => {
if (error) {
res.send("failed");
transporter.close();
return;
}
res.status(200).send("success");
transporter.close();
return;
});
}
});
})
}
router.route('/api/mail').post(recaptcha.middleware.verify, function(req, res) { router.route('/api/mail').post(recaptcha.middleware.verify, function(req, res) {
if(req.recaptcha.error == null) { if(req.recaptcha.error == null) {
let transporter = nodemailer.createTransport(mailconfig); let transporter = nodemailer.createTransport(mailconfig);

View File

@@ -54,7 +54,23 @@ router.route('/').post(function(req, res, next){
root(req, res, next); root(req, res, next);
}); });
router.route('/api/apply/:id').get(function(req,res) { router.route('/api/apply').get(function(req, res, next) {
var data = {
year: year,
javascript_file: "token.min.js",
captcha: res.recaptcha,
analytics: analytics,
activated: false,
id: "",
correct: false,
stylesheet: "style.css",
embed: false,
og_image: "https://zoff.me/assets/images/small-square.jpg",
}
res.render('layouts/client/token', data);
});
router.route('/api/apply/:id').get(function(req, res) {
var id = req.params.id; var id = req.params.id;
token_db.collection('api_links').find({id: id}, function(err, result) { token_db.collection('api_links').find({id: id}, function(err, result) {
if(result.length == 1) { if(result.length == 1) {
@@ -74,7 +90,7 @@ router.route('/api/apply/:id').get(function(req,res) {
} }
res.render('layouts/client/token', data); res.render('layouts/client/token', data);
}); });
}) });
} else { } else {
var data = { var data = {
year: year, year: year,
@@ -94,22 +110,6 @@ router.route('/api/apply/:id').get(function(req,res) {
}); });
router.route('/api/apply').get(function(req, res, next) {
var data = {
year: year,
javascript_file: "token.min.js",
captcha: res.recaptcha,
analytics: analytics,
activated: false,
id: "",
correct: false,
stylesheet: "style.css",
embed: false,
og_image: "https://zoff.me/assets/images/small-square.jpg",
}
res.render('layouts/client/token', data);
});
function root(req, res, next) { function root(req, res, next) {
try{ try{
var url = req.headers['x-forwarded-host'] ? req.headers['x-forwarded-host'] : req.headers.host.split(":")[0]; var url = req.headers['x-forwarded-host'] ? req.headers['x-forwarded-host'] : req.headers.host.split(":")[0];