Skip to content

Commit

Permalink
Adds support for multiple twitter auths options (parse-community#2256)
Browse files Browse the repository at this point in the history
* Adds support for multiple twitter auths options

* Adds user test
  • Loading branch information
flovilmart authored and Rafael Santos committed Mar 16, 2017
1 parent 464b7f5 commit 7741ca9
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 2 deletions.
50 changes: 50 additions & 0 deletions spec/TwitterAuth.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
let twitter = require('../src/authDataManager/twitter');

describe('Twitter Auth', () => {
it('should use the proper configuration', () => {
// Multiple options, consumer_key found
expect(twitter.handleMultipleConfigurations({
consumer_key: 'hello',
}, [{
consumer_key: 'hello'
}, {
consumer_key: 'world'
}]).consumer_key).toEqual('hello')

// Multiple options, consumer_key not found
expect(function(){
twitter.handleMultipleConfigurations({
consumer_key: 'some',
}, [{
consumer_key: 'hello'
}, {
consumer_key: 'world'
}]);
}).toThrow();

// Multiple options, consumer_key not found
expect(function(){
twitter.handleMultipleConfigurations({
auth_token: 'token',
}, [{
consumer_key: 'hello'
}, {
consumer_key: 'world'
}]);
}).toThrow();

// Single configuration and consumer_key set
expect(twitter.handleMultipleConfigurations({
consumer_key: 'hello',
}, {
consumer_key: 'hello'
}).consumer_key).toEqual('hello');

// General case, only 1 config, no consumer_key set
expect(twitter.handleMultipleConfigurations({
auth_token: 'token',
}, {
consumer_key: 'hello'
}).consumer_key).toEqual('hello');
});
});
27 changes: 25 additions & 2 deletions src/authDataManager/twitter.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
// Helper functions for accessing the twitter API.
var OAuth = require('./OAuth1Client');
var Parse = require('parse/node').Parse;
var logger = require('../logger').default;

// Returns a promise that fulfills iff this user id is valid.
function validateAuthData(authData, options) {
options = handleMultipleConfigurations(authData, options);
var client = new OAuth(options);
client.host = "api.twitter.com";
client.auth_token = authData.auth_token;
Expand All @@ -24,7 +26,28 @@ function validateAppId() {
return Promise.resolve();
}

function handleMultipleConfigurations(authData, options) {
if (Array.isArray(options)) {
let consumer_key = authData.consumer_key;
if (!consumer_key) {
logger.error('Twitter Auth', 'Multiple twitter configurations are available, by no consumer_key was sent by the client.');
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
}
options = options.filter((option) => {
return option.consumer_key == consumer_key;
});

if (options.length == 0) {
logger.error('Twitter Auth','Cannot find a configuration for the provided consumer_key');
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
}
options = options[0];
}
return options;
}

module.exports = {
validateAppId: validateAppId,
validateAuthData: validateAuthData
validateAppId,
validateAuthData,
handleMultipleConfigurations
};

0 comments on commit 7741ca9

Please sign in to comment.