jawbone-oauth2
Version:
Authentication module for Jawbone using OAuth 2.0
72 lines (59 loc) • 1.91 kB
JavaScript
var Promise = require('promise');
var request = require('request');
module.exports = function(clientPrototype) {
clientPrototype.createToken = function(tokenObj) {
if (tokenObj && tokenObj.create) {
return tokenObj;
}
return this.getUserInfo(this.oauth2_token.accessToken.create(tokenObj));
};
clientPrototype.getUserInfo = function(token) {
var options = {
url: 'https://jawbone.com/nudge/api/v.1.1/users/@me',
headers: {
Authorization: 'Bearer ' + token.token.access_token,
Accept: 'application/json'
}
};
return new Promise(function(resolve, reject) {
request(options, function(error, response, body) {
token.data = JSON.parse(body).data;
return error ? reject(error) : resolve(token);
})
});
};
clientPrototype.getAuthorizationUrl = function(redirect_uri, scope, state) {
var options = {
redirect_uri: redirect_uri || this.redirect_uri,
scope: scope || this.scope
};
if (state) {
options.state = state;
}
return this.oauth2.authCode.authorizeURL(options);
};
clientPrototype.getToken = function(code, redirect_uri) {
var authCode = this.oauth2_token.authCode;
var _this = this;
return new Promise(function(resolve, reject) {
authCode.getToken({
code: code,
redirect_uri: redirect_uri
}, function(err, token) {
return err ? reject(err) : resolve(_this.createToken(token));
});
});
};
clientPrototype.refreshAccessToken = function(token, options) {
options = options || {};
token = this.createToken(token);
if(!token.expired() && !options.forceRefresh) {
return Promise.resolve(token);
}
return new Promise(function(resolve, reject) {
token.refresh(function(err, token) {
return err ? reject(err) : resolve(token);
});
});
};
};