vue-recheck-authorizer
Version:
A set of Vue.js components for authentication and data interaction with ReCheck Platform.
246 lines (215 loc) • 7.41 kB
JavaScript
import { encrypt, decrypt } from 'aes256';
import e2e from 'recheck-clientjs-library';
import { logger, saveAppLogs } from '../utils/logger';
// eslint-disable-next-line
var wallet = null;
var keyPair = null;
let apiUrl = process.env.VUE_APP_API_URL && process.env.VUE_APP_API_URL !== ""
? process.env.VUE_APP_API_URL
: "";
let network = process.env.VUE_APP_NETWORK && process.env.VUE_APP_NETWORK !== ""
? process.env.VUE_APP_NETWORK
: "ae";
logger(process.env)
const chain = {
setInstance: function (newInstance = "ReCheckAPP") {
e2e.setDefaultRequestId(newInstance)
},
setURLandNetwork: function (apiURL, apiNetwork) {
if (apiURL !== "") {
apiUrl = apiURL;
}
if (apiNetwork !== "") {
network = apiNetwork;
}
const token = localStorage.getItem('lastRtnToken');
if (token) {
return e2e.init(apiUrl, network, token);
}
e2e.init(apiUrl, network);
},
init: async function (password) {
logger('init');
e2e.init(apiUrl, network);
if (!localStorage.walletAe1) {
logger('Wallet does not exist yet. Will create one.');
keyPair = await e2e.newKeyPair(null);
wallet = JSON.stringify(keyPair);
logger('Wallet created with account', keyPair);
this.saveWallet(keyPair, password);
logger('Wallet saved.');
} else {
logger('wallet account exists');
}
return wallet;
},
pinned: function () {
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 (password) {
logger('checkPassword password: ', password);
return (
e2e.getHash(decrypt(password, localStorage.walletAe1)) ===
localStorage.walletSha3Ae
);
},
saveWallet: function (keyPair, password) {
let keyPairStr = JSON.stringify(keyPair);
logger('saveWallet with password', password);
localStorage.walletSha3Ae = e2e.getHash(keyPairStr);
var encrypted = 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 () {
wallet = null;
keyPair = null;
},
loadWallet: function (password) {
if (!this.checkPassword(password)) {
return 'authError';
}
var encrypted = localStorage.walletAe1;
if (typeof encrypted === 'undefined') return encrypted;
var account = 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_');
const keyPairStr = JSON.stringify(keyPair);
wallet = keyPairStr;
let newKeyPairEncrypted = encrypt(password, keyPairStr);
localStorage.walletSha3Ae = e2e.getHash(keyPairStr);
localStorage.walletAe1 = newKeyPairEncrypted;
} else {
localStorage.walletSha3Ae = e2e.getHash(account);
}
localStorage.publicAddress = keyPair.address;
return true;
},
resetPIN(oldPass, newPass) {
if (!this.checkPassword(oldPass)) {
return false;
}
let encrypted = localStorage.walletAe1;
if (typeof encrypted === 'undefined') return encrypted;
let account = decrypt(oldPass, encrypted); // decrypt encrypted
logger('loaded private key: ' + encrypted);
wallet = account;
keyPair = JSON.parse(account);
let keyPairStr = JSON.stringify(keyPair);
logger('saveWallet with password', newPass);
localStorage.walletSha3Ae = e2e.getHash(keyPairStr);
encrypted = 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: async function (password, phrase) {
this.resetWallet()
keyPair = await e2e.newKeyPair(phrase)
wallet = JSON.stringify(keyPair)
this.saveWallet(keyPair, password)
return true
},
importPrivateKey: async function (password, phrase) {
if (!this.checkPassword(password)) {
return 'authError'
}
await this.restoreIdentityAtStart(password, phrase)
},
doLogin: async function (password, _challenge, callback) {
logger('doLogin password: ', password);
if (!this.checkPassword(password)) {
callback('authError');
return 'authError';
} else {
this.loadWallet(password);
}
let challenge = _challenge.substring(
_challenge.lastIndexOf('/') + 1,
_challenge.length,
);
logger('doLogin challenge: ', challenge);
try {
let firebaseToken = localStorage.getItem("firebaseToken") || 'notoken';
logger("Firebase Device Token", firebaseToken);
let deviceInfo = localStorage.getItem("deviceInfo") || 'unknown';
logger("Login Device Version", deviceInfo);
let token = await e2e.loginWithChallenge(challenge, keyPair, firebaseToken, deviceInfo);
localStorage.lastRtnToken = token;
logger(token);
callback(false);
} catch (error) {
saveAppLogs(error);
console.error(error);
callback(error);
}
this.resetWallet();
return true;
},
doExecSelection: async function (password, _selection, callback) {
logger('pass', password);
if (!this.checkPassword(password)) {
callback('authError');
return 'authError';
} else {
this.loadWallet(password);
}
try {
// let firebaseToken = localStorage.getItem("firebaseToken") || 'notoken';
// logger("Firebase Device Token", firebaseToken);
// let deviceInfo = localStorage.getItem("deviceInfo") || 'unknown';
// logger("Login Device Version", deviceInfo)
// const loginRes = await e2e.login(keyPair, firebaseToken, deviceInfo);
let execResultObj = await e2e.execSelection(_selection, keyPair);
logger(execResultObj);
callback(false);
} catch (error) {
saveAppLogs(error);
console.error(error);
callback(error);
}
this.resetWallet();
return true;
},
getChainLog: function () {
if (localStorage.getItem('app-logs')) {
return localStorage.getItem('app-logs');
}
return false;
},
privateKey: function () {
return wallet;
},
wallet() {
return keyPair;
},
};
export default chain
export { chain }