UNPKG

vue-recheck-authorizer

Version:

A set of Vue.js components for authentication and data interaction with ReCheck Platform.

1,662 lines (1,468 loc) 87 kB
'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var vueQrcodeReader=require('vue-qrcode-reader'),aes256=require('aes256'),e2e=_interopDefault(require('recheck-clientjs-library'));function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } 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."); }// // // // // // // // // // // // // // // // var script = { name: 'card' };function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) { if (typeof shadowMode !== 'boolean') { createInjectorSSR = createInjector; createInjector = shadowMode; shadowMode = false; } // Vue.extend constructor export interop. const options = typeof script === 'function' ? script.options : script; // render functions if (template && template.render) { options.render = template.render; options.staticRenderFns = template.staticRenderFns; options._compiled = true; // functional template if (isFunctionalTemplate) { options.functional = true; } } // scopedId if (scopeId) { options._scopeId = scopeId; } let hook; if (moduleIdentifier) { // server build hook = function (context) { // 2.3 injection context = context || // cached call (this.$vnode && this.$vnode.ssrContext) || // stateful (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional // 2.2 with runInNewContext: true if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__; } // inject component styles if (style) { style.call(this, createInjectorSSR(context)); } // register component module identifier for async chunk inference if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier); } }; // used by ssr in case component is cached and beforeCreate // never gets called options._ssrRegister = hook; } else if (style) { hook = shadowMode ? function (context) { style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot)); } : function (context) { style.call(this, createInjector(context)); }; } if (hook) { if (options.functional) { // register for functional component in vue file const originalRender = options.render; options.render = function renderWithStyleInjection(h, context) { hook.call(context); return originalRender(h, context); }; } else { // inject component registration as beforeCreate hook const existing = options.beforeCreate; options.beforeCreate = existing ? [].concat(existing, hook) : [hook]; } } return script; }/* script */ var __vue_script__ = script; /* template */ var __vue_render__ = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { staticClass: "card" }, [_vm._ssrNode("<header class=\"card-header\">", "</header>", [_vm._ssrNode("<h3>", "</h3>", [_vm._t("header")], 2)]), _vm._ssrNode(" "), _vm._ssrNode("<div class=\"card-body\">", "</div>", [_vm._t("default")], 2), _vm._ssrNode(" "), _vm._ssrNode("<footer class=\"card-footer\">", "</footer>", [_vm._t("footer")], 2)], 2); }; var __vue_staticRenderFns__ = []; /* style */ var __vue_inject_styles__ = undefined; /* scoped */ var __vue_scope_id__ = undefined; /* module identifier */ var __vue_module_identifier__ = "data-v-246f1520"; /* functional template */ var __vue_is_functional_template__ = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__ = /*#__PURE__*/normalizeComponent({ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined);// // // // // // // // var script$1 = { name: 'alert', data: function data() { return { visible: false, message: '', color: '', timeout: 2000 }; }, methods: { hideAlert: function hideAlert() { this.visible = false; } }, mounted: function mounted() { var _this = this; this.$root.$on('alertOn', function (message, color, timeout) { _this.visible = true; _this.message = message; _this.timeout = timeout ? timeout : 2000; _this.color = color === 'green' ? '#89CA02' : '#ff0000'; setTimeout(function () { return _this.hideAlert(); }, _this.timeout); }); this.$root.$on('alertOff', function () { _this.visible = false; }); } };/* script */ var __vue_script__$1 = script$1; /* template */ var __vue_render__$1 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('transition', [_c('div', { staticClass: "alert", class: [_vm.visible ? 'is-visible' : ''], style: { backgroundColor: _vm.color } }, [_c('p', [_vm._v(_vm._s(_vm.message))])])]); }; var __vue_staticRenderFns__$1 = []; /* style */ var __vue_inject_styles__$1 = undefined; /* scoped */ var __vue_scope_id__$1 = undefined; /* module identifier */ var __vue_module_identifier__$1 = "data-v-529086d3"; /* functional template */ var __vue_is_functional_template__$1 = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__$1 = /*#__PURE__*/normalizeComponent({ render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, __vue_script__$1, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, false, undefined, undefined, undefined);// // // // var script$2 = { name: 'loader', mounted: function mounted() { var _this = this; this.$root.$on('loaderOn', function () { _this.loading = true; }); this.$root.$on('loaderOff', function () { _this.loading = false; }); }, data: function data() { return { loading: false }; } };/* script */ var __vue_script__$2 = script$2; /* template */ var __vue_render__$2 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _vm.loading ? _c('div', { staticClass: "loader" }, []) : _vm._e(); }; var __vue_staticRenderFns__$2 = []; /* style */ var __vue_inject_styles__$2 = undefined; /* scoped */ var __vue_scope_id__$2 = undefined; /* module identifier */ var __vue_module_identifier__$2 = "data-v-7e749dc2"; /* functional template */ var __vue_is_functional_template__$2 = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__$2 = /*#__PURE__*/normalizeComponent({ render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 }, __vue_inject_styles__$2, __vue_script__$2, __vue_scope_id__$2, __vue_is_functional_template__$2, __vue_module_identifier__$2, false, undefined, undefined, undefined);// // // // // // // // // // // // // // // // // // // // // // // // // // var script$3 = { name: 'info-card', props: { isPinned: { type: Boolean }, error: { type: String } }, methods: { goToIdentity: function goToIdentity() { this.$router.push('/identity'); } } };/* script */ var __vue_script__$3 = script$3; /* template */ var __vue_render__$3 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { directives: [{ name: "show", rawName: "v-show", value: !_vm.isPinned || _vm.error.length > 0, expression: "!isPinned || error.length > 0" }], staticClass: "card" }, [_vm._ssrNode("<header class=\"card-header\">" + (_vm.error.length > 0 ? "<h3>Problem with camera</h3>" : !_vm.isPinned ? "<h3>Identity Required</h3>" : "<!---->") + "</header> <div class=\"card-body\">" + (!_vm.isPinned ? "<p>\n To start using the camera you have to setup a new digital identity.\n </p>" : _vm.error.length > 0 ? "<p>\n The camera could not be initialized. Please make sure you permit usage\n of your phone camera by setting Camera Permission to state &quot;Allowed&quot;.\n You can do so by selecting &quot;Site Settings&quot; from the browser settings\n menu or by clicking the site security icon located left of the address\n bar.\n </p>" : "<!---->") + "</div> " + (!_vm.isPinned ? "<footer class=\"card-footer\"><button type=\"button\" class=\"btn link\">\n Identity Settings\n </button></footer>" : "<!---->"))]); }; var __vue_staticRenderFns__$3 = []; /* style */ var __vue_inject_styles__$3 = undefined; /* scoped */ var __vue_scope_id__$3 = undefined; /* module identifier */ var __vue_module_identifier__$3 = "data-v-7432ae96"; /* functional template */ var __vue_is_functional_template__$3 = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__$3 = /*#__PURE__*/normalizeComponent({ render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 }, __vue_inject_styles__$3, __vue_script__$3, __vue_scope_id__$3, __vue_is_functional_template__$3, __vue_module_identifier__$3, false, undefined, undefined, undefined);var loggerConfig = { mode: process.env.VUE_APP_LOGGER_MODE || 'production' }; function logger() { if (loggerConfig.mode === 'debug') { var args = Array.from(arguments); args.unshift('[DEBUG][' + new Date().toUTCString() + ']' + ': '); console.log.apply(console, args); } } function saveAppLogs() { var logs = localStorage.getItem('app-logs'); var date = new Date().toUTCString(); for (var _len = arguments.length, data = new Array(_len), _key = 0; _key < _len; _key++) { data[_key] = arguments[_key]; } if (logs === null) { var lastLog = JSON.stringify([{ date: date, log: data }], null, 2); localStorage.setItem('app-logs', lastLog); return; } logs = JSON.parse(logs); logs.push({ date: date, log: data.flat(Infinity) }); logs = JSON.stringify(logs, null, 2); localStorage.setItem('app-logs', logs); return; }// var script$4 = { name: 'input-modal', props: { isVisible: { type: Boolean, default: false }, inputLabel: { type: String, default: 'Please enter your Passcode' }, inputType: { type: String, default: 'password', validator: function validator(value) { return ['hidden', 'text', 'password'].indexOf(value) !== -1; } }, inputValue: { type: String }, pinConfirmValue: { type: String }, rememberPin: { type: Boolean, default: false }, checkboxValue: { type: Boolean, default: false }, inputPlaceholder: { type: String, default: '' }, inputPlaceholder2: { type: String, default: '' }, showPinConfirmInput: { type: Boolean, default: false }, modalFormId: { type: String, default: '' } }, methods: { updateInput1: function updateInput1(value) { this.$emit('update:inputValue', value); }, updateInput2: function updateInput2(value) { this.$emit('update:confirmPinCode', value); }, updateCheckbox: function updateCheckbox(newValue) { this.$emit('update:checkboxValue', newValue); } }, // Watch when modal is active focus on first input watch: { isVisible: function isVisible(isActive) { this.$root.$emit("pinmodal-status", isActive); if (isActive) { setTimeout(function () { var modal = document.querySelector(".modal.input.active"); if (modal.classList.contains("active")) { modal.querySelector("input").focus(); } }, 100); } } } };/* script */ var __vue_script__$4 = script$4; /* template */ var __vue_render__$4 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { directives: [{ name: "show", rawName: "v-show", value: _vm.isVisible, expression: "isVisible" }], staticClass: "modal input", class: [_vm.isVisible ? 'active' : ''], attrs: { "role": "dialog", "tabindex": "-1", "aria-modal": "true" } }, [_vm._ssrNode("<div class=\"modal-content\">", "</div>", [_vm._ssrNode("<header class=\"modal-header\">", "</header>", [_vm._ssrNode("<h3>", "</h3>", [_vm._t("header")], 2)]), _vm._ssrNode(" <div class=\"modal-body\"><form" + _vm._ssrAttr("id", _vm.modalFormId) + "><div class=\"form-group\"><label class=\"inputLabel\"" + _vm._ssrStyle(null, null, { display: !!_vm.inputLabel ? '' : 'none' }) + ">" + _vm._ssrEscape("\n " + _vm._s(_vm.inputLabel) + "\n ") + "<input" + _vm._ssrAttr("type", _vm.inputType) + _vm._ssrAttr("placeholder", _vm.inputPlaceholder) + _vm._ssrAttr("value", _vm.inputValue) + "></label> " + (_vm.showPinConfirmInput ? "<label class=\"inputLabel\"><input" + _vm._ssrAttr("type", _vm.inputType) + _vm._ssrAttr("placeholder", _vm.inputPlaceholder2) + _vm._ssrAttr("value", _vm.pinConfirmValue) + "></label>" : "<!---->") + " " + ((_vm.inputType === 'password' && _vm.rememberPin === true ? true : false) ? "<div class=\"savePin\"><label class=\"checkboxLabel\">\n Remember your Passcode\n <input type=\"checkbox\"" + _vm._ssrAttr("value", _vm.checkboxValue) + "></label></div>" : "<!---->") + "</div></form></div> "), _vm._ssrNode("<footer class=\"modal-footer\">", "</footer>", [_vm._t("footer")], 2)], 2)]); }; var __vue_staticRenderFns__$4 = []; /* style */ var __vue_inject_styles__$4 = undefined; /* scoped */ var __vue_scope_id__$4 = undefined; /* module identifier */ var __vue_module_identifier__$4 = "data-v-407d2a40"; /* functional template */ var __vue_is_functional_template__$4 = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__$4 = /*#__PURE__*/normalizeComponent({ render: __vue_render__$4, staticRenderFns: __vue_staticRenderFns__$4 }, __vue_inject_styles__$4, __vue_script__$4, __vue_scope_id__$4, __vue_is_functional_template__$4, __vue_module_identifier__$4, false, undefined, undefined, undefined);// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // var script$5 = { name: 'confirm-modal', props: { isVisible: { type: Boolean, default: false }, isButtonVisible: { type: Boolean, default: false }, title: { type: String, default: '' }, message: { type: String, default: '' }, agreementText: { type: String, default: '' }, resolve: null, reject: null }, methods: { cancelModal: function cancelModal() { this.resolve(false); this.$emit('update:isVisible', false); }, confirmModal: function confirmModal() { this.resolve(true); this.$emit('update:isVisible', false); } } };/* script */ var __vue_script__$5 = script$5; /* template */ var __vue_render__$5 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { directives: [{ name: "show", rawName: "v-show", value: _vm.isVisible, expression: "isVisible" }], staticClass: "modal confirm", attrs: { "role": "dialog", "tabindex": "-1", "aria-modal": "true" } }, [_vm._ssrNode("<div class=\"modal-content\">", "</div>", [_vm._ssrNode("<header class=\"modal-header\">", "</header>", [_vm._ssrNode("<h3>", "</h3>", [_vm._t("header", [_vm._v(_vm._s(_vm.title))])], 2)]), _vm._ssrNode(" "), _vm._ssrNode("<div class=\"modal-body\">", "</div>", [_vm._t("body", [_c('p', { directives: [{ name: "show", rawName: "v-show", value: !!_vm.message, expression: "!!message" }], domProps: { "innerHTML": _vm._s(_vm.message) } }), _vm._v(" "), _vm.agreementText ? _c('p', { staticClass: "terms", domProps: { "innerHTML": _vm._s(_vm.agreementText) } }) : _vm._e()])], 2), _vm._ssrNode(" "), _vm._ssrNode("<footer class=\"modal-footer\">", "</footer>", [_vm._t("footer", [_c('button', { staticClass: "btn", attrs: { "type": "button" }, on: { "click": _vm.cancelModal } }, [_vm._v("\n " + _vm._s(!_vm.isButtonVisible ? 'Close' : 'Cancel') + "\n ")]), _vm._v(" "), _vm.isButtonVisible ? _c('button', { staticClass: "btn primary", attrs: { "type": "button" }, on: { "click": _vm.confirmModal } }, [_vm._v("\n Confirm\n ")]) : _vm._e()])], 2)], 2)]); }; var __vue_staticRenderFns__$5 = []; /* style */ var __vue_inject_styles__$5 = undefined; /* scoped */ var __vue_scope_id__$5 = undefined; /* module identifier */ var __vue_module_identifier__$5 = "data-v-26b01449"; /* functional template */ var __vue_is_functional_template__$5 = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ var __vue_component__$5 = /*#__PURE__*/normalizeComponent({ render: __vue_render__$5, staticRenderFns: __vue_staticRenderFns__$5 }, __vue_inject_styles__$5, __vue_script__$5, __vue_scope_id__$5, __vue_is_functional_template__$5, __vue_module_identifier__$5, false, undefined, undefined, undefined);var wallet = null; var keyPair = null; var apiUrl = process.env.VUE_APP_API_URL && process.env.VUE_APP_API_URL !== "" ? process.env.VUE_APP_API_URL : ""; var network = process.env.VUE_APP_NETWORK && process.env.VUE_APP_NETWORK !== "" ? process.env.VUE_APP_NETWORK : "ae"; logger(process.env); var chain = { setInstance: function setInstance() { var newInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "ReCheckAPP"; e2e.setDefaultRequestId(newInstance); }, setURLandNetwork: function setURLandNetwork(apiURL, apiNetwork) { if (apiURL !== "") { apiUrl = apiURL; } if (apiNetwork !== "") { network = apiNetwork; } var token = localStorage.getItem('lastRtnToken'); if (token) { return e2e.init(apiUrl, network, token); } e2e.init(apiUrl, network); }, init: function () { var _init = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(password) { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: logger('init'); e2e.init(apiUrl, network); if (localStorage.walletAe1) { _context.next = 13; break; } logger('Wallet does not exist yet. Will create one.'); _context.next = 6; return e2e.newKeyPair(null); case 6: keyPair = _context.sent; wallet = JSON.stringify(keyPair); logger('Wallet created with account', keyPair); this.saveWallet(keyPair, password); logger('Wallet saved.'); _context.next = 14; break; case 13: logger('wallet account exists'); case 14: return _context.abrupt("return", wallet); case 15: case "end": return _context.stop(); } } }, _callee, this); })); function init(_x) { return _init.apply(this, arguments); } return init; }(), pinned: function pinned() { var privateKey = localStorage.walletAe1; if (typeof privateKey === 'undefined') return false; logger('pinned: privateKey =', privateKey); var storedSha3 = localStorage.walletSha3Ae; logger('pinned: storedSha3 =', storedSha3); logger('pinned: typeof storedSha3 === undefined =', typeof storedSha3 === 'undefined'); var computedSha3 = e2e.getHash(privateKey); logger('pinned: computedSha3 =', computedSha3); logger('pinned: (computedSha3 !== storedSha3) =', computedSha3 !== storedSha3); if (typeof storedSha3 === 'undefined') return false; return computedSha3 !== storedSha3; }, checkPassword: function checkPassword(password) { logger('checkPassword password: ', password); return e2e.getHash(aes256.decrypt(password, localStorage.walletAe1)) === localStorage.walletSha3Ae; }, saveWallet: function saveWallet(keyPair, password) { var keyPairStr = JSON.stringify(keyPair); logger('saveWallet with password', password); localStorage.walletSha3Ae = e2e.getHash(keyPairStr); var encrypted = aes256.encrypt(password, keyPairStr); logger('encrypted private key', encrypted); localStorage.walletAe1 = encrypted; // web3.eth.accounts.wallet.accounts[0].privateKey // encrypt wallet localStorage.publicAddress = keyPair.address; this.resetWallet(); }, resetWallet: function resetWallet() { wallet = null; keyPair = null; }, loadWallet: function loadWallet(password) { if (!this.checkPassword(password)) { return 'authError'; } var encrypted = localStorage.walletAe1; if (typeof encrypted === 'undefined') return encrypted; var account = aes256.decrypt(password, encrypted); // decrypt encrypted this.resetWallet(); logger('loaded private key: ' + encrypted); logger("decrypted", account); wallet = account; keyPair = JSON.parse(account); // TODO: Remove after a time when all users updated their ID's if (keyPair.address.startsWith("ak_") || keyPair.publicKey.startsWith("ak_")) { keyPair.address = keyPair.address.replace('ak_', 're_'); keyPair.publicKey = keyPair.publicKey.replace('ak_', 're_'); var keyPairStr = JSON.stringify(keyPair); wallet = keyPairStr; var newKeyPairEncrypted = aes256.encrypt(password, keyPairStr); localStorage.walletSha3Ae = e2e.getHash(keyPairStr); localStorage.walletAe1 = newKeyPairEncrypted; } else { localStorage.walletSha3Ae = e2e.getHash(account); } localStorage.publicAddress = keyPair.address; return true; }, resetPIN: function resetPIN(oldPass, newPass) { if (!this.checkPassword(oldPass)) { return false; } var encrypted = localStorage.walletAe1; if (typeof encrypted === 'undefined') return encrypted; var account = aes256.decrypt(oldPass, encrypted); // decrypt encrypted logger('loaded private key: ' + encrypted); wallet = account; keyPair = JSON.parse(account); var keyPairStr = JSON.stringify(keyPair); logger('saveWallet with password', newPass); localStorage.walletSha3Ae = e2e.getHash(keyPairStr); encrypted = aes256.encrypt(newPass, keyPairStr); logger('encrypted private key', encrypted); localStorage.walletAe1 = encrypted; // web3.eth.accounts.wallet.accounts[0].privateKey // encrypt wallet localStorage.publicAddress = keyPair.address; this.resetWallet(); return true; }, restoreIdentityAtStart: function () { var _restoreIdentityAtStart = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(password, phrase) { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: this.resetWallet(); _context2.next = 3; return e2e.newKeyPair(phrase); case 3: keyPair = _context2.sent; wallet = JSON.stringify(keyPair); this.saveWallet(keyPair, password); return _context2.abrupt("return", true); case 7: case "end": return _context2.stop(); } } }, _callee2, this); })); function restoreIdentityAtStart(_x2, _x3) { return _restoreIdentityAtStart.apply(this, arguments); } return restoreIdentityAtStart; }(), importPrivateKey: function () { var _importPrivateKey = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(password, phrase) { return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (this.checkPassword(password)) { _context3.next = 2; break; } return _context3.abrupt("return", 'authError'); case 2: _context3.next = 4; return this.restoreIdentityAtStart(password, phrase); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function importPrivateKey(_x4, _x5) { return _importPrivateKey.apply(this, arguments); } return importPrivateKey; }(), doLogin: function () { var _doLogin = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(password, _challenge, callback) { var challenge, firebaseToken, deviceInfo, token; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: logger('doLogin password: ', password); if (this.checkPassword(password)) { _context4.next = 6; break; } callback('authError'); return _context4.abrupt("return", 'authError'); case 6: this.loadWallet(password); case 7: challenge = _challenge.substring(_challenge.lastIndexOf('/') + 1, _challenge.length); logger('doLogin challenge: ', challenge); _context4.prev = 9; firebaseToken = localStorage.getItem("firebaseToken") || 'notoken'; logger("Firebase Device Token", firebaseToken); deviceInfo = localStorage.getItem("deviceInfo") || 'unknown'; logger("Login Device Version", deviceInfo); _context4.next = 16; return e2e.loginWithChallenge(challenge, keyPair, firebaseToken, deviceInfo); case 16: token = _context4.sent; localStorage.lastRtnToken = token; logger(token); callback(false); _context4.next = 27; break; case 22: _context4.prev = 22; _context4.t0 = _context4["catch"](9); saveAppLogs(_context4.t0); console.error(_context4.t0); callback(_context4.t0); case 27: this.resetWallet(); return _context4.abrupt("return", true); case 29: case "end": return _context4.stop(); } } }, _callee4, this, [[9, 22]]); })); function doLogin(_x6, _x7, _x8) { return _doLogin.apply(this, arguments); } return doLogin; }(), doExecSelection: function () { var _doExecSelection = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(password, _selection, callback) { var execResultObj; return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: logger('pass', password); if (this.checkPassword(password)) { _context5.next = 6; break; } callback('authError'); return _context5.abrupt("return", 'authError'); case 6: this.loadWallet(password); case 7: _context5.prev = 7; _context5.next = 10; return e2e.execSelection(_selection, keyPair); case 10: execResultObj = _context5.sent; logger(execResultObj); callback(false); _context5.next = 20; break; case 15: _context5.prev = 15; _context5.t0 = _context5["catch"](7); saveAppLogs(_context5.t0); console.error(_context5.t0); callback(_context5.t0); case 20: this.resetWallet(); return _context5.abrupt("return", true); case 22: case "end": return _context5.stop(); } } }, _callee5, this, [[7, 15]]); })); function doExecSelection(_x9, _x10, _x11) { return _doExecSelection.apply(this, arguments); } return doExecSelection; }(), getChainLog: function getChainLog() { if (localStorage.getItem('app-logs')) { return localStorage.getItem('app-logs'); } return false; }, privateKey: function privateKey() { return wallet; }, wallet: function wallet() { return keyPair; } };function getOrigin(string) { var url = new URL(string); if (url.pathname.includes('/chain/')) { return url.origin + '/chain'; } return url.origin; } function isValidURL(str) { var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator return !!pattern.test(str); }var script$6 = { name: 'RecheckScanner', components: { QrcodeStream: vueQrcodeReader.QrcodeStream, Card: __vue_component__, Alert: __vue_component__$1, Loader: __vue_component__$2, InfoCard: __vue_component__$3, InputModal: __vue_component__$4, ConfirmModal: __vue_component__$5 }, props: { handledByComponent: { type: Boolean, default: true, required: true }, useIntegratedCamera: { type: Boolean, default: true }, classes: { type: String, default: '' }, appRequestId: { type: String, default: 'ReCheckAPP' }, isCameraOmitted: { type: Boolean, default: false }, scanLink: { type: String, default: '' }, agreementText: '' }, data: function data() { return { error: '', pinned: false, initialized: false, decodedString: '', componentHandled: this.handledByComponent, omitCamera: this.isCameraOmitted, scanUrl: this.scanLink, apiEnv: process.env.VUE_APP_API_URL && process.env.VUE_APP_API_URL !== '' ? process.env.VUE_APP_API_URL : '', apiNetwork: process.env.VUE_APP_NETWORK && process.env.VUE_APP_NETWORK !== '' ? process.env.VUE_APP_NETWORK : 'ae', publicAddress: '', automation: false, showPinModal: false, pinCase: 'login', pinCode: '', isButtonVisible: true, agreementTexts: this.agreementText, showConfirmModal: false, title: '', message: '', resolve: null, reject: null }; }, mounted: function mounted() { var _this = this; this.pinned = chain.pinned(); chain.setInstance(this.appRequestId); if (this.pinned) { this.publicAddress = localStorage.publicAddress; } if (!this.$router) { alert("Hey you don't have Vue Router!"); } if (this.apiEnv !== '' && this.apiNetwork !== '') { chain.setURLandNetwork(this.apiEnv, this.apiNetwork); } else { var savedApiUrl = localStorage.getItem('apiUrl'); if (savedApiUrl && savedApiUrl !== null) { chain.setURLandNetwork(savedApiUrl, this.apiNetwork); } } if (this.pinned && !this.omitCamera) { this.setupCamera(); } if (this.pinned && this.omitCamera && this.scanUrl !== '') { this.onDecode(this.scanUrl); setTimeout(function () { _this.setupCamera(); }, 1500); } }, methods: { onInit: function onInit(promise) { var _this2 = this; return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _this2.$root.$emit('loaderOn'); _context.prev = 1; _context.next = 4; return promise; case 4: _this2.initialized = true; _context.next = 10; break; case 7: _context.prev = 7; _context.t0 = _context["catch"](1); if (_context.t0.name === 'NotAllowedError') { _this2.error = 'ERROR: you need to grant camera access permisson'; } else if (_context.t0.name === 'NotFoundError') { _this2.error = 'ERROR: no camera on this device'; } else if (_context.t0.name === 'NotSupportedError') { _this2.error = 'ERROR: secure context required (HTTPS, localhost)'; } else if (_context.t0.name === 'NotReadableError') { _this2.error = 'ERROR: is the camera already in use?'; } else if (_context.t0.name === 'OverconstrainedError') { _this2.error = 'ERROR: installed cameras are not suitable'; } else if (_context.t0.name === 'StreamApiNotSupportedError') { _this2.error = 'ERROR: Stream API is not supported in this browser'; } case 10: _context.prev = 10; _this2.$root.$emit('loaderOff'); return _context.finish(10); case 13: case "end": return _context.stop(); } } }, _callee, null, [[1, 7, 10, 13]]); }))(); }, onDecode: function onDecode(decodedString) { this.$emit('is-scanned', true); this.decodedString = decodedString; if (decodedString) { var origin = getOrigin(decodedString); logger('hasOrigin: ', origin); if (origin && !origin.includes('verify')) { localStorage.setItem('apiUrl', origin); chain.setURLandNetwork(origin, this.apiNetwork); } } if (decodedString.indexOf('/login') > 0) { this.pinCase = 'login'; if (!this.componentHandled) { this.$emit('qr-decode', this.pinCase); } else { this.handleDecode(this.pinCase, 'Login Request', 'You are about to login. Are you sure?'); } } else if (decodedString.indexOf('sh:') > 0) { this.decodedString = decodedString.substring(decodedString.length - 69); this.pinCase = 'share'; if (!this.componentHandled) { this.$emit('qr-decode', this.pinCase); } else { this.handleDecode(this.pinCase, 'Document Share Request', 'You are about to share a document. Are you sure?'); } } else if (decodedString.indexOf('se:') > 0) { this.decodedString = decodedString.substring(decodedString.length - 69); this.pinCase = 'share'; if (!this.componentHandled) { this.$emit('qr-decode', this.pinCase); } else { this.handleDecode(this.pinCase, 'Document Email Share Request', 'You are about to share a document by email. Are you sure?'); } } else if (decodedString.indexOf('sg:') > 0) { this.decodedString = decodedString.substring(decodedString.length - 69); this.pinCase = 'sign'; if (!this.componentHandled) { this.$emit('qr-decode', this.pinCase); } else { this.handleDecode(this.pinCase, 'File Sign Request', 'You are about to sign a file. Are you sure?'); } } else if (decodedString.indexOf('re:') > 0) { this.decodedString = decodedString.substring(decodedString.length - 69); this.pinCase = 'decrypt'; if (!this.componentHandled) { this.$emit('qr-decode', this.pinCase); } else { this.handleDecode(this.pinCase, 'Document Decrypt Request', 'You are about to decrypt a document. Are you sure?'); } } else if (decodedString.indexOf('verify') > 0) { this.isButtonVisible = false; var verifyMessage = "\n Please click the link to verify certificate content. <br />\n <a href=\"".concat(decodedString, "\" target=\"_blank\" rel=\"noopener noreferrer\">").concat(decodedString.slice(0, 56) + '...', "</a>\n "); this.open('ReCheck Verifier URL', verifyMessage); } else if (decodedString) { this.isButtonVisible = false; var messageContent = isValidURL(decodedString) ? "Unrecognized QR Code content: <br /> <a href=\"".concat(decodedString, "\" target=\"_blank\" rel=\"noopener noreferrer\">").concat(decodedString.slice(0, 56) + '...', "</a>") : "Unrecognized QR Code content: <br /> ".concat(decodedString); this.open('Unrecognized QR Code', messageContent); } }, doLogin: function doLogin() { var _this3 = this; this.$root.$emit('loaderOn'); chain.doLogin(this.pinCode, this.decodedString, function (err) { _this3.$root.$emit('loaderOff'); if (!err) { _this3.$root.$emit('alertOn', 'Login data sent successfully.', 'green'); } else { if (err === 'authError') { _this3.$root.$emit('alertOn', 'Passcode mismatch!', 'red'); } else { _this3.$root.$emit('alertOn', 'Unable to send login data', 'red'); } } _this3.$emit('scan-result', err); setTimeout(function () { return _this3.setupCamera(); }, 2000); }); this.pinCode = ''; this.pinCase = ''; }, doExecSelection: function doExecSelection() { var _this4 = this; this.$root.$emit('loaderOn'); chain.doExecSelection(this.pinCode, this.decodedString, function (err) { _this4.$root.$emit('loaderOff'); if (!err) { if (_this4.pinCase === 'sign') { _this4.$root.$emit('alertOn', 'Signed data successfully.', 'green'); } else if (_this4.pinCase === 'share') { _this4.$root.$emit('alertOn', 'Shared data successfully.', 'green'); } else if (_this4.pinCase === 'decrypt') { _this4.$root.$emit('alertOn', 'Decrypted data successfully.', 'green'); } } else { if (err === 'authError') { _this4.$root.$emit('alertOn', 'Passcode mismatch!', 'red'); } else { if (_this4.pinCase === 'sign') { _this4.$root.$emit('alertOn', 'Failed to sign data.', 'red'); } else if (_this4.pinCase === 'share') { _this4.$root.$emit('alertOn', 'Failed to share data.', 'red'); } else if (_this4.pinCase === 'decrypt') { _this4.$root.$emit('alertOn', 'Failed to decrypt data.', 'red'); } } } _this4.$emit('scan-result', err); setTimeout(function () { return _this4.setupCamera(); }, 2000); }); this.pinCase = ''; this.pinCode = ''; }, open: function open(title, message) { var _this5 = this; this.showConfirmModal = true; this.title = title; this.message = message; return new Promise(function (resolve, reject) { _this5.resolve = resolve; _this5.reject = reject; }); }, confirmPin: function confirmPin() { if (this.checkPin(this.pinCode)) { if (chain.checkPassword(this.pinCode)) { if (this.pinCase === 'login') { this.doLogin(); } else if (['share', 'decrypt', 'sign'].includes(this.pinCase)) { this.doExecSelection(); } this.showPinModal = false; } else { this.$root.$emit('alertOn', 'Passcode is incorrect!', 'red'); this.pinCode = ''; } } else { this.$root.$emit('alertOn', 'Passcode is incorrect!', 'red'); this.pinCode = ''; } this.isButtonVisible = true; }, cancelPin: function cancelPin() { var _this6 = this; this.pinCode = ''; this.showPinModal = false; this.isButtonVisible = true; setTimeout(function () { return _this6.setupCamera(); }, 300); }, handleDecode: function handleDecode(pinCase, title, message) { var _this7 = this; this.open(title, message).then(function (resolved) { if (resolved) { if (chain.pinned()) { _this7.showPinModal = true; } else { if (pinCase === 'login') { _this7.doLogin(); } else { _this7.confirmPin(); } } } else { setTimeout(function () { return _this7.setupCamera(); }, 300); } }).catch(function () { return _this7.$root.$emit('loaderOff'); }); }, setupCamera: function setupCamera() { var _this8 = this; if (!this.useIntegratedCamera && window && window.QRScanner) { window.QRScanner.show(); window.QRScanner.scan(function (err, contents) { if (err) { logger('scan error: ', err); } else { logger('scan result: ', contents); _this8.onDecode(contents); } }); } }, checkPin: function checkPin(pin) { if (pin === '') { return false; } else { if (pin === undefined) { return false; } else { if (pin.length < 4) { return false; } else { return true; } } } } } };function createInjectorSSR(context) { if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__; } if (!context) return () => { }; if (!('styles' in context)) { context._styles = context._styles || {}; Object.defineProperty(context, 'styles', { enumerable: true, get: () => context._renderStyles(context._styles) }); context._renderStyles = context._renderStyles || renderStyles; } return (id, style) => addStyle(id, style, context); } function addStyle(id, css, context) { const group = css.media || 'default' ; const style = context._styles[group] || (context._styles[group] = { ids: [], css: '' }); if (!style.ids.includes(id)) { style.media = css.media; style.ids.push(id); let code = css.source; style.css += code + '\n'; } } function renderStyles(styles) { let css = ''; for (const key in styles) { const style = styles[key]; css += '<style data-vue-ssr-id="' + Array.from(style.ids).join(' ') + '"' + (style.media ? ' media="' + style.media + '"' : '') + '>' + style.css + '</style>'; } return css; }/* script */ var __vue_script__$6 = script$6; /* template */ var __vue_render__$6 = function __vue_render__() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { staticClass: "scanner", class: _vm.classes }, [_c('alert'), _vm._ssrNode(" "), _c('loader'), _vm._ssrNode(" "), _vm.useIntegratedCamera && _vm.pinned && !_vm.error.length > 0 ? _vm._ssrNode("<div class=\"camera\">", "</div>", [_c('qrcode-stream', { on: { "init": _vm.onInit, "decode": _vm.onDecode } })], 1) : _vm._e(), _vm._ssrNode(" "), _c('info-card', { attrs: { "isPinned": _vm.pinned, "error": _vm.error } }), _vm._ssrNode(" "), _c('confirm-modal', { attrs: { "isVisible": _vm.showConfirmModal, "title": _vm.title, "message": _vm.message, "resolve": _vm.resolve, "reject": _vm.reject, "isButtonVisible": _vm.isButtonVisible, "agreementText": _vm.agreementTexts }, on: { "update:isVisible": function updateIsVisible($event) { _vm.showConfirmModal = $event; }, "update:is-visible": function updateIsVisible($event) { _vm.showConfirmModal = $event; } } }), _vm._ssrNode(" "), _c('input-modal', { attrs: { "isVisible": _vm.showPinModal, "rememberPin": false, "modalFormId": "pinModalForm", "inputValue": _vm.pinCode, "checkboxValue": _vm.automation }, on: { "update:inputValue": function updateInputValue($event) { _vm.pinCode = $event; }, "update:input-value": function updateInputValue($event) { _vm.pinCode = $event; }, "update:checkboxValue": function updateCheckboxValue($event) { _vm.automation = $event; }, "update:checkbox-value": function updateCheckboxValue($event) { _vm.automation = $event; } }, scopedSlots: _vm._u([{ key: "header", fn: function fn() { return [_vm._v("\n Passcode\n "), _c('span', [_vm._v("\n " + _vm._s(_vm.publicAddress !== '' ? 'for ' + _vm.publicAddress.replace(_vm.publicAddress.substring(7, _vm.publicAddress.length - 4), '...') : '') + "\n ")])]; }, proxy: true }, { key: "footer", fn: function fn() { return [_c('button', { staticClass: "btn", attrs: { "type": "button" }, on: { "click": _vm.cancelPin } }, [_vm._v("Cancel")]), _vm._v(" "), _c('button', { staticClass: "btn", attrs: { "type": "submit", "form": "pinModalForm" }, on: { "click": _vm.confirmPin, "keyup": function keyup($event) { if (!$event.type.indexOf('key') && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) { return null; } return _vm.confirmPin($event); } } }, [_vm._v("\n Confirm\n ")])]; }, proxy: true }]) })], 2); }; var __vue_staticRenderFns__$6 = []; /* style */ var __vue_inject_styles__$6 = function __vue_inject_styles__(inject) { if (!inject) return; inject("data-v-079dd477_0", { source: "*{box-sizing:border-box}h3,h4,p{margin-top:0;margin-bottom:0}.card{font-family:inherit;font-size:inherit;display:block;background-color:#fefefe;border:1px solid #ccc;margin:24px auto;width:100%;max-width:640px;border-radius: