/** * @author Jeffery Russell 8-19-18 */ //used for file IO const utils = require('../utils/utils.js'); //used for static files const includes = require('../includes/includes'); //for parsing post data const qs = require('querystring'); const sanitizer = require('sanitizer'); const Request = require('request'); const nodemailer = require("nodemailer"); const smtpTransport = require('nodemailer-smtp-transport'); const CAPTCHA_SECRET = utils.getFileLine("../captcha_secret"); const EMAIL_PASSWORD = utils.getFileLine("../email_password"); const verifyCapcha = function(data) { const recaptcha_url = "https://www.google.com/recaptcha/api/siteverify?" + "secret=" + CAPTCHA_SECRET + "&" + "response=" + data; return sync = new Promise(function(resolve, reject) { Request(recaptcha_url, function (error, response, body) { if (!error && response.statusCode == 200) { const googleAnswer = JSON.parse(body); if(googleAnswer.success == true) { resolve(true); } else { resolve(false); } } else { resolve(false); } } ); }); }; const sendEmail = function(name, email, message) { const transporter = nodemailer.createTransport(smtpTransport({ service: 'gmail', host: 'smtp.gmail.com', auth: { user: 'jrtechswebsite@gmail.com', pass: EMAIL_PASSWORD } })); const mailOptions = { to: "jeffery@jrtechs.net", // list of receivers subject: "Jrtechs.net form submission", // Subject line text: message, // plaintext body html: message }; // send mail with defined transport object transporter.sendMail(mailOptions, function(error, response) { if(error) { console.log(error); } else { console.log("Message sent: " + response); } // if you don't want to use this transport object anymore, uncomment following line transporter.close(); // shut down the connection pool, no more messages }); }; const processContactPage = function(request) { return new Promise(function(resolve, reject) { utils.getPostData(request).then(function(postData) { const data = qs.parse(postData); if(data.name && data.email && data["g-recaptcha-response"] && data.message) { verifyCapcha(sanitizer.sanitize(data["g-recaptcha-response"])).then(function(valid) { if(valid) { resolve(utils.include("includes/messageSent.html")); sendEmail(data.name, data.email, data.message); } else { resolve(utils.include("includes/invalidCaptcha.html")); } }); } else { resolve(utils.include("includes/contact.html")); } }).catch(function(err) { reject(err); }) }); }; module.exports = { main: function(request, result) { result.writeHead(200, {'Content-Type': 'text/html'}); Promise.all([includes.printAdminHeader(), processContactPage(request), require("../sidebar/sidebar.js").main(), includes.printFooter()]).then(function(content) { result.write(content.join('')); result.end(); }).catch(function(err) { console.log(err); }); } };