redux-devshare
Version:
[![NPM version][npm-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Code Climate][climate-image]][climate-url] [![Code Coverage][coverage-i
117 lines (98 loc) • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getLoginMethodAndParams = exports.createAuthProvider = undefined;
var _isFunction2 = require('lodash/isFunction');
var _isFunction3 = _interopRequireDefault(_isFunction2);
var _isString2 = require('lodash/isString');
var _isString3 = _interopRequireDefault(_isString2);
var _isArray2 = require('lodash/isArray');
var _isArray3 = _interopRequireDefault(_isArray2);
var _capitalize2 = require('lodash/capitalize');
var _capitalize3 = _interopRequireDefault(_capitalize2);
var _constants = require('../constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @description Get correct login method and params order based on provided credentials
* @param {Object} firebase - Internal firebase object
* @param {String} providerName - Name of Auth Provider (i.e. google, github, facebook, twitter)
* @param {Array|String} scopes - List of scopes to add to auth provider
* @return {Object} provider - Auth Provider
* @private
*/
var createAuthProvider = exports.createAuthProvider = function createAuthProvider(firebase, providerName, scopes) {
// TODO: Verify scopes are valid before adding
// TODO: Validate parameter inputs
// Verify providerName is valid
if (_constants.supportedAuthProviders.indexOf(providerName.toLowerCase()) === -1) {
throw new Error(providerName + ' is not a valid Auth Provider');
}
var provider = new firebase.auth[(0, _capitalize3.default)(providerName) + 'AuthProvider']();
// Handle providers without scopes
if (providerName.toLowerCase() === 'twitter' || !(0, _isFunction3.default)(provider.addScope)) {
return provider;
}
provider.addScope('email');
if (scopes) {
if ((0, _isArray3.default)(scopes)) {
scopes.forEach(function (scope) {
provider.addScope(scope);
});
}
if ((0, _isString3.default)(scopes)) {
provider.addScope(scopes);
}
}
return provider;
};
/**
* @description Get correct login method and params order based on provided credentials
* @param {Object} firebase - Internal firebase object
* @param {Object} credentials - Login credentials
* @param {String} credentials.email - Email to login with (only needed for email login)
* @param {String} credentials.password - Password to login with (only needed for email login)
* @param {String} credentials.provider - Provider name such as google, twitter (only needed for 3rd party provider login)
* @param {String} credentials.type - Popup or redirect (only needed for 3rd party provider login)
* @param {String} credentials.token - Custom or provider token
* @param {String} credentials.scopes - Scopes to add to provider (i.e. email)
* @private
*/
var getLoginMethodAndParams = exports.getLoginMethodAndParams = function getLoginMethodAndParams(firebase, _ref) {
var email = _ref.email,
password = _ref.password,
provider = _ref.provider,
type = _ref.type,
token = _ref.token,
scopes = _ref.scopes;
if (provider) {
if (token) {
return {
method: 'signInWithCredential',
params: [provider, token]
};
}
var authProvider = createAuthProvider(firebase, provider, scopes);
if (type === 'popup') {
return {
method: 'signInWithPopup',
params: [authProvider]
};
}
return {
method: 'signInWithRedirect',
params: [authProvider]
};
}
if (token) {
return {
method: 'signInWithCustomToken',
params: [token]
};
}
return {
method: 'signInWithEmailAndPassword',
params: [email, password]
};
};
exports.default = { getLoginMethodAndParams: getLoginMethodAndParams };