Skip to content

Adds support for multiple twitter auths options #2256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
};