-
-
Save tanpinsiang/5784262 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// OAuth supports 3 legged and 2 legged (aka XAuth) authentication. | |
// This app demonstrates how to use 2 legged authentication with CartoDB | |
var sys = require('sys') | |
, querystring = require('querystring') | |
, OAuth = require('oauth').OAuth | |
, EventEmitter = require('events').EventEmitter; | |
function CartoDBClient(user, password, consumer_key, consumer_secret) { | |
this.user = user; | |
var cartodb_request_url = 'https://' + user + '.cartodb.com/oauth/request_token' | |
this.cartodb_access_url = 'https://' + user + '.cartodb.com/oauth/access_token' | |
this.cartodb_api_url = 'https://' + user + '.cartodb.com/api/v1/sql'; | |
this.password = password; | |
this.oa = new OAuth(cartodb_request_url, this.cartodb_access_url, consumer_key, consumer_secret, "1.0", null, "HMAC-SHA1"); | |
} | |
CartoDBClient.prototype = new EventEmitter(); | |
CartoDBClient.prototype.connect = function() { | |
var self = this; | |
sys.puts('connecting'); | |
self.oa.getOAuthRequestToken(function(error, request_key, request_secret, results){ | |
if(error) sys.puts('error :' + error); | |
else { | |
sys.puts('\n== Request Tokens =='); | |
sys.puts('request key :' + request_key); | |
sys.puts('request secret :' + request_secret); | |
// Configure XAuth request | |
var xauth = {x_auth_mode:"client_auth", x_auth_username: self.user , x_auth_password: self.password }; | |
console.log(xauth) | |
// Request access key and secret tokens via XAuth | |
// ** NOTE: Do NOT post the request_secret in argument 3 ** | |
sys.puts("\nRequesting access tokens via XAuth..."); | |
self.oa.post(self.cartodb_access_url, request_key, null, xauth, null, function(error, data) { | |
if(error) { | |
sys.puts(require('sys').inspect(error)); | |
throw new Error("...XAuth failed. Please check your password and username."); | |
} else { | |
sys.puts("...XAuth successful!"); | |
// Parse access tokens from returned query string | |
var access_tokens = querystring.parse(data); | |
self.access_key = access_tokens['oauth_token']; | |
self.access_secret = access_tokens['oauth_token_secret']; | |
self.emit('connect'); | |
} | |
}); | |
} | |
}); | |
} | |
function tmpl(s,d){ | |
for(var p in d) | |
s=s.replace(new RegExp('{'+p+'}','g'), d[p]); | |
return s; | |
} | |
CartoDBClient.prototype.sql = function(_sql, args) { | |
var sql = tmpl(_sql, args); | |
console.log("sending", sql) | |
var self = this; | |
function _response(error, data, response) { | |
if(error) { | |
self.emit('error', error) | |
} else { | |
self.emit('data', data, response); | |
} | |
} | |
if(sql.length > 2048) { | |
var protected_request = this.cartodb_api_url + "?q=" + querystring.escape(sql); | |
this.oa.get(protected_request, this.access_key, this.access_secret, _response); | |
} else { | |
var protected_request = this.cartodb_api_url; | |
var body = {q: sql} | |
this.oa.post(protected_request, this.access_key, this.access_secret, body, null, _response) | |
} | |
} | |
module.exports = { | |
CartoDBClient: CartoDBClient | |
} | |
/* | |
console.log("init"); | |
var c = new CartoDBClient(....); | |
c.connect(); | |
c.on('connect', function() { | |
console.log("connected"); | |
var sql = "INSERT INTO aaaaa (event, date, the_geom) VALUES ('test', '2011-12-17 20:50:00', GEOMETRYFROMTEXT('POINT(-4.831201 41.71381)',4326))"; | |
c.sql(sql); | |
}); | |
c.on('error', function(error) { | |
console.log("ERROR", error); | |
}); | |
c.on('data', function(data) { | |
console.log(data); | |
}); | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment