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
JavaScript
'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 "Allowed".\n You can do so by selecting "Site Settings" 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: