-
-
Save ghidinelli/9e028d6c55d292a0fb72ecc2d47c8dec to your computer and use it in GitHub Desktop.
OAuth 1.0 3-legged server side flow (motorsportreg example)
This file contains 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
'use strict'; | |
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; | |
var localtunnel = require('localtunnel'); | |
var request = require('request'); | |
var qs = require('querystring'); | |
var url = require('url'); | |
var http = require('http'); | |
const apiUrl = 'https://demo.motorsportreg.com:9201/'; | |
const requestUrl = apiUrl + 'rest/tokens/request'; | |
const accessUrl = apiUrl + 'rest/tokens/access'; | |
const meUrl = apiUrl + 'rest/me.json'; | |
const consumerKey = '*'; | |
const consumerSecret = '*'; | |
const authorizePage = 'https://demo.motorsportreg.com/index.cfm/event/oauth'; | |
const port = 8000; | |
localtunnel(port, function(err, tunnel) { | |
if (err) { throw err; } | |
console.log('tunnel url:', tunnel.url); | |
var oauth = { | |
callback: tunnel.url, | |
'consumer_key': consumerKey, | |
'consumer_secret': consumerSecret | |
}; | |
/* leg 1: request token */ | |
request.post({url: requestUrl, oauth: oauth}, function (e, r, body) { | |
if (r.statusCode !== 200) { throw r.headers; } | |
var reqData = qs.parse(body); | |
console.log('reqData', reqData); | |
/* leg 2: authorize */ | |
console.log('***'); | |
console.log('authorize page (Cmd + double click to open):', authorizePage + '?' + body); | |
console.log('***'); | |
http.createServer(function(req, res) { | |
var parsedUrl = url.parse(req.url, true); | |
if (parsedUrl.pathname === '/') { /* skip favicon.ico request */ | |
/* leg 3: access token */ | |
var authData = parsedUrl.query; | |
console.log('authData', authData); | |
var oauth = { | |
'consumer_key': consumerKey, | |
'consumer_secret': consumerSecret, | |
token: authData['oauth_token'], | |
'token_secret': reqData['oauth_token_secret'], | |
verifier: authData['oauth_verifier'] | |
}; | |
request.post({url: accessUrl, oauth: oauth}, function (e, r, body) { | |
if (r.statusCode !== 200) { throw r.headers; } | |
var permData = qs.parse(body); | |
console.log('permData', permData); | |
var oauth = { | |
'consumer_key': consumerKey, | |
'consumer_secret': consumerSecret, | |
token: permData['oauth_token'], | |
'token_secret': permData['oauth_token_secret'], | |
}; | |
request.get({url: meUrl, oauth: oauth, json: true}, function(e, r, body) { | |
if (r.statusCode !== 200) { throw r.headers; } | |
console.log('user', JSON.stringify(body.response)); | |
}); | |
}); | |
} | |
res.writeHead(200, {'Content-Type': 'application/json'}); | |
res.end(JSON.stringify({url: req.url, headers: req.headers}, null, 2)); | |
}).listen(port, function() { | |
console.log('listening to', port); | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment