Wallet/src/js/services/backupService.js
Matias Alejo Garcia d851f62c7f add wallet alias
2015-05-14 10:39:22 -03:00

83 lines
2.3 KiB
JavaScript

'use strict';
angular.module('copayApp.services')
.factory('backupService', function backupServiceFactory($log, $timeout, profileService, sjcl) {
var root = {};
var _download = function(ew, filename, cb) {
var NewBlob = function(data, datatype) {
var out;
try {
out = new Blob([data], {
type: datatype
});
$log.debug("case 1");
} catch (e) {
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name == 'TypeError' && window.BlobBuilder) {
var bb = new BlobBuilder();
bb.append(data);
out = bb.getBlob(datatype);
$log.debug("case 2");
} else if (e.name == "InvalidStateError") {
// InvalidStateError (tested on FF13 WinXP)
out = new Blob([data], {
type: datatype
});
$log.debug("case 3");
} else {
// We're screwed, blob constructor unsupported entirely
$log.debug("Errore");
}
}
return out;
};
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var blob = new NewBlob(ew, 'text/plain;charset=utf-8');
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
$timeout(function() {
window.URL.revokeObjectURL(url);
}, 250);
return cb();
};
root.walletExport = function(password) {
if (!password) {
return null;
}
var fc = profileService.focusedClient;
try {
var b = fc.export({});
var e = sjcl.encrypt(password, b, {
iter: 10000
});
return e;
} catch (err) {
$log.debug('Error exporting wallet: ', err);
return null;
};
};
root.walletDownload = function(password, cb) {
var fc = profileService.focusedClient;
var ew = root.walletExport(password);
if (!ew) return cb('Could not create backup');
var walletName = (fc.alias || '') + (fc.alias ? '-' : '') + fc.credentials.walletName;
var filename = walletName + '-Copaybackup.aes.json';
_download(ew, filename, cb)
};
return root;
});