UNPKG

auth0-lock

Version:
335 lines (330 loc) 14.6 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports.cancelMFALogin = cancelMFALogin; exports.cancelResetPassword = cancelResetPassword; exports.logIn = logIn; exports.resetPassword = resetPassword; exports.resetPasswordSuccess = resetPasswordSuccess; exports.showLoginActivity = showLoginActivity; exports.showLoginMFAActivity = showLoginMFAActivity; exports.showResetPasswordActivity = showResetPasswordActivity; exports.showSignUpActivity = showSignUpActivity; exports.signUp = signUp; exports.signUpError = signUpError; exports.toggleTermsAcceptance = toggleTermsAcceptance; var _index = require("../../store/index"); var _web_api = _interopRequireDefault(require("../../core/web_api")); var _actions = require("../../core/actions"); var l = _interopRequireWildcard(require("../../core/index")); var c = _interopRequireWildcard(require("../../field/index")); var _dompurify = _interopRequireDefault(require("dompurify")); var _index4 = require("./index"); var i18n = _interopRequireWildcard(require("../../i18n")); var _captcha = require("../captcha"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function logIn(id) { var needsMFA = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var m = (0, _index.read)(_index.getEntity, 'lock', id); var usernameField = (0, _index4.databaseLogInWithEmail)(m) ? 'email' : 'username'; var username = c.getFieldValue(m, usernameField); var params = { connection: (0, _index4.databaseConnectionName)(m), username: username, password: c.getFieldValue(m, 'password') }; var fields = [usernameField, 'password']; var isCaptchaValid = (0, _captcha.setCaptchaParams)(m, params, _captcha.Flow.DEFAULT, fields); if (!isCaptchaValid) { return (0, _captcha.showMissingCaptcha)(m, id); } var mfaCode = c.getFieldValue(m, 'mfa_code'); if (needsMFA) { params['mfa_code'] = mfaCode; fields.push('mfa_code'); } (0, _actions.logIn)(id, fields, params, function (id, error, fields, next) { if (error.error === 'a0.mfa_required') { return showLoginMFAActivity(id); } if (error) { var wasInvalid = error && error.code === 'invalid_captcha'; return (0, _captcha.swapCaptcha)(id, _captcha.Flow.DEFAULT, wasInvalid, next); } next(); }); } function generateRandomUsername(length) { var result = ''; var characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } function signUp(id) { var m = (0, _index.read)(_index.getEntity, 'lock', id); var fields = ['email', 'password']; // Skip the username validation if signUpHideUsernameField option is enabled. // We will generate a random username to avoid name collusion before we make the signup API call. if ((0, _index4.databaseConnectionRequiresUsername)(m) && !(0, _index4.signUpHideUsernameField)(m)) fields.push('username'); (0, _index4.additionalSignUpFields)(m).forEach(function (x) { return fields.push(x.get('name')); }); (0, _actions.validateAndSubmit)(id, fields, function (m) { var params = { connection: (0, _index4.databaseConnectionName)(m), email: c.getFieldValue(m, 'email'), password: c.getFieldValue(m, 'password'), autoLogin: (0, _index4.shouldAutoLogin)(m) }; var isCaptchaValid = (0, _captcha.setCaptchaParams)(m, params, _captcha.Flow.SIGNUP, fields); if (!isCaptchaValid) { return (0, _captcha.showMissingCaptcha)(m, id, _captcha.Flow.SIGNUP); } if ((0, _index4.databaseConnectionRequiresUsername)(m)) { if ((0, _index4.signUpHideUsernameField)(m)) { var usernameValidation = (0, _index4.databaseConnection)(m).getIn(['validation', 'username']); var range = usernameValidation ? usernameValidation.toJS() : { max: 15 }; params.username = generateRandomUsername(range.max); } else { params.username = c.getFieldValue(m, 'username'); } } if (!(0, _index4.additionalSignUpFields)(m).isEmpty()) { params.user_metadata = {}; (0, _index4.additionalSignUpFields)(m).forEach(function (x) { var storage = x.get('storage'); var fieldName = x.get('name'); var fieldValue = _dompurify.default.sanitize(c.getFieldValue(m, x.get('name')), { ALLOWED_TAGS: [] }); switch (storage) { case 'root': params[fieldName] = fieldValue; break; default: if (!params.user_metadata) { params.user_metadata = {}; } params.user_metadata[fieldName] = fieldValue; break; } }); } var errorHandler = function errorHandler(error, popupHandler) { if (!!popupHandler) { popupHandler._current_popup.kill(); } var wasInvalidCaptcha = error && error.code === 'invalid_captcha'; (0, _captcha.swapCaptcha)(id, _captcha.Flow.SIGNUP, wasInvalidCaptcha, function () { setTimeout(function () { return signUpError(id, error); }, 250); }); }; try { // For now, always pass 'null' for the context as we don't need it yet. // If we need it later, it'll save a breaking change in hooks already in use. var context = null; l.runHook(m, 'signingUp', context, function () { _web_api.default.signUp(id, params, function (error, result, popupHandler) { if (error) { errorHandler(error, popupHandler); } else { for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { args[_key - 3] = arguments[_key]; } signUpSuccess.apply(void 0, [id, result, popupHandler].concat(args)); } }); }); } catch (e) { errorHandler(e); } }); } function signUpSuccess(id, result, popupHandler) { var lock = (0, _index.read)(_index.getEntity, 'lock', id); l.emitEvent(lock, 'signup success', result); if ((0, _index4.shouldAutoLogin)(lock)) { (0, _index.swap)(_index.updateEntity, 'lock', id, function (m) { return m.set('signedUp', true); }); // TODO: check options, redirect is missing var options = { connection: (0, _index4.databaseConnectionName)(lock), username: c.email(lock), password: c.password(lock) }; if (!!popupHandler) { options.popupHandler = popupHandler; } return _web_api.default.logIn(id, options, l.auth.params(lock).toJS(), function (error) { if (error) { setTimeout(function () { return autoLogInError(id, error); }, 250); } else { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } _actions.logInSuccess.apply(void 0, [id].concat(args)); } }); } var autoclose = l.ui.autoclose(lock); if (!autoclose) { (0, _index.swap)(_index.updateEntity, 'lock', id, function (lock) { return l.setSubmitting(lock, false).set('signedUp', true); }); } else { (0, _actions.closeLock)(id, false); } } function signUpError(id, error) { var m = (0, _index.read)(_index.getEntity, 'lock', id); var invalidPasswordKeys = { PasswordDictionaryError: 'password_dictionary_error', PasswordNoUserInfoError: 'password_no_user_info_error', PasswordStrengthError: 'password_strength_error' }; l.emitEvent(m, 'signup error', error); var errorKey = error.code === 'invalid_password' && invalidPasswordKeys[error.name] || error.code; var errorMessage = i18n.html(m, ['error', 'signUp', errorKey]) || i18n.html(m, ['error', 'signUp', 'lock.fallback']); if (error.code === 'hook_error') { (0, _index.swap)(_index.updateEntity, 'lock', id, l.setSubmitting, false, error.description || errorMessage); return; } if (errorKey === 'invalid_captcha') { errorMessage = i18n.html(m, ['error', 'login', errorKey]); return (0, _captcha.swapCaptcha)(id, _captcha.Flow.DEFAULT, true, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, l.setSubmitting, false, errorMessage); }); } (0, _index.swap)(_index.updateEntity, 'lock', id, l.setSubmitting, false, errorMessage); } function autoLogInError(id, error) { (0, _index.swap)(_index.updateEntity, 'lock', id, function (m) { var errorMessage = l.loginErrorMessage(m, error); if ((0, _index4.hasScreen)(m, 'login')) { return l.setSubmitting((0, _index4.setScreen)(m, 'login'), false, errorMessage); } else { return l.setSubmitting(m, false, errorMessage); } }); } function resetPassword(id) { (0, _actions.validateAndSubmit)(id, ['email'], function (m) { var params = { connection: (0, _index4.databaseConnectionName)(m), email: c.getFieldValue(m, 'email') }; var isCaptchaValid = (0, _captcha.setCaptchaParams)(m, params, _captcha.Flow.PASSWORD_RESET, ['email']); if (!isCaptchaValid) { return (0, _captcha.showMissingCaptcha)(m, id, _captcha.Flow.PASSWORD_RESET); } _web_api.default.resetPassword(id, params, function (error) { if (error) { setTimeout(function () { return resetPasswordError(id, error); }, 250); } else { resetPasswordSuccess(id); } }); }); } function resetPasswordSuccess(id) { var m = (0, _index.read)(_index.getEntity, 'lock', id); if ((0, _index4.hasScreen)(m, 'login')) { (0, _captcha.swapCaptcha)(id, _captcha.Flow.PASSWORD_RESET, false, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, function (m) { return (0, _index4.setScreen)(l.setSubmitting(m, false), 'login', ['']); } // array with one empty string tells the function to not clear any field ); }); // TODO: should be handled by box setTimeout(function () { var successMessage = i18n.html(m, ['success', 'forgotPassword']); (0, _index.swap)(_index.updateEntity, 'lock', id, l.setGlobalSuccess, successMessage); }, 500); } else { if (l.ui.autoclose(m)) { (0, _actions.closeLock)(id); } else { (0, _captcha.swapCaptcha)(id, _captcha.Flow.PASSWORD_RESET, false, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, function (m) { return l.setSubmitting(m, false).set('passwordResetted', true); }); }); } } } function resetPasswordError(id, error) { var m = (0, _index.read)(_index.getEntity, 'lock', id); var key = error.code; if (error.code === 'invalid_captcha') { var captchaConfig = l.passwordResetCaptcha(m); key = captchaConfig.get('provider') === 'recaptcha_v2' || captchaConfig.get('provider') === 'recaptcha_enterprise' ? 'invalid_recaptcha' : 'invalid_captcha'; } var errorMessage = i18n.html(m, ['error', 'forgotPassword', key]) || i18n.html(m, ['error', 'forgotPassword', 'lock.fallback']); (0, _captcha.swapCaptcha)(id, _captcha.Flow.PASSWORD_RESET, error.code === 'invalid_captcha', function () { (0, _index.swap)(_index.updateEntity, 'lock', id, l.setSubmitting, false, errorMessage); }); } function showLoginActivity(id) { var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['password']; var m = (0, _index.read)(_index.getEntity, 'lock', id); var captchaConfig = l.captcha(m); if (captchaConfig && captchaConfig.get('provider') === 'arkose') { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'login', fields); } else { (0, _captcha.swapCaptcha)(id, 'login', false, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'login', fields); }); } } function showSignUpActivity(id) { var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['password']; var m = (0, _index.read)(_index.getEntity, 'lock', id); var captchaConfig = l.signupCaptcha(m); if (captchaConfig && captchaConfig.get('provider') === 'arkose') { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'signUp', fields); } else { (0, _captcha.swapCaptcha)(id, _captcha.Flow.SIGNUP, false, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'signUp', fields); }); } } function showResetPasswordActivity(id) { var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['password']; var m = (0, _index.read)(_index.getEntity, 'lock', id); var captchaConfig = l.passwordResetCaptcha(m); if (captchaConfig && captchaConfig.get('provider') === 'arkose') { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'forgotPassword', fields); } else { (0, _captcha.swapCaptcha)(id, _captcha.Flow.PASSWORD_RESET, false, function () { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'forgotPassword', fields); }); } } function cancelResetPassword(id) { return showLoginActivity(id); } function cancelMFALogin(id) { return showLoginActivity(id); } function toggleTermsAcceptance(id) { (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.toggleTermsAcceptance); } function showLoginMFAActivity(id) { var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['mfa_code']; (0, _index.swap)(_index.updateEntity, 'lock', id, _index4.setScreen, 'mfaLogin', fields); }