diff --git a/README.md b/README.md index 57a2289..e5f50f1 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,9 @@ app.post('/', function(req, res) { var privateKey = '1234567890abcdef'; // your private key here var ip = req.ip; - var challenge = req.body.recaptcha_challenge_field; - var response = req.body.recaptcha_response_field; + var response = req.body['g-recaptcha-response']; - simple_recaptcha(privateKey, ip, challenge, response, function(err) { + simple_recaptcha(privateKey, ip, response, function(err) { if (err) return res.send(err.message); res.send('verified'); }); diff --git a/index.js b/index.js index 1a9f96c..3c1952f 100644 --- a/index.js +++ b/index.js @@ -1,24 +1,22 @@ -var http = require('http'); +var https = require('https'); var options = { host: 'www.google.com', - port: 80, - path: '/recaptcha/api/verify', - method: 'POST', + port: 443, + path: '/recaptcha/api/siteverify?', + method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }; -module.exports = function(privateKey, remoteIP, challenge, response, cb) { +module.exports = function(privateKey, remoteIP, response, cb) { var error = null; if (!privateKey) { error = 'Private key is required'; } else if (!remoteIP) { error = 'Remote IP is required'; - } else if (!challenge) { - error = 'Challenge is required'; } else if (!response) { error = 'Response is required'; } @@ -26,8 +24,12 @@ module.exports = function(privateKey, remoteIP, challenge, response, cb) { if (error) { return cb(new Error(error)); } + + options.path = '/recaptcha/api/siteverify?secret=' + privateKey + + '&remoteip=' + remoteIP + + '&response=' + response; - var request = http.request(options, function(response) { + var request = https.request(options, function(response) { var body = ''; response.on('error', function(err) { @@ -39,9 +41,8 @@ module.exports = function(privateKey, remoteIP, challenge, response, cb) { }); response.on('end', function() { - var success = body.split('\n')[0] === "true"; - var error = body.split('\n')[1]; - if (!success) return cb(new Error(error)); + var data = JSON.parse( body ); + if (!data.success) return cb(new Error(data['error-codes'])); cb(null); }); @@ -51,13 +52,6 @@ module.exports = function(privateKey, remoteIP, challenge, response, cb) { return cb(new Error(err)); }); - var query = 'privatekey=' + privateKey + - '&remoteip=' + remoteIP + - '&challenge=' + challenge + - '&response=' + response; - - request.write(query); - request.end(); -}; \ No newline at end of file +}; diff --git a/package.json b/package.json index ab9df3d..accea50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-recaptcha", - "version": "0.0.3", + "version": "1.0.0", "description": "Simple implementation of google's reCAPTCHA", "main": "index.js", "scripts": { diff --git a/test/test.js b/test/test.js index 66f40f7..6f31a89 100644 --- a/test/test.js +++ b/test/test.js @@ -5,31 +5,25 @@ var simple_recaptcha = require('../index'); describe('simple_recaptcha', function() { it('should return an error when private key is empty', function() { - simple_recaptcha(null, '127.0.0.1', 'someChallenge', 'someResponse', function(err) { + simple_recaptcha(null, '127.0.0.1', 'someResponse', function(err) { err.message.should.equal('Private key is required'); }); }); it('should return an error when remote IP is empty', function() { - simple_recaptcha('privKey', null, 'someChallenge', 'someResponse', function(err) { + simple_recaptcha('privKey', null, 'someResponse', function(err) { err.message.should.equal('Remote IP is required'); }); }); - it('should return an error when challenge is empty', function() { - simple_recaptcha('privKey', '127.0.0.1', null, 'someResponse', function(err) { - err.message.should.equal('Challenge is required'); - }); - }); - it('should return an error when response is empty', function() { - simple_recaptcha('privKey', '127.0.0.1', 'someChallenge', null, function(err) { + simple_recaptcha('privKey', '127.0.0.1', null, function(err) { err.message.should.equal('Response is required'); }); }); it('should return an error when private key is wrong', function() { - simple_recaptcha('privKey', '127.0.0.1', 'someChallenge', 'someResponse', function(err) { + simple_recaptcha('privKey', '127.0.0.1', 'someResponse', function(err) { err.message.should.equal('invalid-site-private-key'); }); });