diff --git a/README.md b/README.md
index e846341..512f846 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,9 @@ npm install markdown
npm install highlight.js
npm install compression
npm install memory-cache --save
+npm install request
+npm install nodemailer
+npm install nodemailer-smtp-transport
```
diff --git a/admin.js b/admin.js
index c81156f..574263a 100644
--- a/admin.js
+++ b/admin.js
@@ -29,7 +29,7 @@ const utils = require('./utils/utils.js');
//cache -- only used for static contents
const cache = require('memory-cache');
-/** Initializes sessions for login */
+//Initializes sessions for login
app.use(session({ secret: utils.getFileLine('../session_secret'), cookie: { maxAge: 6000000 }}));
//port to listen for the admin server on
diff --git a/includes/contact.html b/includes/contact.html
index 22f0d3c..12f5f3c 100644
--- a/includes/contact.html
+++ b/includes/contact.html
@@ -35,7 +35,7 @@
-
+
diff --git a/includes/contact.js b/includes/contact.js
index c6b36f2..6a79465 100644
--- a/includes/contact.js
+++ b/includes/contact.js
@@ -13,6 +13,96 @@ 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)
{
@@ -20,15 +110,24 @@ const processContactPage = function(request)
{
utils.getPostData(request).then(function(postData)
{
-
const data = qs.parse(postData);
- console.log(postData);
- console.log(data);
- if(data.name && data.email)
+
+ if(data.name && data.email && data["g-recaptcha-response"] && data.message)
{
- //send email
- resolve(utils.include("includes/messageSent.html"));
+ 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
{
@@ -40,10 +139,9 @@ const processContactPage = function(request)
reject(err);
})
});
-
-
};
+
module.exports =
{
main: function(request, result)
diff --git a/includes/invalidCaptcha.html b/includes/invalidCaptcha.html
new file mode 100644
index 0000000..7c08c78
--- /dev/null
+++ b/includes/invalidCaptcha.html
@@ -0,0 +1,4 @@
+
+
Invalid Captcha
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
index 735923d..03375c9 100644
--- a/package.json
+++ b/package.json
@@ -4,15 +4,23 @@
"description": "Personal wordpress replacement",
"main": "server.js",
"dependencies": {
+ "compression": "^1.7.3",
+ "crypto": "^1.0.1",
+ "express": "^4.16.3",
+ "express-session": "^1.15.6",
"highlight": "^0.2.4",
+ "highlight.js": "^9.12.0",
"markdown": "^0.5.0",
"markdown-to-html": "^0.0.13",
"memory-cache": "^0.2.0",
- "mysql": "^2.15.0",
+ "mysql": "^2.16.0",
+ "nodemailer": "^4.6.8",
+ "nodemailer-smtp-transport": "^2.7.4",
"promise": "^8.0.1",
+ "remarkable": "^1.7.1",
+ "request": "^2.88.0",
"sanitizer": "^0.1.3",
- "step": "^1.0.0",
- "synchronize": "^2.0.0"
+ "sendmail": "^1.4.1"
},
"devDependencies": {},
"scripts": {
@@ -31,5 +39,5 @@
"bugs": {
"url": "https://github.com/jrtechs/NodeJSBlog/issues"
},
- "homepage": "https://github.com/jrtechs/NodeJSBlog#readme"
+ "homepage": "https://jrtechs.net"
}
diff --git a/utils/utils.js b/utils/utils.js
index 79e87ea..bd494ad 100644
--- a/utils/utils.js
+++ b/utils/utils.js
@@ -47,7 +47,7 @@ module.exports=
{
console.log("Could not find " + fileName);
}
- return 0;
+ return '';
},
@@ -66,7 +66,7 @@ module.exports=
{
console.log("Could not find " + fileName);
}
- return 0;
+ return '';
},