PageSourceSearch

https://cdn4.hola.org/www/hola/pub/login.js

js hola.org collected 2026-09-24 10:17:26 UTC 89,628 bytes, 1,606 lines download raw bytes

vendor: 4,719 bytes, lines 1-2
1;(function () {// LICENSE_CODE ZON
2  'use strict'; /*jslint react:true*/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);}function _toConsumableArray(r) {return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _iterableToArray(r) {if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);}function _arrayWithoutHoles(r) {if (Array.isArray(r)) return _arrayLikeToArray(r);}function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function ownKeys(e, r) {var t = Object.keys(e);if (Object.getOwnPropertySymbols) {var o = Object.getOwnPropertySymbols(e);r && (o = o.filter(function (r) {return Object.getOwnPropertyDescriptor(e, r).enumerable;})), t.push.apply(t, o);}return t;}function _objectSpread(e) {for (var r = 1; r < arguments.length; r++) {var t = null != arguments[r] ? arguments[r] : {};r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {_defineProperty(e, r, t[r]);}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));});}return e;}function _classCallCheck(a, n) {if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");}function _defineProperties(e, r) {for (var t = 0; t < r.length; t++) {var o = r[t];o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);}}function _createClass(e, r, t) {return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e;}function _callSuper(t, o, e) {return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));}function _possibleConstructorReturn(t, e) {if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e) {if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct() {try {var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));} catch (t) {}return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {return !!t;})();}function _getPrototypeOf(t) {return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {return t.__proto__ || Object.getPrototypeOf(t);}, _getPrototypeOf(t);}function _inherits(t, e) {if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
vendor: 4,855 bytes, lines 2-7
2t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e);}function _setPrototypeOf(t, e) {return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {return t.__proto__ = e, t;}, _setPrototypeOf(t, e);}function _defineProperty(e, r, t) {return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e;}function _toPropertyKey(t) {var i = _toPrimitive(t, "string");return "symbol" == _typeof(i) ? i : i + "";}function _toPrimitive(t, r) {if ("object" != _typeof(t) || !t) return t;var e = t[Symbol.toPrimitive];if (void 0 !== e) {var i = e.call(t, r || "default");if ("object" != _typeof(i)) return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return ("string" === r ? String : Number)(t);}function _extends() {return _extends = Object.assign ? Object.assign.bind() : function (n) {for (var e = 1; e < arguments.length; e++) {var t = arguments[e];for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);}return n;}, _extends.apply(null, arguments);}function _regenerator() {/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r = "function" == typeof Symbol ? Symbol : {},n = r.iterator || "@@iterator",o = r.toStringTag || "@@toStringTag";function i(r, n, o, i) {var c = n && n.prototype instanceof Generator ? n : Generator,u = Object.create(c.prototype);return _regeneratorDefine2(u, "_invoke", function (r, n, o) {var i,c,u,f = 0,p = o || [],y = !1,G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) {return i = t, c = 0, u = e, G.n = r, a;} };function d(r, n) {for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {var o,i = p[t],d = G.p,l = i[2];r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));}if (o || r > 1) return a;throw y = !0, n;}return function (o, p, l) {if (f > 1) throw TypeError("Generator is already running");for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);try {if (f = 2, i) {if (c || (o = "next"), t = i[o]) {if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");if (!t.done) return t;u = t.value, c < 2 && (c = 0);} else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);i = e;} else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;} catch (t) {i = e, c = 1, u = t;} finally {f = 1;}}return { value: t, done: y };};}(r, o, i), !0), u;}var a = {};function Generator() {}function GeneratorFunction() {}function GeneratorFunctionPrototype() {}t = Object.getPrototypeOf;var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () {return this;}), t),u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);function f(e) {return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;}return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () {return this;}), _regeneratorDefine2(u, "toString", function () {return "[object Generator]";}), (_regenerator = function _regenerator() {return { w: i, m: f };})();}function _regeneratorDefine2(e, r, n, t) {var i = Object.defineProperty;try {i({}, "", {});} catch (e) {i = 0;}_regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) {function o(r, n) {_regeneratorDefine2(e, r, function (e) {return this._invoke(r, n, e);});}r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));}, _regeneratorDefine2(e, r, n, t);}
3  define(['virt_jquery_all', 'react', 'react-dom',
4  'classnames', 'cookie', '/www/hola/pub/config.js', 'login_config',
5  '/www/util/pub/pure_component.js', '/util/url.js',
6  '/util/escape.js', '/util/zerr.js', '/util/etask.js',
7  '/util/csrf.js', '/www/hola/pub/modal.js', '/util/ajax.js',
8  'hola_opt', '/util/user_agent.js', '/www/login/pub/verify_email.js',
9  '/www/hola/pub/util.js', '/www/hola/pub/react_util.js',
10  '/www/hola/pub/recaptcha.js', '/www/hola/pub/be.js', '/util/string.js',
11  '/util/util.js', '/util/fetch.js', '/www/hola/pub/lib/input.js',
12  '/www/shared/button', '/www/hola/pub/lib/checkbox',
13  '/www/hola/pub/ui/pass_meter.js', '/www/hola/pub/login/captcha.tsx',
14  '/www/hola/pub/shared/svg', '/www/hola/pub/img/svg/icon/appstore_logo.svg',
15  '/www/hola/pub/settings_ctx.tsx',
16  'react-i18next'],
17  function ($, React, ReactDOM, classnames, cookie, config, login_config,
18  Pure_component, zurl, zescape, zerr, etask, csrf, modal, ajax,
19  hopt, user_agent, verify_email, www_util, react_util,
20  recaptcha, be, string, zutil, _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7,
21  Icon_appstore_logo, _ref8, _ref9)
22
23  {var fetch = _ref.fetch;var Input = _ref2.Input;var Button = _ref3.Button;var Checkbox = _ref4.Checkbox;var Pass_meter = _ref5.Pass_meter;var Captcha = _ref6.Captcha;var Svg = _ref7.Svg;var Settings_context = _ref8.Settings_context,Settings_provider = _ref8.Settings_provider;var Trans = _ref9.Trans;
24    var E = {};
25    var useState = React.useState,useEffect = React.useEffect,Fragment = React.Fragment,useContext = React.useContext;
26    var Modal = modal.Modal,Header = modal.Header;
27    var url2md5 = config.url2md5;
28    var up = login_config.url_prefix + '/users';
29    var perr = function perr(id, info) {return etask(/*#__PURE__*/_regenerator().m(function _callee() {var _t;return _regenerator().w(function (_context) {while (1) switch (_context.p = _context.n) {case 0:_context.p = 0;
30
31              info = info || {};
32              if (navigator && !navigator.cookieEnabled)
33              info.cookie_blocked = true;_context.n = 1;
34              return www_util.perr({ id: "www_".concat(id), info: info });case 1:_context.n = 3;break;case 2:_context.p = 2;_t = _context.v;case 3:return _context.a(2);}}, _callee, null, [[0, 2]]);})
35
36      );};
37
38    var slide = function slide(container, direction, cb1, cb2) {
39      var c_el = document.getElementsByClassName(container.slice(1))[0];
40      if (!c_el)
41      return;
42      c_el.className += ' login_form__slide_' + direction + '_hide';
43      setTimeout(function () {
44        cb1 && cb1();
45        c_el.className = c_el.className.
46        replace('login_form__slide_' + direction + '_hide',
47        'login_form__slide_' + direction + '_show');
48        setTimeout(function () {
49          c_el.className = c_el.className.
50          replace(' login_form__slide_' + direction + '_show', '');
51          setTimeout(function () {
52            cb2 && cb2();
53          }, 200);
54        }, 0);
55      }, 200);
56    };
57
58    var A = function A(props) {return /*#__PURE__*/React.createElement("a", _extends({ target: "_blank", rel: "noopener noreferrer" }, props),
59      props.children);};
60
61    var Footer = function Footer(_ref0) {var signup_mode = _ref0.signup_mode,google_terms = _ref0.google_terms,instead_google = _ref0.instead_google;
62      var _useContext = useContext(Settings_context),theme = _useContext.theme;
63      return /*#__PURE__*/React.createElement("div", { className: classnames('login-footer') },
64      instead_google ? /*#__PURE__*/React.createElement(Fragment, null) : /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/
65      React.createElement("p", { className: classnames(theme.p2, theme.logo_grey) }, "By clicking ",
66      signup_mode ? 'Join' : 'Log in', ", you agree you have read and accepted the ", /*#__PURE__*/
67      React.createElement(A, { href: "/legal/sla" }, "Hola End User Agreement"
68      ), " and the ", /*#__PURE__*/React.createElement(A, { href: "/legal/privacy" }, "Hola Privacy Statement"
69      ), "."
70      ),
71      google_terms && (hopt.mtcaptcha && hopt.mtcaptcha.enable ? /*#__PURE__*/
72      React.createElement("p", { className: classnames(theme.p2, theme.logo_grey) }, "This site is protected by MTCaptcha and the MTCaptcha ", /*#__PURE__*/
73      React.createElement(A, {
74        href: "https://www.mtcaptcha.com/legal-privacy-captcha",
75        target: "_blank", rel: "noopener noreferrer" }, "Privacy Policy"
76
77      ), " and ", /*#__PURE__*/React.createElement(A, {
78        href: "https://www.mtcaptcha.com/legal-terms",
79        target: "_blank", rel: "noopener noreferrer" }, "Terms of Service"
80
81      ), " apply."
82      ) : /*#__PURE__*/
83      React.createElement("p", { className: classnames(theme.p2, theme.logo_grey) }, "This site is protected by reCAPTCHA and the Google ", /*#__PURE__*/
84      React.createElement(A, {
85        href: "https://policies.google.com/privacy" }, "Privacy Policy"
86
87      ), " and ", /*#__PURE__*/React.createElement(A, {
88        href: "https://policies.google.com/terms" }, "Terms of Service"
89
90      ), " apply."
91      ))
92      )
93      );
94    };
95
96    var Error_message = function Error_message(props) {return (/*#__PURE__*/
97        React.createElement("div", { className: "error-container" }, /*#__PURE__*/
98        React.createElement("div", { className: "error-mark-container" }, /*#__PURE__*/
99        React.createElement("span", { className: "glyphicon glyphicon-exclamation-sign" })
100        ),
101        props.error
102        ));};
103
104    var Show_password = function Show_password(props) {return (/*#__PURE__*/
105        React.createElement("svg", { fill: "#65707c", height: props.height, width: props.width }, /*#__PURE__*/
106        React.createElement("path", { d: "M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z",
107          fill: "none" }), /*#__PURE__*/
108        React.createElement("path", { d: "M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z" }
109
110
111
112
113
114
115
116        )
117        ));};
118
119    var Hide_password = function Hide_password(props) {return (/*#__PURE__*/
120        React.createElement("svg", { fill: "#65707c", height: props.height, width: props.width }, /*#__PURE__*/
121        React.createElement("path", { d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/
122        React.createElement("path", { d: "M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z" }
123
124
125        )
126        ));};
127
128    var Need_plus = function Need_plus() {return (/*#__PURE__*/
129        React.createElement("div", { className: "alert alert-info" }, "No PLUS subscription.", /*#__PURE__*/
130
131        React.createElement("a", { target: "_blank", href: "/premium?ref=login" }, "Subscribe"), " now!"
132        ));};var
133
134    Base_login = /*#__PURE__*/function (_Pure_component) {
135      function Base_login(props) {var _this2;_classCallCheck(this, Base_login);
136        _this2 = _callSuper(this, Base_login, [props]);_defineProperty(_this2, "get_mode",
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171        function () {return _this2.state.mode;});_defineProperty(_this2, "on_input_blur",
172
173
174
175
176
177
178        function (event) {
179          if (event.target.name == 'password' && window.mtcaptcha)
180          {
181            var captcha_status = window.mtcaptcha.getStatus();
182            if (captcha_status.isVisible)
183            window.mtcaptcha.focus();
184          }
185        });_this2.state = { email: props.email || '', loading: false, error_type: null, error_field: null, block_sending: false };return _this2;}_inherits(Base_login, _Pure_component);return _createClass(Base_login, [{ key: "clear_error", value: function clear_error() {this.setState({ error_field: null, error_type: null });} }, { key: "set_error", value: function set_error(_ref1) {var field = _ref1.field,type = _ref1.type,err = _ref1.err,src = _ref1.src;this.setState({ error_field: field, error_type: type, loading: false, block_sending: true });try {window.mtcaptcha.resetUI();} catch (e) {}this.set_focus(field);if (type) {var response = zutil.get(err, 'hola_info.response_text') || '';var status = zutil.get(err, 'hola_info.status');var url = zutil.get(err, 'hola_info.url');if (type == 'unknown' && response.match(/Missing CSRF/i)) type = 'missing_csrf';if (type == 'unknown' && response.match(/CSRF.*mismatch/i)) type = 'csrf_mismatch';src = src || this.get_mode() || 'login';perr("".concat(src, "_error"), { field: field, url: url, email: this.state.email, error_type: type, status: status, err: err && zerr.e2s(err), csrf_token: csrf.get(), response: response.substr(0, 256) });}} }, { key: "validate_email", value: function validate_email(src) {var email = this.state.email;if (zurl.is_valid_email(email)) return email;
185this.set_error({ field: 'email', type: 'invalid_email', src: src });} }]);}(Pure_component);
186
187
188    E.email_errors = function (email, code, cls, set_signup_mode) {
189      var email_match = email.match(/@(.*)$/);
190      switch (code) {
191
192        case 'invalid_email':return /*#__PURE__*/React.createElement("div", { className: cls }, "Please enter a valid email address"
193
194          );
195        case 'domain_blacklisted':return /*#__PURE__*/React.createElement("div", { className: cls }, "Please use another email. We don't allow @",
196
197          email_match && email_match[1] || email, " email address"
198
199          );
200        case 'email_used':
201        case 'email_already_used':return /*#__PURE__*/React.createElement("div", { className: cls }, "The email address is already in use. ", /*#__PURE__*/
202
203          React.createElement("a", { onClick: function onClick() {return set_signup_mode(false);}, className: "dummy" }, "Click here to sign in"
204          )
205          );
206        case 'bad_email':
207        default:return /*#__PURE__*/React.createElement("div", { className: cls }, "Please use another email.");
208      }
209    };var
210    Login = /*#__PURE__*/function (_Base_login2) {
211      function Login(props) {var _this3;_classCallCheck(this, Login);
212        _this3 = _callSuper(this, Login, [props]);_defineProperty(_this3, "on_recaptcha_challenge",
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266        function (action) {
267          clearTimeout(_this3.recaptcha_stuck);
268          perr("".concat(action, "_recaptcha_challenge_show"), { email: _this3.state.email });
269          _this3.recaptcha_long_stuck = setTimeout(function () {
270            perr("".concat(action, "_stuck_recaptcha_challenge"));
271          }, 30000);
272        });_defineProperty(_this3, "get_mode",
273        function () {return _this3.state.signup_mode ? 'signup' : 'login';});_defineProperty(_this3, "get_token",
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366        function () {
367          var _this = _this3;
368          return etask(/*#__PURE__*/_regenerator().m(function _callee2() {var token, captcha_st, captcha_task;return _regenerator().w(function (_context2) {while (1) switch (_context2.n) {case 0:
369                  token = window.mtcaptcha.getVerifiedToken();
370                  captcha_st = window.mtcaptcha.getStatus();if (!(
371                  !token && !captcha_st.isVisible)) {_context2.n = 1;break;}
372
373                  captcha_task = etask.wait();
374                  window.mtcaptcha.resetUI();
375                  _this.captcha_interval = setInterval(function () {
376                    token = window.mtcaptcha.getVerifiedToken();
377                    if (token)
378                    {
379                      clearInterval(_this.captcha_interval);
380                      captcha_task["continue"]();
381                    }
382                    var interval_st = window.mtcaptcha.getStatus();
383                    if (interval_st.isVisible)
384                    {
385                      clearInterval(_this.captcha_interval);
386                      captcha_task["continue"]();
387                    }
388                  }, 1000);_context2.n = 1;
389                  return captcha_task;case 1:return _context2.a(2,
390
391                  token);}}, _callee2);})
392          );
393        });_defineProperty(_this3, "resend_premium_verification",
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454        function () {
455          var _this = _this3;
456          if (_this3.state.loading)
457          return;
458          perr('resend_premium_verification_click', { email: _this3.state.email });
459          etask(/*#__PURE__*/_regenerator().m(function _callee3() {return _regenerator().w(function (_context3) {while (1) switch (_context3.n) {case 0:
460                  _this.setState({ loading: true });_context3.n = 1;
461                  return verify_email.resend_premium_verification(
462                    { email: _this.state.email });case 1:
463                  _this.setState({ loading: false });case 2:return _context3.a(2);}}, _callee3);})
464          );
465        });_defineProperty(_this3, "signup",
466        function (event) {
467          var _this = _this3;
468          var src = 'signup';
469          var on_signup = function on_signup(status, err_field) {
470            if (err_field)
471            _this.set_error({ field: err_field, type: status, src: src });
472            if (_this.props.on_signup)
473            _this.props.on_signup(_this.state.email, status);
474          };
475          event.preventDefault();
476          if (_this.state.block_sending)
477          return;
478          perr('signup_click', { email: _this3.state.email });
479          etask(/*#__PURE__*/_regenerator().m(function _callee4() {var email, password, form, data, _ref10, ignore_countries, mtcaptcha, token, type_c, err, _err, qs, query_obj, iterator, value, err_type, ret, _t2, _t3;return _regenerator().w(function (_context4) {while (1) switch (_context4.p = _context4.n) {case 0:
480
481                  _this.clear_error();if (
482                  email = _this.validate_email('signup')) {_context4.n = 1;break;}return _context4.a(2,
483                  on_signup('invalid_email'));case 1:if (
484                  password = _this.validate_password()) {_context4.n = 2;break;}return _context4.a(2,
485                  on_signup('invalid_password'));case 2:_context4.p = 2;
486
487                  _this.setState({ loading: true, error_field: null,
488                    error_type: null });
489                  form = _this.ref.
490                  getElementsByClassName('login-form');
491                  data = new FormData(form[0]);
492                  if (_this.state.unsubscribe)
493                  data.append('unsubscribe', 1);_ref10 =
494                  hopt.recaptcha || {}, ignore_countries = _ref10.ignore_countries;
495                  mtcaptcha = hopt.mtcaptcha;
496
497                  type_c = 'google';if (!
498                  mtcaptcha.enable) {_context4.n = 6;break;}if (
499
500                  window.mtcaptcha) {_context4.n = 3;break;}
501
502                  err = new Error();
503                  err.hola_info = {
504                    response_text: 'load_recaptcha',
505                    status: 401
506                  };throw (
507                    err);case 3:_context4.n = 4;
508
509                  return _this.get_token();case 4:token = _context4.v;
510                  type_c = 'mtcaptcha';if (
511                  token) {_context4.n = 5;break;}
512
513                  _err = new Error();
514                  _err.hola_info = {
515                    response_text: 'recaptcha',
516                    status: 401
517                  };throw (
518                    _err);case 5:
519
520                  data.append('recaptcha', token);
521                  data.append('type_c', type_c);_context4.n = 8;break;case 6:if (!(
522
523                  !ignore_countries ||
524                  ignore_countries.indexOf(hopt.user_country) == -1)) {_context4.n = 8;break;}
525
526                  clearTimeout(_this.recaptcha_stuck);
527                  _this.recaptcha_stuck = setTimeout(function () {
528                    perr('signup_stuck_recaptcha');
529                  }, 10000);
530                  data.append('type_c', type_c);_t2 =
531                  data;_context4.n = 7;
532                  return recaptcha.new_token('signup');
532case 7:_t2.append.call(_t2, 'recaptcha', _context4.v);
533                  clearTimeout(_this.recaptcha_stuck);
534                  clearTimeout(_this.recaptcha_long_stuck);case 8:
535
536                  data.append('save_two_step', _this.state.save_two_step);
537                  qs = { no_redirect: 1 };
538                  if (_this.props.signup_bonus)
539                  qs.signup_bonus = 1;
540                  if (_this.props.qr_code)
541                  qs.qr_code = _this.props.qr_code;
542                  query_obj = {};
543                  iterator = data.entries();
544                  value = iterator.next();
545                  while (value.value)
546                  {
547                    query_obj[value.value[0]] = value.value[1];
548                    value = iterator.next();
549                  }_context4.n = 9;
550                  return ajax({ method: 'POST', data: query_obj,
551                    url: up + '/auth/basic/signup?' + zescape.qs(qs) });case 9:_context4.n = 10;
552                  return perr('signup_success', { email: email });case 10:
553                  _this.setState({ loading: false });
554                  slide('.login-body-container', 'left', function () {return _this.setState({
555                      verify_email: true });});
556                  on_signup('submitted');
557                  if (_this.props.navbar && _this.props.navbar.user_status)
558                  _this.props.navbar.user_status.refresh();_context4.n = 21;break;case 11:_context4.p = 11;_t3 = _context4.v;if (!(
559
560                  _t3 == 'recaptcha_cancel')) {_context4.n = 12;break;}return _context4.a(2,
561                  void _this.setState({ loading: false }));case 12:
562                  console.error(_t3);
563                  err_type = _t3.hola_info && (_t3.hola_info.data ||
564                  _t3.hola_info.response_text);if (!(
565                  err_type == 'invalid password')) {_context4.n = 13;break;}
566
567                  _this.set_error({ field: 'password',
568                    type: 'weak_password', src: src });return _context4.a(2);case 13:if (!
569
570
571                  ['abuse_ip'].includes(err_type)) {_context4.n = 14;break;}
572
573                  _this.set_error({ field: 'password', type: err_type, src: src });return _context4.a(2);case 14:if (!
574
575
576                  ['recaptcha', 'load_recaptcha'].includes(err_type)) {_context4.n = 15;break;}
577
578                  _this.set_error({ field: null, type: err_type, src: src });return _context4.a(2);case 15:if (!(
579
580
581                  err_type == 'email_already_used')) {_context4.n = 19;break;}_context4.n = 16;
582
583                  return _this.check_password(email, password);case 16:ret = _context4.v;if (!(
584                  ret == 'unverified_two_step')) {_context4.n = 17;break;}
585
586                  _this.setState({ loading: false,
587                    show_two_step_verif: true });return _context4.a(2);case 17:if (!(
588
589
590                  ret !== true)) {_context4.n = 18;break;}return _context4.a(2,
591                  on_signup('email_already_used', 'email'));case 18:_context4.n = 19;
592                  return _this.login_done(email);case 19:if (!
593
594                  ['bad_email', 'domain_blacklisted', 'friendly_signup'].
595                  includes(err_type)) {_context4.n = 20;break;}
596
597                  _this.set_error({ field: null, type: err_type, src: src });return _context4.a(2);case 20:
598
599
600                  _this.set_error({ field: null, type: 'unknown', err: _t3, src: src });case 21:return _context4.a(2);}}, _callee4, null, [[2, 11]]);})
601
602          );
603        });_defineProperty(_this3, "signin",
604        function (event) {
605          var _this = _this3;
606          var src = 'login';
607          event.preventDefault();
608          if (_this.state.block_sending)
609          return;
610          perr('login_click', { email: _this3.state.email });
611          etask(/*#__PURE__*/_regenerator().m(function _callee5() {var email, password, ret, _t4;return _regenerator().w(function (_context5) {while (1) switch (_context5.p = _context5.n) {case 0:_context5.p = 0;if (
612
613
614                  email = _this.validate_email('login')) {_context5.n = 1;break;}return _context5.a(2);case 1:if (
615
616                  password = _this.validate_password()) {_context5.n = 2;break;}return _context5.a(2);case 2:
617
618                  _this.setState({ loading: true, error_field: null,
619                    error_type: null });_context5.n = 3;
620                  return _this.check_password(email, password);case 3:ret = _context5.v;if (!(
621                  ret == 'not_registered')) {_context5.n = 4;break;}
622
623                  _this.set_error({ field: 'email', type: 'not_registered',
624                    src: src });return _context5.a(2);case 4:if (!(
625
626
627                  ret == 'unauthorized')) {_context5.n = 5;break;}
628
629                  _this.setState({ password: '' });
630                  _this.set_error({ field: 'password',
631                    type: 'wrong_password', src: src });return _context5.a(2);case 5:if (!
632
633
634                  ['change_password', 'account_blocked', 'abuse_ip'].
635                  includes(ret)) {_context5.n = 6;break;}
636
637                  _this.set_error({ field: 'password', type: ret, src: src });return _context5.a(2);case 6:if (!(
638
639
640                  'recaptcha' == ret || 'load_recaptcha' == ret)) {_context5.n = 7;break;}
641
642                  _this.set_error({ field: null, type: ret, src: src });return _context5.a(2);case 7:if (!(
643
644
645                  ret == 'unverified_two_step')) {_context5.n = 8;break;}
646
647                  _this.setState({ loading: false,
648                    show_two_step_verif: true });return _context5.a(2);case 8:if (!(
649
650
651                  ret !== true)) {_context5.n = 9;break;}
652
653                  _this.set_error({ field: null, type: 'unknown', src: src });return _context5.a(2);case 9:_context5.n = 10;
654
655
656                  return _this.login_done(email);case 10:_context5.n = 13;break;case 11:_context5.p = 11;_t4 = _context5.v;if (!(
657
658                  _t4 == 'recaptcha_cancel')) {_context5.n = 12;break;}return _context5.a(2,
659                  void _this.setState({ loading: false }));case 12:
660                  console.error(_t4);
661                  _this.set_error({ field: null, type: 'unknown', err: _t4, src: src });case 13:return _context5.a(2);}}, _callee5, null, [[0, 11]]);})
662
663          );
664        });_defineProperty(_this3, "login_done",
665        function (email) {
666          var _this = _this3;
667          return etask(/*#__PURE__*/_regenerator().m(function _callee6() {var login_res;return _regenerator().w(function (_context6) {while (1) switch (_context6.n) {case 0:_context6.n = 1;
668                  return perr('login_success', { email: email });case 1:_context6.n = 2;
669                  return _this.do_login();case 2:login_res = _context6.v;if (!
670                  _this.props.on_login) {_context6.n = 3;break;}return _context6.a(2,
671                  void _this.props.on_login());case 3:if (!(
672                  !login_res || !login_res.next)) {_context6.n = 4;break;}return _context6.a(2);case 4:if (!
673
674
675
676
677                  zurl.qs_parse_url(location.href, { safe: true }).signin_redirect) {_context6.n = 6;break;}_context6.n = 5;
678
679                  return be.refresh_membership();case 5:_context6.n = 6;
680                  return etask.sleep(1000);case 6:_context6.n = 7;
681
682                  return _this.make_local_redirect(login_res);case 7:
683                  if (login_res.next && login_res.next.indexOf('chrome:') == 0)
684                  login_res.next = 'https://hola.org';
685                  location.href = login_res.next;case 8:return _context6.a(2);}}, _callee6);})
686          );
687        });_defineProperty(_this3, "make_local_redirect",
688        function (login_res) {
689          var qs_o = zurl.qs_parse_url(location.href, { safe: true });
690          var local_r = decodeURIComponent(qs_o.local_redirect || '');
691          var hash = qs_o.hash;
692          var local_r_u = zurl.parse(local_r);
693          if (local_r && (local_r_u.protocol != 'http:' ||
694          local_r_u.hostname != '127.0.0.1'))
695          {
696            login_res.next = 'https://hola.org';
697            return;
698          }
699          if (!local_r || !hash)
700          return;
701          var id = (cookie.getJSON('user') || {})._id || '';
702          if (!id)
703          return;
704          return etask(/*#__PURE__*/_regenerator().m(function _callee7() {var sync_token, _t5;return _regenerator().w(function (_context7) {while (1) switch (_context7.p = _context7.n) {case 0:_context7.p = 0;_context7.n = 1;
705
706                  return www_util.get_user_sync_token(hash);case 1:sync_token = _context7.v;
707                  login_res.next = "".concat(local_r, "?ott=").concat(sync_token);_context7.n = 3;break;case 2:_context7.p = 2;_t5 = _context7.v;case 3:return _context7.a(2);}}, _callee7, null, [[0, 2]]);})
708
709          );
710        });_defineProperty(_this3, "set_focus",
711        function (input_name) {
712          input_name = input_name || _this3.state.error_field ||
713          !_this3.state.email && 'email' || 'password';
714          _this3.setState({ focus: input_name });
715          var input = _this3.ref.getElementsByClassName(input_name)[0];
716          input.parentNode.className += ' has-focus';
717          input.focus();
718        });_defineProperty(_this3, "reset_password",
719        function () {
720          slide('.login-body-container', 'left',
721          function () {return _this3.props.password_reset_mode(true, _this3.state.email);});
722        });_defineProperty(_this3, "set_signup_mode",
723        function (signup_mode) {
724          if (location.pathname == '/signin')
725          {
726            return location.href = location.href.replace(/\/signin/,
727            '/signup');
728          }
729          if (location.pathname == '/signup')
730          {
731            return location.href = location.href.replace(/\/signup/,
732            '/signin');
733          }
734          _this3.clear_error();
735          slide('.login-body-container', signup_mode ? 'left' : 'right',
736          function () {return _this3.setState({ signup_mode: signup_mode, block_sending: false });},
737          function () {return _this3.set_focus('email');});
738          if (_this3.props.on_mode_change)
739          _this3.props.on_mode_change(signup_mode);
740          _this3.set_focus('email');
741        });_defineProperty(_this3, "on_input_change",
742        function (event) {
743          var target = event.target;
744          var name = target.name == 'username' ? 'email' : target.name;
745          target.parentNode.className = target.parentNode.className.
746          replace('is-empty', '');
747          _this3.setState(_defineProperty(_defineProperty({}, name, "".concat(target.value).trim()), "block_sending",
748          false));
749        });_defineProperty(_this3, "on_unsubscribe_change",
750        function () {
751          _this3.setState({ unsubscribe: !_this3.state.unsubscribe });
752        });
752_defineProperty(_this3, "on_save_two_step_change",
753        function () {
754          _this3.setState({ save_two_step: !_this3.state.save_two_step });
755        });_defineProperty(_this3, "toggle_show_password",
756        function () {
757          _this3.setState({ show_password: !_this3.state.show_password,
758            show_password_transition: true });
759          setTimeout(function () {return _this3.setState({ show_password_transition: false });}, 300);
760          _this3.set_focus('password');
761        });_defineProperty(_this3, "on_email_key_down",
762        function (event) {
763          if (event.keyCode != 13)
764          return;
765          if (_this3.state.signup_mode)
766          return _this3.signup(event);
767          _this3.signin(event);
768        });_defineProperty(_this3, "social_click",
769        function (event) {
770          var mode = _this3.get_mode();
771          var name = event.currentTarget.name;
772          event.preventDefault();
773          event.stopPropagation();
774          var _this = _this3;
775          etask(/*#__PURE__*/_regenerator().m(function _callee8() {return _regenerator().w(function (_context8) {while (1) switch (_context8.n) {case 0:_context8.n = 1;
776                  return perr("".concat(mode, "_").concat(name, "_click"));case 1:
777                  E.social_click(name, _this.get_enc_url());case 2:return _context8.a(2);}}, _callee8);})
778          );
779        });_defineProperty(_this3, "email_click",
780        function (event) {
781          event.preventDefault();
782          event.stopPropagation();
783          slide('.login-body-container', 'left',
784          function () {return _this3.setState({ with_email: true });},
785          function () {return _this3.set_focus('email');});
786        });_defineProperty(_this3, "email_google_click",
787        function (event) {
788          event.preventDefault();
789          event.stopPropagation();
790          slide('.login-body-container', 'left',
791          function () {return _this3.setState({ with_email: true, instead_google: true });},
792          function () {return _this3.set_focus('email');});
793        });_defineProperty(_this3, "back_click",
794        function (event) {
795          event.preventDefault();
796          event.stopPropagation();
797          slide('.login-body-container', 'right', function () {return (
798              _this3.setState({ with_email: false, instead_google: false }));});
799        });_defineProperty(_this3, "get_enc_url",
800        function () {
801          var _this3$props = _this3.props,enc_url = _this3$props.enc_url,signup_bonus = _this3$props.signup_bonus,next = _this3$props.next,qr_code = _this3$props.qr_code;
802          return enc_url || '?' + zescape.qs({
803            next: next || location.href,
804            signup_bonus: signup_bonus ? 1 : undefined,
805            qr_code: qr_code
806          });
807        });var login_conf = zutil.get(hopt, 'www_hola.login', {});var social = _objectSpread(_objectSpread(_objectSpread({}, zutil.get(login_conf.all, 'social', {})), zutil.get(login_conf[location.hostname], 'social', {})), zutil.get(props, 'blocks.social', {}));Object.assign(_this3.state, { signup_mode: props.signup_mode, show_two_step_verif: false, save_two_step: true, password: '', unsubscribe: false, csrf_token: csrf.get(), social: social, with_email: !!social.hide, qs: zurl.qs_parse_url(location.href, { safe: true }) });perr("".concat(_this3.get_mode(), "_view"));return _this3;}_inherits(Login, _Base_login2);return _createClass(Login, [{ key: "componentDidMount", value: function componentDidMount() {if (this.state.qs.force_signin) perr('force_signin_page');if (this.state.with_email) this.init_recaptcha();var qs_o = zurl.qs_parse_url(location.href, { safe: true });var local_r = decodeURIComponent(qs_o.local_redirect || '');if (local_r && this.props.user && this.props.user.emails) {var email_o = this.props.user.emails[0];if (!email_o) return;var email = email_o.value;var user = cookie.getJSON('user');if (email && user && user.is_member && !user.is_trial) this.login_done(email);}} }, { key: "componentWillUnmount", value: function componentWillUnmount() {recaptcha.unload();clearInterval(this.captcha_interval);clearTimeout(this.recaptcha_long_stuck);} }, { key: "componentDidUpdate", value: function componentDidUpdate(prev_props, prev_state) {if (!prev_state.with_email && this.state.with_email) this.init_recaptcha();} }, { key: "init_recaptcha", value: function init_recaptcha() {if (hopt.mtcaptcha && hopt.mtcaptcha.enable) return;perr("recaptcha_init");clearTimeout(this.recaptcha_long_stuck);
807recaptcha.render(this.captcha_el, this.on_recaptcha_challenge);} }, { key: "get_error", value: function get_error() {var _this4 = this;var cls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'alert alert-danger';var state = this.state;switch (state.error_type) {case 'email_already_used':case 'bad_email':case 'domain_blacklisted':case 'invalid_email':return E.email_errors(state.email, state.error_type, cls, this.set_signup_mode);case 'empty_password':return /*#__PURE__*/React.createElement("div", { className: cls }, "Please enter a password");case 'short_password':return /*#__PURE__*/React.createElement("div", { className: cls }, www_util.pass_err_short);case 'weak_password':return /*#__PURE__*/React.createElement("div", { className: cls }, www_util.pass_err_stronger);case 'change_password':return /*#__PURE__*/React.createElement("div", { className: cls }, "Password must be changed");case 'account_blocked':return /*#__PURE__*/React.createElement("div", { className: cls }, "Your account is temporarily blocked. Try again later or click ", /*#__PURE__*/React.createElement("a", { onClick: function onClick() {return _this4.reset_password(true);}, className: "dummy" }, "Forgot password"), " to reset it.");case 'wrong_password':return /*#__PURE__*/React.createElement("div", { className: cls }, "Wrong password. Try again or click ", /*#__PURE__*/React.createElement("a", { onClick: function onClick() {return _this4.reset_password(true);}, className: "dummy" }, "Forgot password"), " to reset it.");case 'not_registered':return /*#__PURE__*/React.createElement("div", { className: cls }, "The email address is not registered. If you signed up with Google signup button, you should login with Google login button. ", !this.props.no_switch && /*#__PURE__*/React.createElement("a", { onClick: function onClick() {return _this4.set_signup_mode(true);}, className: "dummy" }, "Click here to sign up"));case 'friendly_signup':return /*#__PURE__*/React.createElement("div", { className: cls }, "Check your mailbox and follow the instructions to complete the registration process. ", /*#__PURE__*/React.createElement("a", { onClick: this.resend_premium_verification, className: "dummy" }, "Resend email"));case 'recaptcha':return /*#__PURE__*/React.createElement("div", { className: cls }, "Please, fill captch field correctly.");case 'load_recaptcha':return /*#__PURE__*/React.createElement("div", { className: cls }, "We detect network issue from your side. Please reload the page and try again. ", /*#__PURE__*/React.createElement("a", { href: "#", onClick: function onClick() {location.reload();} }, "Or click here for reload"));case 'abuse_ip':return /*#__PURE__*/React.createElement("div", { className: cls }, "Your IP was blocked due to suspicious activity. Please sign in with ", /*#__PURE__*/React.createElement("a", { name: "google", onClick: function onClick(event) {return _this4.social_click(event);} }, "Google"), " or ", /*#__PURE__*/React.createElement("a", { name: "facebook", onClick: function onClick(event) {return _this4.social_click(event);} }, "Facebook"), " or contact us at ", /*#__PURE__*/React.createElement("a", { href: "mailto:[email protected]" }, "[email protected]"));case 'unknown':return /*#__PURE__*/React.createElement("div", { className: cls }, "We've encountered an error. Please try again later.");case '/':}if (this.props.need_plus) {var user = cookie.getJSON('user');if (user && user._id && !user.is_member) return /*#__PURE__*/React.createElement(Need_plus, null);}} }, { key: "continue_with_basic", value: function continue_with_basic() {var _this5 = this;this.setState({ email: this.state.failed_email, continue_with_basic: this.state.failed_email });slide('.login-body-container', 'left', function () {return _this5.clear_error();});} }, { key: "validate_password", value: function validate_password() {var _this$state = this.state,password = _this$state.password,signup_mode = _this$state.signup_mode;var src = signup_mode ? 'signup' : 'login';if (password == '') {this.set_error({ field: 'password', type: 'empty_password', src: src });return;}if (signup_mode && password.length < 8) {this.set_error({ field: 'password', type: 'short_password', src: src });return;}return password;} }, { key: "check_password", value: function check_password(email, password) {var _this = this;return etask(/*#__PURE__*/_regenerator().m(function _callee9() {var res, _ref11, ignore_countries, mtcaptcha, token, type_c, err, _err2, _t6;return _regenerator().w(function (_context9) {while (1) switch (_context9.p = _context9.n) {case 0:_context9.p = 0;_ref11 = hopt.recaptcha || {}, ignore_countries = _ref11.ignore_countries;mtcaptcha = hopt.mtcaptcha;type_c = 'google';if (!mtcaptcha.enable) {_context9.n = 4;break;}if (window.mtcaptcha) {_context9.n = 1;break;}err = new Error();err.hola_info = { response_text: 'load_recaptcha', status: 401 };throw err;case 1:_context9.n = 2;return _this.get_token();case 2:token = _context9.v;type_c = 'mtcaptcha';if (token) {_context9.n = 3;break;}_err2 = new Error();_err2.hola_info = { response_text: 'recaptcha', status: 401 };throw _err2;case 3:_context9.n = 6;break;case 4:if (!(!ignore_countries || ignore_countries.indexOf(hopt.user_country) == -1)) {_context9.n = 6;break;}clearTimeout(_this.recaptcha_stuck);_this.recaptcha_stuck = setTimeout(function () {perr('login_stuck_recaptcha');}, 10000);_context9.n = 5;return recaptcha.new_token('login');case 5:token = _context9.v;clearTimeout(_this.recaptcha_stuck);clearTimeout(_this.recaptcha_long_stuck);case 6:_context9.n = 7;return fetch(up + '/auth/basic/check_credentials', { method: 'POST', body: { username: email, password: password, recaptcha: token, type_c: type_c } });case 7:res = _context9.v;_context9.n = 10;break;case 8:_context9.p = 8;_t6 = _context9.v;if (!(_t6.hola_info && _t6.hola_info.status === 401)) {_context9.n = 9;break;}return _context9.a(2, _t6.hola_info.response_text || false);case 9:throw _t6;case 10:_this.setState({ csrf_token: csrf.get() });return _context9.a(2, res == 'ok' ? true : res);}}, _callee9, null, [[0, 8]]);}));} }, { key: "do_login", value: function do_login() {return $.get(up + '/auth/basic/login' + this.get_enc_url());} }, { key: "render", value:
808        function render() {var _this6 = this;
809          var state = this.state,props = this.props;
810          var signup = state.signup_mode;
811          var email_group_cls = classnames('email-group', {
812            'has-error': state.error_field == 'email',
813            'is-empty': !state.email,
814            'not-empty': state.email,
815            'has-focus': state.focus == 'email'
816          });
817          var password_group_cls = classnames('password-group', {
818            'has-error': state.error_field == 'password',
819            'is-empty': !state.password,
820            'not-empty': state.password,
821            transition: state.show_password_transition,
822            'has-focus': state.focus == 'password'
823          });
824          var show_password_title = (state.show_password ? 'Hide' : 'Show') +
825          ' password';
826          var password_field_type = state.show_password ? 'text' : 'password';
827          var autocomplete_password = signup ? 'new-password' :
828          'current-password';
829          var show_subscribe = zutil.get(hopt, 'www_hola.signup_subscribe') &&
830          state.signup_mode && !state.with_email;
831          var show_google_method = !state.social.hide &&
832          !state.social.hide_google;
833          var qs_o = zurl.qs_parse_url(location.href, { safe: true });
834          var block_google_login =
835          zutil.get(hopt, 'www_hola.block_google_login') ||
836          qs_o.block_google_login;
837          var show_fb_method = !state.social.hide && !state.social.hide_fb;
838          var show_apple_method = !state.social.hide &&
839          !state.social.hide_apple;
840          var show_github_method = !state.social.hide &&
841          !state.social.hide_github;
842          var action_button = signup ? /*#__PURE__*/
843          React.createElement(Button, { round: true, arrow: true, size: "sm", cls: "login_btn", w100: true,
844            on_click: this.signup, tab_index: "3", disabled: state.loading,
845            caption: state.loading ? 'Joining...' : 'Join' }) : /*#__PURE__*/
846          React.createElement(Button, { round: true, arrow: true, size: "sm", cls: "login_btn", w100: true,
847            on_click: state.instead_google ? this.signup : this.signin,
848            tab_index: "3", disabled: state.loading,
849            caption: state.loading ? 'Logging in...' : 'Log in' });
850          var user = cookie.getJSON('user');
851          var need_plus = props.need_plus && user && user._id &&
852          !user.is_member;
853          if (state.verify_email)
854          {
855            return /*#__PURE__*/React.createElement("div", { className: "login-view", ref: function ref(_ref12) {return _this6.ref = _ref12;} }, /*#__PURE__*/
856            React.createElement(Verify_email_view, { email: state.email,
857              enc_url: this.get_enc_url(), hide_title: props.hide_title })
858            );
859          }
860          if (state.show_two_step_verif)
861          {
862            return /*#__PURE__*/React.createElement("div", { className: "login-view", ref: function ref(_ref13) {return _this6.ref = _ref13;} }, /*#__PURE__*/
863            React.createElement(Two_step_verif, { email: state.email,
864              done_cb: this.login_done, hide_title: props.hide_title })
865            );
866          }
867          var title = props.title || (signup ? 'Join Hola, it\'s free!' :
868          state.with_email ? 'Log in with Email' : 'Choose log in method:');
869          if (state.instead_google)
870          {
871            title = 'Google login is not available. Please set up a new ' +
872            'password using the same email address to get access to ' +
873            'your account';
874          }
875          if (this.state.qs.force_signin)
876          title = 'To continue using Hola, please ' + title;
877          var show_meter = zutil.get(hopt, 'www_hola.pass_meter') ||
878          qs_o.pass_meter;
879          return /*#__PURE__*/React.createElement("div", { className: "login-view", ref: function ref(_ref15) {return _this6.ref = _ref15;} }, /*#__PURE__*/
880          React.createElement("div", { ref: function ref(_ref14) {return _this6.captcha_el = _ref14;} }),
881          need_plus && /*#__PURE__*/React.createElement("div", { className: "alerts" }, /*#__PURE__*/React.createElement(Need_plus, null)), /*#__PURE__*/
882          React.createElement("div", { className: classnames('login-body', { loading: state.loading }) }, /*#__PURE__*/
883          React.createElement("div", { className: "login-body-container" }, /*#__PURE__*/
884          React.createElement("div", null,
885          !state.social.hide && state.with_email && /*#__PURE__*/
886          React.createElement("a", { onClick: this.back_click, className: "back-arrow" }, "Back"), /*#__PURE__*/
887          React.createElement("div", { className: "spacer" }),
888          !props.hide_title && /*#__PURE__*/
889          React.createElement("div", { className: "title" }, title),
890          !state.with_email && /*#__PURE__*/React.createElement("div", { className: "login-methods" },
891          show_google_method && (
892          !block_google_login || !state.signup_mode) && /*#__PURE__*/
893          React.createElement(Method_button, { type: "google",
894            on_click: block_google_login ? this.email_google_click :
895            this.social_click, signup_mode: state.signup_mode }),
896          show_fb_method && /*#__PURE__*/React.createElement(Method_button, { type: "facebook",
897            on_click: this.social_click, signup_mode: state.signup_mode }), /*#__PURE__*/
898          React.createElement(Method_button, { type: "email", on_click: this.email_click,
899            signup_mode: state.signup_mode }),
900          show_apple_method && /*#__PURE__*/React.createElement(Method_button, { type: "apple",
901            on_click: this.social_click, signup_mode: state.signup_mode }, /*#__PURE__*/
902          React.createElement(Svg, { icon: /*#__PURE__*/React.createElement(Icon_appstore_logo, { width: 16, height: 16 }) })
903          ),
904          show_github_method && /*#__PURE__*/React.createElement(Method_button, { type: "github",
905            on_click: this.social_click, signup_mode: state.signup_mode }
906          )
907          ),
908          state.with_email && /*#__PURE__*/React.createElement("form", { className: "login-form", method: "post",
909            action: up + '/auth/basic/signup' + this.get_enc_url() }, /*#__PURE__*/
910          React.createElement("div", { className: email_group_cls }, /*#__PURE__*/
911          React.createElement("input", { type: "text", name: "username", tabIndex: "1",
912            readOnly: !!props.email, value: state.email,
913            onChange: this.on_input_change,
914            onKeyDown: this.on_email_key_down,
915            onBlur: this.on_input_blur,
916            onClick: function onClick() {return _this6.set_focus('email');},
917            onFocus: function onFocus() {return _this6.set_focus('email');},
918            className: "form-control email", autoComplete: "username" }), /*#__PURE__*/
919          React.createElement("div", { className: "email-overlay",
920            onFocus: function onFocus() {return _this6.set_focus('email');},
921            onClick: function onClick() {return _this6.set_focus('email');} }
922          ), /*#__PURE__*/
923          React.createElement("div", { className: "label",
924            onFocus: function onFocus() {return _this6.set_focus('email');},
925            onClick: function onClick() {return _this6.set_focus('email');} }, "Email address"
926
927          )
928          ), /*#__PURE__*/
929          React.createElement("div", { className: password_group_cls }, /*#__PURE__*/
930          React.createElement("input", { type: password_field_type, name: "password",
931            tabIndex: "2", autoComplete: autocomplete_password,
932            value: state.password, onChange: this.on_input_change,
933            onClick: function onClick() {return _this6.set_focus('password');},
934            onFocus: function onFocus() {return _this6.set_focus('password');},
935            onBlur: this.on_input_blur, maxLength: "100",
936            className: "form-control password" }), /*#__PURE__*/
937          React.createElement("span", { onClick: this.toggle_show_password,
938            title: show_password_title }, /*#__PURE__*/
939          React.createElement("div", { className: "circle" }),
940          !state.show_password && /*#__PURE__*/
941          React.createElement(Show_password, { width: "24", height: "24" }),
942          state.show_password && /*#__PURE__*/
943          React.createElement(Hide_password, { width: "24", height: "24" })
944          ), /*#__PURE__*/
945          React.createElement("div", { className: "label",
946            onClick: function onClick() {return _this6.set_focus('password');} }, "Enter your password"
947
948          ),
949          (signup || state.instead_google) && show_meter && /*#__PURE__*/
950          React.createElement(Pass_meter, { pass: state.password, email: state.email })
951          ),
952          hopt.mtcaptcha && hopt.mtcaptcha.enable && /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/
953          React.createElement(Captcha, { on_verified: function on_verified() {
954              _this6.setState({ block_sending: false });
955            } })
956          ),
957          state.error_type && /*#__PURE__*/
958          React.createElement(Error_message, { error: this.get_error('error-message') }),
959          (signup || state.instead_google) && /*#__PURE__*/
960          React.createElement(Checkbox, { checked: state.save_tw
960o_step,
961            on_change: this.on_save_two_step_change, size: "sm",
962            caption: 'Trust this device' }),
963          !signup && !state.instead_google && /*#__PURE__*/
964          React.createElement("a", { className: "reset-password",
965            onClick: function onClick() {return _this6.reset_password(true);} }, "Forgot password?"
966          ),
967          action_button, /*#__PURE__*/
968          React.createElement("input", { type: "hidden", name: "csrf_token",
969            value: state.csrf_token })
970          ),
971          show_subscribe && /*#__PURE__*/React.createElement("div", {
972            className: "subscribe-group" }, /*#__PURE__*/
973          React.createElement(Checkbox, { checked: !state.unsubscribe, size: "sm",
974            on_change: this.on_unsubscribe_change, cls: "hola_checkbox" }), /*#__PURE__*/
975          React.createElement("span", null, "I would like to receive news, special offers and other marketing materials from Hola."
976
977
978          )
979          ),
980          !props.no_switch && signup && /*#__PURE__*/
981          React.createElement("p", { className: "mode-switch" }, "Already have an account? ", /*#__PURE__*/
982          React.createElement("a", { className: "dummy",
983            onClick: function onClick() {return _this6.set_signup_mode(false);} }, "Log in")
984          ),
985          !props.no_switch && !signup && !state.instead_google && /*#__PURE__*/
986          React.createElement("p", { className: "mode-switch" }, "Don't have an account? ", /*#__PURE__*/
987          React.createElement("a", { className: "dummy",
988            onClick: function onClick() {return _this6.set_signup_mode(true);} }, "Join")
989          ),
990          !props.modal && /*#__PURE__*/
991          React.createElement(Footer, { signup_mode: state.signup_mode,
992            google_terms: state.with_email })
993          )
994          )
995          ),
996          props.modal && /*#__PURE__*/
997          React.createElement(Footer, { signup_mode: state.signup_mode,
998            google_terms: state.with_email,
999            instead_google: state.instead_google })
1000          );
1001        } }]);}(Base_login);
1002
1003
1004    var method_name = { apple: 'Apple ID' };
1005    var Method_button = function Method_button(_ref16) {var children = _ref16.children,type = _ref16.type,signup_mode = _ref16.signup_mode,on_click = _ref16.on_click;
1006      var login_with = signup_mode ? 'Join with' : 'Log in with';
1007      return /*#__PURE__*/React.createElement("a", { name: type, className: "auth-method ".concat(type), onClick: on_click }, /*#__PURE__*/
1008      React.createElement("div", { className: "auth-method-icon" }, children), /*#__PURE__*/
1009      React.createElement("div", null, login_with, " ", method_name[type] || string.capitalize(type))
1010      );
1011    };
1012
1013    var Verify_email_view = function Verify_email_view(_ref17) {var email = _ref17.email,hide_title = _ref17.hide_title,enc_url = _ref17.enc_url;
1014      enc_url = enc_url || '';
1015      var _useState = useState(false),_useState2 = _slicedToArray(_useState, 2),loading = _useState2[0],set_loading = _useState2[1];
1016      var _useState3 = useState(false),_useState4 = _slicedToArray(_useState3, 2),resent = _useState4[0],set_resent = _useState4[1];
1017      useEffect(function () {
1018        perr('verify_email_view', { email: email });
1019        var interval = setInterval(function () {return etask(/*#__PURE__*/_regenerator().m(function _callee0() {var res, _zurl$qs_parse, next;return _regenerator().w(function (_context0) {while (1) switch (_context0.n) {case 0:_context0.n = 1;
1020                  return $.get(up + '/is_verified');case 1:res = _context0.v;if (!(
1021                  !res || !res.verified)) {_context0.n = 2;break;}return _context0.a(2);case 2:_zurl$qs_parse =
1022
1023                  zurl.qs_parse(zurl.parse(enc_url).query,
1024                  { safe: true }), next = _zurl$qs_parse.next;
1025                  location.href = next && www_util.is_safe_redirect(next) ?
1026                  next : 'https://hola.org/cp';
1027                  perr('verify_email_polling_success', { email: email });
1028                  clearInterval(interval);case 3:return _context0.a(2);}}, _callee0);})
1029          );}, 1000);
1030        return function () {return clearInterval(interval);};
1031      }, [email]);
1032      var cls = classnames('login-body verify-email', { loading: loading });
1033      var resend = function resend() {
1034        if (loading)
1035        return;
1036        perr('verify_email_resend_click', { email: email });
1037        etask(/*#__PURE__*/_regenerator().m(function _callee1() {return _regenerator().w(function (_context1) {while (1) switch (_context1.n) {case 0:
1038                set_loading(true);
1039                this.on('finally', function () {return set_loading(false);});_context1.n = 1;
1040                return verify_email.resend_verification_email();case 1:
1041                slide('.verify-email-container', 'left', function () {return set_resent(true);});
1042                perr('verify_email_resent', { email: email });case 2:return _context1.a(2);}}, _callee1, this);})
1043        );
1044      };
1045      return /*#__PURE__*/React.createElement("div", { className: cls }, /*#__PURE__*/
1046      React.createElement("div", { className: "login-body-container" }, /*#__PURE__*/
1047      React.createElement("div", null, /*#__PURE__*/
1048      React.createElement("div", { className: "spacer" }),
1049      !hide_title && /*#__PURE__*/React.createElement("div", { className: "title" }, /*#__PURE__*/
1050      React.createElement("strong", null, "Verify your email")), /*#__PURE__*/
1051      React.createElement("div", { className: "verify-email-container" }, /*#__PURE__*/
1052      React.createElement("div", null,
1053      email && /*#__PURE__*/React.createElement("p", null, "Verification email was sent to ", /*#__PURE__*/
1054      React.createElement("strong", null, email)
1055      ),
1056      !resent && /*#__PURE__*/React.createElement("p", null, "Check your mailbox and follow the instructions to complete the registration process."
1057
1058
1059      ),
1060      resent && /*#__PURE__*/React.createElement("p", null, "Please check your spam mailbox and look for an email with subject: ", /*#__PURE__*/
1061
1062      React.createElement("strong", null, "\"Verify your Hola email address\"")
1063      ), /*#__PURE__*/
1064      React.createElement(Button, { round: true, arrow: true, w100: true, size: "sm", cls: "resend_btn",
1065        on_click: resend, tab_index: "3", disabled: loading,
1066        caption: loading ? 'Resend...' : resent ?
1067        'Resend email again' : 'Resend email' })
1068      )
1069      ), /*#__PURE__*/
1070      React.createElement("p", { className: "contact-us" }, "Problems? Contact us at ", /*#__PURE__*/
1071      React.createElement("a", { href: "mailto:[email protected]" }, "[email protected]"
1072      )
1073      )
1074      )
1075      )
1076      );
1077    };
1078
1079    var Two_step_verif = function Two_step_verif(_ref18) {var email = _ref18.email,hide_title = _ref18.hide_title,done_cb = _ref18.done_cb;
1080      var _useState5 = useState(false),_useState6 = _slicedToArray(_useState5, 2),loading = _useState6[0],set_loading = _useState6[1];
1081      var _useState7 = useState(['', '', '', '', '', '']),_useState8 = _slicedToArray(_useState7, 2),token_o = _useState8[0],set_token_o = _useState8[1];
1082      var _useState9 = useState(''),_useState0 = _slicedToArray(_useState9, 2),error = _useState0[0],set_error = _useState0[1];
1083      var _useState1 = useState(true),_useState10 = _slicedToArray(_useState1, 2),save = _useState10[0],set_save = _useState10[1];
1084      useEffect(function () {
1085        perr('two_step_verif_view', { email: email });
1086        send_email();
1087      }, []);
1088      var send_email = function send_email() {return ajax({ method: 'POST',
1089          url: up + '/auth/two_step/send_email', no_throw: true });};
1090      var verify_token = function verify_token() {return etask(/*#__PURE__*/_regenerator().m(function _callee10() {var token, res;return _regenerator().w(function (_context10) {while (1) switch (_context10.n) {case 0:
1091                token = token_o.join('');if (
1092                token) {_context10.n = 1;break;}return _context10.a(2,
1093                void set_error('bad token'));case 1:
1094                set_loading(true);_context10.n = 2;
1095                return ajax.json({
1096                  method: 'POST',
1097                  url: up + '/auth/two_step/verify_token',
1098                  data: JSON.stringify({ token: token, save: save }),
1099                  content_type: 'application/json',
1100                  no_throw: true
1101                });case 2:res = _context10.v;
1102                set_loading(false);if (!(
1103                res && res.error)) {_context10.n = 4;break;}if (!(
1104
1105                res.message == 'token expired')) {_context10.n = 3;break;}_context10.n = 3;
1106                return send_email();case 3:
1107                perr('two_step_verif_error', { email: email, error: res.message });
1108                set_error(res.message);_context10.n = 5;break;case 4:
1109
1110
1111
1112                perr('two_step_verif_done', { email: email });
1113                done_cb(email);case 5:return _context10.a(2);}}, _callee10);})
1114
1115        );};
1116      var on_token_change_i = function on_token_change_i(i) {return function (value) {
1117          set_token_o(function (old) {
1118            var new_o = _toConsumableArray(old);
1119            if (value)
1120            {
1121              var skip = 0;
1122              for (var j = 0; j < value.length && j + i - skip < 6; j++)
1123              {
1124                if (value[j] <= '9' && value[j] >= '0')
1125                new_o[i + j - skip] = value[j];else
1126
1127                skip++;
1128              }
1129            } else
1130
1131            new_o[i] = '';
1132            return new_o;
1133          });
1134          set_error('');
1135        };};
1136      var on_key_press = function on_key_press(e) {
1137        if (e.key == 'Enter')
1138        verify_token();
1139      };
1140      var on_key_down = function on_key_down(i) {return function (e) {
1141          if (e.key == 'Backspace' && !token_o[i] && i > 0)
1142          {
1143            token_o[i - 1] = '';
1144            set_token_o(_toConsumableArray(token_o));
1145          }
1146        };};
1147      var on_save_change = function on_save_change() {return set_save(!save);};
1148      var get_error = function get_error() {
1149        var cls = 'error-message';
1150        if (error == 'bad token')
1151        return /*#__PURE__*/React.createElement("div", { className: cls }, "Invalid token");else
1152        if (error == 'token expired')
1153        {
1154          return /*#__PURE__*/React.createElement("div", { className: cls }, "Expired token. A new token has been sent"
1155          );
1156        }
1157        return /*#__PURE__*/React.createElement("div", { className: cls }, "We've encountered an error. Please try again later."
1158        );
1159      };
1160      var cls = classnames('login-body two-step-verif', { loading: loading });
1161      return /*#__PURE__*/React.createElement("div", { className: cls }, /*#__PURE__*/
1162      React.createElement("div", { className: "login-body-container" }, /*#__PURE__*/
1163      React.createElement("div", null, /*#__PURE__*/
1164      React.createElement("div", { className: "spacer" }),
1165      !hide_title && /*#__PURE__*/React.createElement("div", { className: "title title_2step" }, "2-Step Verification"
1166      ), /*#__PURE__*/
1167      React.createElement("div", { className: "two-step-verif-container" }, /*#__PURE__*/
1168      React.createElement("div", null, /*#__PURE__*/
1169      React.createElement("p", null, "We noticed you are logging in from a new location and require an extra step of verification to complete the login."
1170
1171
1172      ), /*#__PURE__*/
1173      React.createElement("p", null, "A Hola 2-Step Verification email containing a token was sent to ",
1174
1175      email, ". The token is valid for 15 minutes."
1176      ), /*#__PURE__*/
1177      React.createElement("div", { className: "two_step_fields" },
1178      token_o.map(function (ch, i) {
1179        return /*#__PURE__*/React.createElement(Input, { value: ch || '', select_by_focus: true,
1180          on_change: on_token_change_i(i), error_style: !!error,
1181          auto_focus: token_o.indexOf('') == i, center: true, no_margin: true,
1182          onKeyPress: on_key_press, key: i,
1183          onKeyDown: on_key_down(i) });
1184      })
1185      ),
1186      !!error && /*#__PURE__*/React.createElement(Error_message, { error: get_error() }), /*#__PURE__*/
1187      React.createElement(Checkbox, { checked: save, on_change: on_save_change, size: 'xs',
1188        light: true, caption: "Don't ask for codes again on this computer",
1189        cls: 'checkbox_verification' }), /*#__PURE__*/
1190      React.createElement(Button, { w100: true, round: true, arrow: true, caption: 'Verify', disabled: loading,
1191        type: 'submit', on_click: verify_token,
1192        cls: 'submit_verification' }), /*#__PURE__*/
1193      React.createElement("p", { className: "light_gray_color" }, "You may need to check your spam folder."
1194      )
1195      )
1196      ), /*#__PURE__*/
1197      React.createElement("p", { className: "contact-us" }, "Problems? Contact us at ", /*#__PURE__*/
1198      React.createElement("a", { href: "mailto:[email protected]" }, "[email protected]"
1199      )
1200      )
1201      )
1202      )
1203      );
1204    };var
1205
1206    Password_reset = /*#__PURE__*/function (_Base_login3) {
1207      function Password_reset(props) {var _this7;_classCallCheck(this, Password_reset);
1208        _this7 = _callSuper(this, Password_reset, [props]);_defineProperty(_this7, "send",
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232        function (event) {
1233          var _this = _this7;
1234          var src = 'password_reset';
1235          event.preventDefault();
1236          perr('password_reset_click', { email: _this7.state.email });
1237          etask(/*#__PURE__*/_regenerator().m(function _callee11() {var email, res, _t7;return _regenerator().w(function (_context11) {while (1) switch (_context11.p = _context11.n) {case 0:if (
1238
1239                  email = _this.validate_email(src)) {_context11.n = 1;break;}return _context11.a(2);case 1:
1240
1241                  _this.clear_error();
1242                  _this.setState({ loading: true });_context11.p = 2;_context11.n = 3;
1243
1244                  return ajax({
1245                    method: 'POST',
1246                    url: '/users/send_reset_password_mail',
1247                    data: { email: email, ajax: 1 },
1248                    json: 1
1249                  });case 3:res = _context11.v;if (!(
1250                  !res || !res.sent)) {_context11.n = 4;break;}throw (
1251                    Error('send password reset failed'));case 4:
1252                  slide('.login-body-container', 'left',
1253                  function () {return _this.setState({ loading: false, sent: true });});
1254                  perr('password_reset_sent', { email: email });_context11.n = 6;break;case 5:_context11.p = 5;_t7 = _context11.v;
1255
1256                  console.error(_t7);
1257                  _this.set_error({ field: null, type: 'unknown', err: _t7, src: src });case 6:return _context11.a(2);}}, _callee11, null, [[2, 5]]);})
1258
1259          );
1260        });_defineProperty(_this7, "on_email_change",
1261        function (event) {
1262          _this7.setState({ email: event.target.value });
1263        });_defineProperty(_this7, "back",
1264        function () {
1265          slide('.login-body-container', 'right',
1266          function () {return _this7.props.password_reset_mode(false);});
1267        });_defineProperty(_this7, "on_email_key_down",
1268        function (event) {
1269          if (event.keyCode == 13)
1270          _this7.send(event);
1271        });perr('password_reset_view');return _this7;}_inherits(Password_reset, _Base_login3);return _createClass(Password_reset, [{ key: "componentDidMount", value: function componentDidMount() {this.set_focus();} }, { key: "set_focus", value: function set_focus() {var input = this.ref.getElementsByClassName('email')[0];input.parentElement.className += ' has-focus';this.setState({ focus: true });input.focus();} }, { key: "get_error", value: function get_error() {var cls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'alert alert-danger';
1271switch (this.state.error_type) {case 'invalid_email':return /*#__PURE__*/React.createElement("div", { className: cls }, "Please enter a valid email address.");case 'unknown':return /*#__PURE__*/React.createElement("div", { className: cls }, "We've encountered an error. Please try again later.");}} }, { key: "render", value:
1272        function render() {var _this8 = this;
1273          var state = this.state;
1274          var email_group_cls = classnames('email-group', {
1275            'has-error': state.error_field == 'email',
1276            'is-empty': !state.email,
1277            'not-empty': state.email
1278          });
1279          var cls = classnames('password-reset-view',
1280          { 'check-email': state.sent });
1281          return (/*#__PURE__*/
1282            React.createElement("div", { className: cls, ref: function ref(_ref19) {return _this8.ref = _ref19;} },
1283            !state.sent && /*#__PURE__*/
1284            React.createElement("div", { className: "login-body" }, /*#__PURE__*/
1285            React.createElement("div", { className: "login-body-container" }, /*#__PURE__*/
1286            React.createElement("div", null, /*#__PURE__*/
1287            React.createElement("div", { className: "spacer" }), /*#__PURE__*/
1288            React.createElement("div", { className: "title" }, "Forgot your password?"), /*#__PURE__*/
1289            React.createElement("div", { className: "text" }, "Enter the email address associated with your account. We'll email you a link to reset your password."
1290
1291
1292            ), /*#__PURE__*/
1293            React.createElement("div", { className: email_group_cls }, /*#__PURE__*/
1294            React.createElement("input", { type: "text", name: "username", tabIndex: "1",
1295              value: state.email, onChange: this.on_email_change,
1296              onKeyDown: this.on_email_key_down,
1297              onBlur: this.on_input_blur,
1298              onClick: function onClick() {return _this8.set_focus();},
1299              className: "form-control email" }), /*#__PURE__*/
1300            React.createElement("div", { className: "label",
1301              onFocus: function onFocus() {return _this8.set_focus();},
1302              onClick: function onClick() {return _this8.set_focus();} }, "Enter your email"
1303
1304            ), /*#__PURE__*/
1305            React.createElement("div", { className: "email-overlay",
1306              onFocus: function onFocus() {return _this8.set_focus();},
1307              onClick: function onClick() {return _this8.set_focus();} }
1308            )
1309            ),
1310            state.error_type && /*#__PURE__*/
1311            React.createElement(Error_message, { error: this.get_error('error-message') }), /*#__PURE__*/
1312            React.createElement(Button, { round: true, arrow: true, w100: true, size: "sm", cls: "reset_btn",
1313              on_click: this.send, tab_index: "3", disabled: state.loading,
1314              caption: state.loading ? 'Sending...' :
1315              'Send reset password link' }), /*#__PURE__*/
1316            React.createElement("a", { className: "back", onClick: this.back }, "Back to Sign in")
1317            )
1318            )
1319            ),
1320            state.sent && /*#__PURE__*/
1321            React.createElement("div", { className: "login-body" }, /*#__PURE__*/
1322            React.createElement("div", { className: "login-body-container" }, /*#__PURE__*/
1323            React.createElement("div", null, /*#__PURE__*/
1324            React.createElement("div", { className: "spacer" }), /*#__PURE__*/
1325            React.createElement("div", { className: "check-email-container" }, /*#__PURE__*/
1326            React.createElement("div", { className: "title" }, /*#__PURE__*/
1327            React.createElement(Trans, { i18nKey: "forgot_password.email_sent.check_email",
1328              defaults: "Check your email" })
1329            ), /*#__PURE__*/
1330            React.createElement("div", { className: "text" }, /*#__PURE__*/
1331            React.createElement(Trans, { i18nKey: "forgot_password.email_sent.text",
1332              defaults: 'A message has been sent to ' +
1333              '<strong>{{email}}</strong> with a link to ' +
1334              'reset your password.',
1335              values: { email: state.email },
1336              components: { strong: /*#__PURE__*/React.createElement("strong", null) } })
1337            )
1338            ), /*#__PURE__*/
1339            React.createElement("img", { src: url2md5('/www/hola/pub/img/email.svg'),
1340              alt: "email", className: classnames('email-gfx', 'lazyload') })
1341            )
1342            )
1343            )
1344            ));
1345
1346        } }]);}(Base_login);var
1347
1348
1349    Login_container = /*#__PURE__*/function (_Pure_component2) {
1350      function Login_container(props) {var _this9;_classCallCheck(this, Login_container);
1351        _this9 = _callSuper(this, Login_container, [props]);_defineProperty(_this9, "password_reset_mode",
1352
1353
1354
1355
1356        function (mode, email) {
1357          _this9.setState({ password_reset_mode: mode, email: email });
1358        });_this9.state = { password_reset_mode: false };return _this9;}_inherits(Login_container, _Pure_component2);return _createClass(Login_container);}(Pure_component);var
1359
1360
1361    Login_modal = /*#__PURE__*/function (_Login_container2) {
1362      // static contextType = Settings_context;
1363      function Login_modal(props) {var _this0;_classCallCheck(this, Login_modal);
1364        _this0 = _callSuper(this, Login_modal, [props]);_defineProperty(_this0, "handle_resize",
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377        function () {
1378          if (!_this0.dialog)
1379          return;
1380          var overflowing =
1381          _this0.dialog.scrollHeight > document.documentElement.clientHeight;
1382          _this0.dialog.style.paddingRight = overflowing ? '16px' : '0';
1383        });_defineProperty(_this0, "detect_fb_login",
1384        function (ev) {
1385          if (ev.key == 'fb_login_ts')
1386          {
1387            _this0.close();
1388            window.location.reload();
1389          }
1390        });_defineProperty(_this0, "close",
1391        function () {
1392          if (!_this0.props.no_close)
1393          _this0.setState({ show: false });
1394          if (_this0.props.on_close)
1395          _this0.props.on_close();
1396        });_this0.state.show = true;return _this0;}_inherits(Login_modal, _Login_container2);return _createClass(Login_modal, [{ key: "componentDidMount", value: function componentDidMount() {this.dialog = document.querySelector('.modal.login-modal');this.handle_resize();window.addEventListener('resize', this.handle_resize);window.addEventListener('storage', this.detect_fb_login);} }, { key: "componentWillUnmount", value: function componentWillUnmount() {window.removeEventListener('resize', this.handle_resize);window.removeEventListener('storage', this.detect_fb_login);} }, { key: "render", value:
1397        function render() {var _this1 = this;
1398          var state = this.state,props = this.props;
1399          var on_login = props.on_login ? function () {
1400            _this1.close();
1401            props.on_login();
1402          } : null;
1403          return /*#__PURE__*/React.createElement(Settings_provider, { location: window.location,
1404            themes_add: window.global_app_themes }, /*#__PURE__*/
1405          React.createElement(Settings_context.Consumer, null,
1406          function (ctx) {return /*#__PURE__*/React.createElement(Modal, { cls: classnames('login-modal', ctx.theme.root),
1407              on_close: _this1.close, show: state.show,
1408              backdrop: props.no_bg_close ? 'static' : true }, /*#__PURE__*/
1409            React.createElement(Header, { close_button: !props.no_close }, /*#__PURE__*/
1410            React.createElement("img", { src: url2md5("/www/hola/pub/img/
1410hola_logo.svg"),
1411              alt: "hola_logo", className: classnames('logo', 'lazyload') }),
1412            props.skip && /*#__PURE__*/React.createElement("button", { className: "skip",
1413              onClick: _this1.close }, "Skip")
1414            ), /*#__PURE__*/
1415            React.createElement("div", { className: "modal-body" },
1416            state.password_reset_mode && /*#__PURE__*/
1417            React.createElement(Password_reset, { email: state.email,
1418              password_reset_mode: _this1.password_reset_mode }),
1419            !state.password_reset_mode && /*#__PURE__*/
1420            React.createElement(Login, _extends({}, props, { modal: true, on_login: on_login,
1421              password_reset_mode: _this1.password_reset_mode }))
1422            )
1423            );}
1424          )
1425          );
1426        } }]);}(Login_container);
1427
1428    E.Login_modal = Login_modal;var
1429
1430    Login_page = /*#__PURE__*/function (_Login_container3) {function Login_page() {_classCallCheck(this, Login_page);return _callSuper(this, Login_page, arguments);}_inherits(Login_page, _Login_container3);return _createClass(Login_page, [{ key: "render", value:
1431
1432        function render() {
1433          var state = this.state,props = this.props;
1434          return (/*#__PURE__*/
1435            React.createElement("div", { className: classnames('login-page', this.context.theme.root) },
1436            state.password_reset_mode && /*#__PURE__*/
1437            React.createElement(Password_reset, { email: state.email,
1438              password_reset_mode: this.password_reset_mode }),
1439            !state.password_reset_mode && /*#__PURE__*/
1440            React.createElement(Login, _extends({}, props, {
1441              password_reset_mode: this.password_reset_mode }))
1442            ));
1443
1444        } }]);}(Login_container);_defineProperty(Login_page, "contextType", Settings_context);
1445
1446    E.Login_page = Login_page;
1447
1448    var Verify_email_modal = function Verify_email_modal(_ref20) {var on_close = _ref20.on_close,email = _ref20.email;
1449      var _useState11 = useState(true),_useState12 = _slicedToArray(_useState11, 2),show = _useState12[0],set_show = _useState12[1];
1450      var _useState13 = useState(false),_useState14 = _slicedToArray(_useState13, 2),resent = _useState14[0],set_resent = _useState14[1];
1451      useEffect(function () {
1452        var interval = setInterval(function () {return etask(/*#__PURE__*/_regenerator().m(function _callee12() {var res;return _regenerator().w(function (_context12) {while (1) switch (_context12.n) {case 0:_context12.n = 1;
1453                  return $.get(up + '/is_verified');case 1:res = _context12.v;
1454                  if (res && res.verified)
1455                  {
1456                    set_show(false);
1457                    on_close(true);
1458                  }case 2:return _context12.a(2);}}, _callee12);})
1459          );}, 4000);
1460        return function () {return clearInterval(interval);};
1461      }, [email]);
1462      var close = function close() {
1463        set_show(false);
1464        on_close(false);
1465      };
1466      var resend = function resend() {return (
1467          $.post('/users/send_email_verification').done(function () {return set_resent(true);}));};
1468      return /*#__PURE__*/React.createElement(Modal, { cls: "verify-email-modal", on_close: close, show: show,
1469        backdrop: "static" }, /*#__PURE__*/
1470      React.createElement(Header, { close_button: true }, /*#__PURE__*/
1471      React.createElement("h4", null, "Verify your email address")
1472      ), /*#__PURE__*/
1473      React.createElement("div", { className: "modal-body" },
1474      resent && /*#__PURE__*/React.createElement("div", { className: "alert alert-success" }, "Verification email sent to ",
1475      email
1476      ), /*#__PURE__*/
1477      React.createElement("p", null, "We need to verify your email address ", /*#__PURE__*/
1478      React.createElement("strong", null, email), " to activate your Hola account.", /*#__PURE__*/
1479      React.createElement("br", null), /*#__PURE__*/React.createElement("br", null), "We sent you a verification email. Check your inbox and click on the link in the email to verify your address. If you can't find it, check your spam folder or click the button to resend the email."
1480
1481
1482
1483      )
1484      ), /*#__PURE__*/
1485      React.createElement("div", { className: "modal-footer" }, /*#__PURE__*/
1486      React.createElement("button", { className: "btn btn-default", onClick: close }, "Close"), /*#__PURE__*/
1487      React.createElement("button", { className: "btn btn-primary resend_email", onClick: resend }, "Resend email"
1488
1489      )
1490      )
1491      );
1492    };
1493
1494    var ensure_email_verified = function ensure_email_verified(user) {return etask(/*#__PURE__*/_regenerator().m(function _callee13() {var _this10 = this;var email, el, on_close;return _regenerator().w(function (_context13) {while (1) switch (_context13.n) {case 0:if (!(
1495              !user || user.verified || !user.emails || !user.providers &&
1496              user.provider != 'basic')) {_context13.n = 1;break;}return _context13.a(2,
1497
1498              user);case 1:
1499
1500              email = user.emails[0].value;
1501              el = document.createElement('div');
1502              el.className = 'email-verify-root';
1503              document.body.appendChild(el);
1504              on_close = function on_close(verified) {
1505                // with delay to let modal to finish the close animation
1506                setTimeout(function () {
1507                  ReactDOM.unmountComponentAtNode(el);
1508                  el.remove();
1509                }, 500);
1510                _this10["return"](verified ? user : undefined);
1511              };
1512              react_util.dom_render(/*#__PURE__*/React.createElement(Verify_email_modal, { on_close: on_close,
1513                email: email }), el);_context13.n = 2;
1514              return this.wait();case 2:return _context13.a(2);}}, _callee13, this);})
1515      );};
1516
1517    E.ensure_login = function (opt) {return etask(/*#__PURE__*/_regenerator().m(function _callee14() {var res, next, qs_o, new_url;return _regenerator().w(function (_context14) {while (1) switch (_context14.n) {case 0:_context14.n = 1;
1518              return www_util.get_user({ source: 'login_ensure',
1519                embed_hola_browser: opt.embed_hola_browser });case 1:res = _context14.v;if (!(
1520              !res.user || res.user.disable_account_changes && !opt.readonly_access)) {_context14.n = 3;break;}if (!
1521
1522              opt.guest_available) {_context14.n = 2;break;}return _context14.a(2,
1523              { hola_uid: 'guest', is_guest: true });case 2:
1524              next = opt.next || (opt.hash ?
1525              location.href.replace(/#.*$/, '') + opt.hash : location.href);
1526              if (opt.simple)
1527              {
1528                qs_o = zurl.qs_parse_url(location.href, { safe: true });
1529                if (opt.logo_disabled)
1530                qs_o.logo_disabled = 1;
1531                new_url = '/login?' + zescape.qs(_objectSpread(_objectSpread({}, qs_o), {}, { next: next }));
1532                if (opt.embed_hola_browser)
1533                {
1534                  // @ts-ignore
1535                  if (window.global_is_internet_connected)
1536                  {
1537                    // @ts-ignore
1538                    window.chrome.send('send_command', ['open_url', new_url]);
1539                  }
1540                } else
1541
1542                location.href = new_url;
1543              } else
1544
1545              {
1546                E.open_modal({ enc_url: '?' + zescape.qs({ next: next }),
1547                  signup_mode: opt.signup_mode, navbar: opt.navbar,
1548                  on_cancel: opt.on_cancel
1549                });
1550              }return _context14.a(2,
1551              null);case 3:if (
1552
1553              opt.email_verified) {_context14.n = 4;break;}return _context14.a(2,
1554              res.user);case 4:_context14.n = 5;
1555              return ensure_email_verified(res.user);case 5:return _context14.a(2, _context14.v);}}, _callee14);})
1556      );};
1557
1558    E.open_modal = function (opt) {
1559      var el = document.createElement('div');
1560      el.className = 'login-modal-root';
1561      document.getElementById('react-root').appendChild(el);
1562      var on_close = function on_close() {
1563        if (opt.on_cancel)
1564        opt.on_cancel();
1565        // with delay to let modal to finish the close animation
1566        setTimeout(function () {
1567          ReactDOM.unmountComponentAtNode(el);
1568          el.remove();
1569        }, 500);
1570      };
1571      react_util.dom_render(/*#__PURE__*/React.createElement(Login_modal, _extends({ on_close: on_close }, opt)), el);
1572    };
1573
1574    E.social_click = function (name, enc_url, cb) {
1575      enc_url = enc_url || '';
1576      if (enc_url && enc_url[0] != '?')
1577      enc_url = '?' + enc_url;
1578      var qs = zurl.qs_parse_url(location.href, { safe: true });
1579      var open_popup = !user_agent.guess().mobile && !qs.signin_redirect;
1580      var href = function href() {return up + '/auth/' + name + enc_url;};
1581      var href_popup = up + '/auth/' + name + '/popup' + enc_url;
1582      perr('social_click', { open_popup: open_popup, enc_url: enc_url });
1583      if (!open_popup)
1584      return location.href = href();
1585      var popup = www_util.open_popup_cb(href_popup, cb);
1586      if (!popup)
1587      {
1588        // firefox prevents opening popup so open it in current tab & redirect
1589        if (qs.root_url)
1590        {
1591          var qs_o = zurl.qs_parse(enc_url.substring(1), { safe: true });
1592          enc_url = '?' + zescape.qs(_objectSpread(_objectSpread({}, qs_o), {}, {
1593            next: zurl.add_proto(qs.root_url) }));
1594        }
1595        perr('social_click_fallback', { enc_url: enc_url });
1596        return top.location.href = href();
1597      }
1598    };
1599
1600    E.login_page = function (opt) {
1601      react_util.dom_render(/*#__PURE__*/React.createElement(Login_page, opt), $(opt.el)[0]);
1602    };
1603
1604    return E;
1605  });})();
1606//# sourceMappingURL=login.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.