56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
var base = module.superModule;
|
|
var server = require('server');
|
|
|
|
server.extend(base);
|
|
|
|
// First, let's extend the ContactUs-Landing route
|
|
// to add recaptcha data to the template view
|
|
server.append('Landing', function(req, res, next) {
|
|
res.setViewData({
|
|
// Recaptcha API script URL
|
|
recaptchaUrl: 'https://www.google.com/recaptcha/api.js',
|
|
siteKey: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI' // Test Site Key from Google
|
|
});
|
|
|
|
next();
|
|
});
|
|
|
|
// Now we need to extend ContactUs-Subscribe, to add our logic
|
|
// that invokes the recaptcha service
|
|
// We prepend here to ensure that an invalid response is caught before the email is sent
|
|
server.prepend('Subscribe', function(req, res, next) {
|
|
var recaptchaService = require('*/cartridge/scripts/services/recaptcha');
|
|
// Token automatically added to request by recaptcha
|
|
var token = req.form['g-recaptcha-response'];
|
|
|
|
// Add required parameters for validation call
|
|
var params = {
|
|
// This is a test secret from Google
|
|
// In practice, do not hardcode this.
|
|
// It's better to store in a custom preference or service credential configuration
|
|
secret: '6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',
|
|
response: token
|
|
};
|
|
|
|
// Calls recaptcha service
|
|
// Returns a Service class instance
|
|
// (start with a hardcoded fail)
|
|
var validationResult = recaptchaService.call(params);
|
|
|
|
// Actual response from Google
|
|
var response = verificationResult.object;
|
|
|
|
if (!response.success) {
|
|
// Handle failure by returning error to the client
|
|
res.json({
|
|
success: false,
|
|
msg: 'Recaptcha Validation Failure'
|
|
});
|
|
}
|
|
|
|
next();
|
|
});
|
|
|
|
module.exports = server.exports(); |