create/join using mnemonic working

This commit is contained in:
Matias Alejo Garcia 2015-09-02 15:56:00 -03:00
commit 452d9e1bda
9 changed files with 187 additions and 151 deletions

View file

@ -84,6 +84,21 @@ angular.module('copayApp.services')
case 'WALLET_NOT_FOUND':
body = gettextCatalog.getString('Wallet not found');
break;
case 'SERVER_COMPROMISED':
body = gettextCatalog.getString('Server response could not be verified');
break;
case 'WALLET_DOES_NOT_EXIST':
body = gettextCatalog.getString('This wallet is not registed at the wallet service. Please create it from "Create Wallet" using adding for backup words');
break;
case 'INVALID_BACKUP':
body = gettextCatalog.getString('Backup words are invalid');
break;
default:
$log.warn('Unknown error type:', err.code);
body = err.code + ':' + err.message;
break;
}
}

View file

@ -146,7 +146,7 @@ angular.module('copayApp.services')
return cb(err);
}
if (!profile) {
// Migration??
// Migration??
storageService.tryToMigrate(function(err, migratedProfile) {
if (err) return cb(err);
if (!migratedProfile)
@ -165,52 +165,14 @@ angular.module('copayApp.services')
});
};
root._seedWallet = function(walletClient, network) {
var lang = uxLanguage.getCurrentLanguage();
console.log('[profileService.js.170]'); //TODO
try {
walletClient.seedFromRandomWithMnemonic(network, null, lang);
console.log('[profileService.js.174]'); //TODO
} catch (e) {
$log.info('Error creating seed: ' + e.message);
if (e.message.indexOf('language') > 0) {
$log.info('Using default language for mnemonic');
walletClient.seedFromRandomWithMnemonic(network);
} else {
throw (e);
}
}
};
root._createNewProfile = function(opts, cb) {
if (opts.noWallet) {
return cb(null, Profile.create());
}
root._seedWallet = function(opts, cb) {
opts = opts || {};
var walletClient = bwcService.getClient();
root._seedWallet(walletClient, 'livenet');
walletClient.createWallet('Personal Wallet', 'me', 1, 1, {
network: 'livenet'
}, function(err) {
if (err) return bwsError.cb(err, gettext('Error creating wallet'), cb);
var p = Profile.create({
credentials: [JSON.parse(walletClient.export())],
});
return cb(null, p);
})
};
root.createWallet = function(opts, cb) {
var walletClient = bwcService.getClient();
$log.debug('Creating Wallet:', opts);
var network = opts.networkName || 'livenet';
if (opts.mnemonic) {
try {
walletClient.seedFromMnemonic(opts.mnemonic);
walletClient.seedFromMnemonic(opts.mnemonic, opts.passphrase, network);
} catch (ex) {
$log.info(ex);
return cb(gettext('Could not create: Invalid Backup Words'));
@ -221,41 +183,69 @@ console.log('[profileService.js.174]'); //TODO
} catch (ex) {
return cb(gettext('Could not create using the specified extended public key'));
}
} else {
var lang = uxLanguage.getCurrentLanguage();
try {
walletClient.seedFromRandomWithMnemonic(network, opts.passphrase, lang);
} catch (e) {
$log.info('Error creating seed: ' + e.message);
if (e.message.indexOf('language') > 0) {
$log.info('Using default language for mnemonic');
walletClient.seedFromRandomWithMnemonic(network, opts.passphrase);
} else {
return cb(e);
}
}
}
root._seedWallet(walletClient, opts.networkName);
return cb(null, walletClient);
};
walletClient.createWallet(opts.name, opts.myName || 'me', opts.m, opts.n, {
network: opts.networkName
}, function(err, secret) {
if (err) return bwsError.cb(err, gettext('Error creating wallet'), cb);
root._createNewProfile = function(opts, cb) {
root.profile.credentials.push(JSON.parse(walletClient.export()));
root.setWalletClients();
if (opts.noWallet) {
return cb(null, Profile.create());
}
root.setAndStoreFocus(walletClient.credentials.walletId, function() {
storageService.storeProfile(root.profile, function(err) {
return cb(null, secret);
root._seedWallet({}, function(err, walletClient) {
if (err) return cb(err);
walletClient.createWallet('Personal Wallet', 'me', 1, 1, {
network: 'livenet'
}, function(err) {
if (err) return bwsError.cb(err, gettext('Error creating wallet'), cb);
var p = Profile.create({
credentials: [JSON.parse(walletClient.export())],
});
return cb(null, p);
});
})
};
root.createWallet = function(opts, cb) {
$log.debug('Creating Wallet:', opts);
root._seedWallet(opts, function(err, walletClient) {
if (err) return cb(err);
walletClient.createWallet(opts.name, opts.myName || 'me', opts.m, opts.n, {
network: opts.networkName
}, function(err, secret) {
if (err) return bwsError.cb(err, gettext('Error creating wallet'), cb);
root.profile.credentials.push(JSON.parse(walletClient.export()));
root.setWalletClients();
root.setAndStoreFocus(walletClient.credentials.walletId, function() {
storageService.storeProfile(root.profile, function(err) {
return cb(null, secret);
});
});
})
});
};
root.joinWallet = function(opts, cb) {
var walletClient = bwcService.getClient();
$log.debug('Joining Wallet:', opts);
if (opts.extendedPrivateKey) {
try {
walletClient.seedFromExtendedPrivateKey(opts.extendedPrivateKey);
} catch (ex) {
return cb(gettext('Could not join using the specified extended private key'));
}
} else if (opts.extendedPublicKey) {
try {
walletClient.seedFromExternalWalletPublicKey(opts.extendedPublicKey, opts.externalSource, opts.externalIndex);
} catch (ex) {
return cb(gettext('Could not create using the specified extended public key'));
}
}
try {
var walletData = this.getUtils().fromSecret(opts.secret);
@ -269,18 +259,24 @@ console.log('[profileService.js.174]'); //TODO
} catch (ex) {
return cb(gettext('Bad wallet invitation'));
}
opts.networkName = walletData.network;
$log.debug('Joining Wallet:', opts);
walletClient.joinWallet(opts.secret, opts.myName || 'me', function(err) {
if (err) return bwsError.cb(err, gettext('Could not join wallet'), cb);
root._seedWallet(opts, function(err, walletClient) {
if (err) return cb(err);
root.profile.credentials.push(JSON.parse(walletClient.export()));
root.setWalletClients();
walletClient.joinWallet(opts.secret, opts.myName || 'me', function(err) {
if (err) return bwsError.cb(err, gettext('Could not join wallet'), cb);
root.setAndStoreFocus(walletClient.credentials.walletId, function() {
storageService.storeProfile(root.profile, function(err) {
return cb(null, opts.secret);
root.profile.credentials.push(JSON.parse(walletClient.export()));
root.setWalletClients();
root.setAndStoreFocus(walletClient.credentials.walletId, function() {
storageService.storeProfile(root.profile, function(err) {
return cb();
});
});
});
})
})
};
@ -351,9 +347,13 @@ console.log('[profileService.js.174]'); //TODO
var walletClient = bwcService.getClient();
$log.debug('Importing Wallet Mnemonic');
console.log('[profileService.js.340]', words, opts); //TODO
walletClient.importFromMnemonic(words, {
network: opts.networkName,
passphrase: opts.passphrase,
}, function(err) {
console.log('[profileService.js.342:err:]',err); //TODO
console.log('[profileService.js.341:walletClient:]',walletClient.credentials.credentials); //TODO
if (err)
return bwsError.cb(err, gettext('Could not import'), cb);
@ -361,21 +361,6 @@ console.log('[profileService.js.174]'); //TODO
});
};
root.importWalletMnemonicEx = function(words, opts, cb) {
var walletClient = bwcService.getClient();
$log.debug('Importing Wallet Mnemonic EX', opts);
walletClient.importFromMnemonic(words, opts,
function(err) {
if (err)
return bwsError.cb(err, gettext('Could not import'), cb);
root._addWalletClient(walletClient, cb);
});
};
root.create = function(opts, cb) {
$log.info('Creating profile');
configService.get(function(err) {