Created
March 21, 2017 10:53
-
-
Save jonmaim/4c4d02f68f5696902d40b627a0785bb3 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
Don't forget to install packages:
npm install --save localtunnel request