diff --git a/index.html b/index.html
index 972943ea6..9994794a6 100644
--- a/index.html
+++ b/index.html
@@ -187,7 +187,12 @@
diff --git a/js/controllers/backup.js b/js/controllers/backup.js
index 5c468fe24..5ea246b3a 100644
--- a/js/controllers/backup.js
+++ b/js/controllers/backup.js
@@ -8,7 +8,7 @@ angular.module('copay.backup').controller('BackupController',
// TODO: get the real encrypted wallet.
var _getEncryptedWallet = function() {
- var wallet = JSON.stringify($rootScope.wallet.toObj());
+ var wallet = $rootScope.wallet.toEncryptedObj();
return wallet;
};
@@ -40,11 +40,10 @@ angular.module('copay.backup').controller('BackupController',
} else {
if (email && email !== '') {
var body = _getEncryptedWallet();
- console.log(body);
var subject = 'Copay Backup';
var href = 'mailto:' + email + '?'
+ 'subject=' + subject + '&'
- + 'body=' + 'body'; // TODO: Uncomment this when get the real encrypted wallet.
+ + 'body=' + body;
var newWin = $window.open(href, '_blank', 'scrollbars=yes,resizable=yes,width=10,height=10');
diff --git a/js/controllers/import.js b/js/controllers/import.js
index 43c3376c2..d04fd54fc 100644
--- a/js/controllers/import.js
+++ b/js/controllers/import.js
@@ -1,22 +1,33 @@
'use strict';
angular.module('copay.import').controller('ImportController',
- function($scope, $rootScope, walletFactory, controllerUtils) {
+ function($scope, $rootScope, walletFactory, controllerUtils, Passphrase) {
$scope.title = 'Import a backup';
- $scope.getFile = function() {
- var reader = new FileReader();
+ var reader = new FileReader();
+ var _importBackup = function(encryptedObj) {
+ var passphrase = Passphrase.getBase64($scope.password);
+ $rootScope.wallet = walletFactory.fromEncryptedObj(encryptedObj, passphrase);
+ controllerUtils.startNetwork($rootScope.wallet);
+ };
+ $scope.getFile = function() {
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
- var obj = JSON.parse(evt.target.result);
- $rootScope.wallet = walletFactory.fromObj(obj);
-
- controllerUtils.startNetwork($rootScope.wallet);
+ var encryptedObj = evt.target.result;
+ _importBackup(encryptedObj);
}
};
+ };
- reader.readAsBinaryString($scope.file);
+ $scope.import = function() {
+ if ($scope.password) {
+ if ($scope.backupText) {
+ _importBackup($scope.backupText);
+ } else {
+ reader.readAsBinaryString($scope.file);
+ }
+ }
};
});
diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js
index 7cfc6033d..cec091c8c 100644
--- a/js/models/core/Wallet.js
+++ b/js/models/core/Wallet.js
@@ -268,6 +268,11 @@ Wallet.fromObj = function(o, storage, network, blockchain) {
return w;
};
+Wallet.prototype.toEncryptedObj = function() {
+ var walletObj = this.toObj();
+ return this.storage.export(walletObj);
+};
+
Wallet.prototype.sendTxProposals = function(recipients) {
this.log('### SENDING txProposals TO:', recipients || 'All', this.txProposals);
diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js
index a757c340a..8ffbc8403 100644
--- a/js/models/core/WalletFactory.js
+++ b/js/models/core/WalletFactory.js
@@ -68,6 +68,12 @@ WalletFactory.prototype.fromObj = function(obj) {
return w;
};
+WalletFactory.prototype.fromEncryptedObj = function(base64, password) {
+ this.storage._setPassphrase(password);
+ var walletObj = this.storage.import(base64);
+ return this.fromObj(walletObj);
+};
+
WalletFactory.prototype.read = function(walletId) {
if (! this._checkRead(walletId))
return false;
diff --git a/js/models/storage/LocalEncrypted.js b/js/models/storage/LocalEncrypted.js
index 14a05ad12..cfeb1d2c5 100644
--- a/js/models/storage/LocalEncrypted.js
+++ b/js/models/storage/LocalEncrypted.js
@@ -157,4 +157,14 @@ Storage.prototype.clearAll = function() {
localStorage.clear();
};
+Storage.prototype.export = function(obj) {
+ var encryptedObj = this._encryptObj(obj);
+ return encryptedObj;
+};
+
+Storage.prototype.import = function(base64) {
+ var decryptedObj = this._decryptObj(base64);
+ return decryptedObj;
+};
+
module.exports = require('soop')(Storage);