'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();