fix export wallet
This commit is contained in:
parent
60f371fe6d
commit
696c5bbd18
3 changed files with 97 additions and 54 deletions
|
|
@ -15,6 +15,54 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function prepareWallet(cb) {
|
||||||
|
if ($scope.password) return cb($scope.password);
|
||||||
|
|
||||||
|
walletService.prepare(wallet, function(err, password) {
|
||||||
|
if (err) {
|
||||||
|
popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||||
|
return cb();
|
||||||
|
}
|
||||||
|
$scope.password = password;
|
||||||
|
|
||||||
|
walletService.getEncodedWalletInfo(wallet, $scope.password, function(err, code) {
|
||||||
|
if (err) {
|
||||||
|
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not decrypt private key'));
|
||||||
|
return cb(password);
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.file.value = false;
|
||||||
|
|
||||||
|
if (!code)
|
||||||
|
$scope.formData.supported = false;
|
||||||
|
else {
|
||||||
|
$scope.formData.supported = true;
|
||||||
|
$scope.formData.exportWalletInfo = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
$timeout(function() {
|
||||||
|
$scope.$apply();
|
||||||
|
});
|
||||||
|
return cb(password);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.generateQrCode = function() {
|
||||||
|
if ($scope.formData.exportWalletInfo) {
|
||||||
|
$scope.file.value = false;
|
||||||
|
$timeout(function() {
|
||||||
|
$scope.$apply();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareWallet(function(password) {
|
||||||
|
if (!password) return;
|
||||||
|
$scope.password = password;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
var init = function() {
|
var init = function() {
|
||||||
$scope.formData = {};
|
$scope.formData = {};
|
||||||
$scope.isEncrypted = wallet.isPrivKeyEncrypted();
|
$scope.isEncrypted = wallet.isPrivKeyEncrypted();
|
||||||
|
|
@ -25,23 +73,6 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
$scope.wallet = wallet;
|
$scope.wallet = wallet;
|
||||||
$scope.canSign = wallet.canSign();
|
$scope.canSign = wallet.canSign();
|
||||||
|
|
||||||
walletService.getEncodedWalletInfo(wallet, function(err, code) {
|
|
||||||
if (err || !code) {
|
|
||||||
$log.warn(err);
|
|
||||||
return $ionicHistory.goBack();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!code)
|
|
||||||
$scope.formData.supported = false;
|
|
||||||
else {
|
|
||||||
$scope.formData.supported = true;
|
|
||||||
$scope.formData.exportWalletInfo = code;
|
|
||||||
}
|
|
||||||
|
|
||||||
$timeout(function() {
|
|
||||||
$scope.$apply();
|
|
||||||
}, 1);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -67,23 +98,28 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.downloadWalletBackup = function() {
|
$scope.downloadWalletBackup = function() {
|
||||||
$scope.getAddressbook(function(err, localAddressBook) {
|
prepareWallet(function(password) {
|
||||||
if (err) {
|
if (!password) return;
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var opts = {
|
|
||||||
noSign: $scope.formData.noSignEnabled,
|
|
||||||
addressBook: localAddressBook
|
|
||||||
};
|
|
||||||
|
|
||||||
backupService.walletDownload($scope.formData.password, opts, function(err) {
|
$scope.getAddressbook(function(err, localAddressBook) {
|
||||||
if (err) {
|
if (err) {
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$ionicHistory.removeBackView();
|
var opts = {
|
||||||
$state.go('tabs.home');
|
noSign: $scope.formData.noSignEnabled,
|
||||||
|
addressBook: localAddressBook,
|
||||||
|
password: password
|
||||||
|
};
|
||||||
|
|
||||||
|
backupService.walletDownload($scope.formData.password, opts, function(err) {
|
||||||
|
if (err) {
|
||||||
|
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$ionicHistory.removeBackView();
|
||||||
|
$state.go('tabs.home');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -171,6 +207,11 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
|
|
||||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||||
init();
|
init();
|
||||||
|
$scope.file = {
|
||||||
|
value: true
|
||||||
|
};
|
||||||
|
$scope.formData.exportWalletInfo = null;
|
||||||
|
$scope.password = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -869,10 +869,9 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
if (!root.isEncrypted(wallet)) return cb();
|
if (!root.isEncrypted(wallet)) return cb();
|
||||||
|
|
||||||
askPassword(wallet.name, gettext('Enter Spending Password'), function(password) {
|
askPassword(wallet.name, gettext('Enter Spending Password'), function(password) {
|
||||||
if (!password) return cb('no password');
|
if (!password) return cb('No password');
|
||||||
if (!wallet.checkPassword(password)) return cb('wrong password');
|
if (!wallet.checkPassword(password)) return cb('Wrong password');
|
||||||
|
|
||||||
wallet.credentials.decryptPrivateKey(password);
|
|
||||||
return cb(null, password);
|
return cb(null, password);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -990,8 +989,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
root.getEncodedWalletInfo = function(wallet, cb) {
|
root.getEncodedWalletInfo = function(wallet, password, cb) {
|
||||||
|
|
||||||
var derivationPath = wallet.credentials.getBaseAddressDerivationPath();
|
var derivationPath = wallet.credentials.getBaseAddressDerivationPath();
|
||||||
var encodingType = {
|
var encodingType = {
|
||||||
mnemonic: 1,
|
mnemonic: 1,
|
||||||
|
|
@ -1004,23 +1002,21 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
if (wallet.credentials.derivationStrategy != 'BIP44' || !wallet.canSign())
|
if (wallet.credentials.derivationStrategy != 'BIP44' || !wallet.canSign())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
root.getKeys(wallet, function(err, keys) {
|
var keys = root.getKeysWithPassword(wallet, password);
|
||||||
if (err || !keys) return cb(err);
|
|
||||||
|
|
||||||
if (keys.mnemonic) {
|
if (keys.mnemonic) {
|
||||||
info = {
|
info = {
|
||||||
type: encodingType.mnemonic,
|
type: encodingType.mnemonic,
|
||||||
data: keys.mnemonic,
|
data: keys.mnemonic,
|
||||||
}
|
|
||||||
} else {
|
|
||||||
info = {
|
|
||||||
type: encodingType.xpriv,
|
|
||||||
data: keys.xPrivKey
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return cb(null, info.type + '|' + info.data + '|' + wallet.credentials.network.toLowerCase() + '|' + derivationPath + '|' + (wallet.credentials.mnemonicHasPassphrase));
|
} else {
|
||||||
|
info = {
|
||||||
|
type: encodingType.xpriv,
|
||||||
|
data: keys.xPrivKey
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
});
|
return cb(null, info.type + '|' + info.data + '|' + wallet.credentials.network.toLowerCase() + '|' + derivationPath + '|' + (wallet.credentials.mnemonicHasPassphrase));
|
||||||
};
|
};
|
||||||
|
|
||||||
root.setTouchId = function(wallet, enabled, cb) {
|
root.setTouchId = function(wallet, enabled, cb) {
|
||||||
|
|
@ -1055,6 +1051,12 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
root.getKeysWithPassword = function(wallet, password) {
|
||||||
|
try {
|
||||||
|
return wallet.getKeys(password);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
root.getViewStatus = function(wallet, txp) {
|
root.getViewStatus = function(wallet, txp) {
|
||||||
var status = txp.status;
|
var status = txp.status;
|
||||||
var type;
|
var type;
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,17 @@
|
||||||
</ion-nav-back-button>
|
</ion-nav-back-button>
|
||||||
</ion-nav-bar>
|
</ion-nav-bar>
|
||||||
|
|
||||||
<ion-content ng-init="file = true">
|
<ion-content>
|
||||||
<div class="row text-center top-tabs">
|
<div class="row text-center">
|
||||||
<div class="col" ng-click="file = true" ng-style="file && {'border-bottom-style': 'solid'}">
|
<div class="col" ng-click="file.value = true" ng-style="file.value && {'border-bottom': '2px solid'}">
|
||||||
<span class="" translate>File/Text</span>
|
<span class="" translate>File/Text</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col" ng-click="file = false" ng-style="!file && {'border-bottom-style': 'solid'}">
|
<div class="col" ng-click="generateQrCode();" ng-style="!file.value && {'border-bottom': '2px solid'}">
|
||||||
<span class="" translate>QR Code</span>
|
<span class="" translate>QR Code</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-include="'views/tab-export-file.html'" ng-if="file"></div>
|
<div ng-include="'views/tab-export-file.html'" ng-if="file.value"></div>
|
||||||
<div ng-include="'views/tab-export-qrCode.html'" ng-if="!file"></div>
|
<div ng-include="'views/tab-export-qrCode.html'" ng-if="!file.value"></div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-view>
|
</ion-view>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue