Skip to content

Instantly share code, notes, and snippets.

@madisonbullard
Last active July 26, 2017 20:28
Show Gist options
  • Save madisonbullard/a92f20c6c60a0764fcf6b08b23a260a7 to your computer and use it in GitHub Desktop.
Save madisonbullard/a92f20c6c60a0764fcf6b08b23a260a7 to your computer and use it in GitHub Desktop.
Request a bearer token from Twitter with Meteor
import Twitter from 'twitter';
import Future from 'fibers/future';
const { consumerKey, secret } = Meteor.settings.private.oAuth.twitter;
let bearerToken = null;
function bearerTokenRequestString(consumerKey, secret){
const rawKeyEncode = (str) => {
return encodeURIComponent(str) //return RFC 1738 encoded string
.replace(/!/g, '%21')
.replace(/'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/\*/g, '%2A')
}
const string = `${rawKeyEncode(consumerKey)}:${rawKeyEncode(secret)}`;
const buffer = new Buffer(string);
const toBase64 = buffer.toString('base64'); //encode string using base64
return toBase64;
}
function requestBearerToken(consumerKey, secret, callback){
let fut = new Future();
HTTP.call('POST', 'https://api.twitter.com/oauth2/token', { //setup post request as required by twitter
content: 'grant_type=client_credentials',
headers: {
'Authorization': `Basic ${bearerTokenRequestString(consumerKey, secret)}`,
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
}import Twitter from 'twitter';
import Future from 'fibers/future';
const { consumerKey, secret } = Meteor.settings.private.oAuth.twitter;
let bearerToken = null;
function bearerTokenRequestString(consumerKey, secret){
const rawKeyEncode = (str) => {
return encodeURIComponent(str) //return RFC 1738 encoded string
.replace(/!/g, '%21')
.replace(/'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/\*/g, '%2A')
}
const string = `${rawKeyEncode(consumerKey)}:${rawKeyEncode(secret)}`;
const buffer = new Buffer(string);
const toBase64 = buffer.toString('base64'); //encode string using base64
return toBase64;
}
function requestBearerToken(consumerKey, secret, callback){
let fut = new Future();
HTTP.call('POST', 'https://api.twitter.com/oauth2/token', { //setup post request as required by twitter
content: 'grant_type=client_credentials',
headers: {
'Authorization': `Basic ${bearerTokenRequestString(consumerKey, secret)}`,
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
}
},
(err, res) => {
if (!err) {
fut.return(res);
} else {
fut.throw(err);
}
})
fut.wait().statusCode == 200
? callback(null, fut.wait().data.access_token)
: callback(fut.wait())
}
requestBearerToken(consumerKey, secret, (err, res) => {
if (!err) {
bearerToken = res;
} else {
throw
bearerToken = null;
}
})
export const client = new Twitter({
consumer_key: consumerKey,
consumer_secret: secret,
bearer_token: bearerToken
})
},
(err, res) => {
if (!err) {
fut.return(res);
} else {
fut.throw(err);
}
})
fut.wait().statusCode == 200
? callback(null, fut.wait().data.access_token)
: callback(fut.wait())
}
requestBearerToken(consumerKey, secret, (err, res) => {
if (!err) {
bearerToken = res;
} else {
throw
bearerToken = null;
}
})
export const client = new Twitter({
consumer_key: consumerKey,
consumer_secret: secret,
bearer_token: bearerToken
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment