From 06efb05830cd09b79847fd1c878ed0fddd6a6eb1 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 24 Jan 2020 16:52:58 -0400 Subject: [PATCH 1/3] export mysea --- services/gunDB/Mediator/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/gunDB/Mediator/index.js b/services/gunDB/Mediator/index.js index ef1b3d98..32ac03d5 100644 --- a/services/gunDB/Mediator/index.js +++ b/services/gunDB/Mediator/index.js @@ -1043,5 +1043,6 @@ module.exports = { register, instantiateGun, getGun, - getUser + getUser, + mySEA } From 0a88f19f75f34f1dcb4e08c1eb52de837d6d0e52 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 24 Jan 2020 16:53:45 -0400 Subject: [PATCH 2/3] seed backup action --- services/gunDB/contact-api/actions.js | 32 ++++++++++++++++++++++++++- services/gunDB/contact-api/key.js | 2 ++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/services/gunDB/contact-api/actions.js b/services/gunDB/contact-api/actions.js index bef61340..1bb3d347 100644 --- a/services/gunDB/contact-api/actions.js +++ b/services/gunDB/contact-api/actions.js @@ -1022,6 +1022,35 @@ const setBio = (bio, user) => }) }) +/** + * @param {string[]} mnemonicPhrase + * @param {UserGUNNode} user + * @param {ISEA} SEA + * @returns {Promise} + */ +const saveSeedBackup = async (mnemonicPhrase, user, SEA) => { + if ( + !Array.isArray(mnemonicPhrase) || + mnemonicPhrase.some(word => typeof word !== 'string') || + mnemonicPhrase.length === 0 + ) { + throw new TypeError('expected mnemonicPhrase to be an string array') + } + + const mySecret = await SEA.secret(user._.sea.epub, user._.sea) + const encryptedSeed = await SEA.encrypt(mnemonicPhrase.join(' '), mySecret) + + return new Promise((res, rej) => { + user.get(Key.SEED_BACKUP).put(encryptedSeed, ack => { + if (ack.err) { + rej(ack.err) + } else { + res() + } + }) + }) +} + module.exports = { INITIAL_MSG, __createOutgoingFeed, @@ -1037,5 +1066,6 @@ module.exports = { setDisplayName, sendPayment, generateOrderAddress, - setBio + setBio, + saveSeedBackup } diff --git a/services/gunDB/contact-api/key.js b/services/gunDB/contact-api/key.js index 2cec102c..0902a454 100644 --- a/services/gunDB/contact-api/key.js +++ b/services/gunDB/contact-api/key.js @@ -32,3 +32,5 @@ exports.ORDER_NODES = 'orderNodes' exports.ORDER_TO_RESPONSE = 'orderToResponse' exports.BIO = 'bio' + +exports.SEED_BACKUP = 'seedBackup' From d75bf2708e02c62808e6c0bd82b77f38ac0bcca8 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 24 Jan 2020 17:03:05 -0400 Subject: [PATCH 3/3] save seed backup at sign up --- src/routes.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index 143492ab..4dbfb316 100644 --- a/src/routes.js +++ b/src/routes.js @@ -14,6 +14,7 @@ const auth = require("../services/auth/auth"); const FS = require("../utils/fs"); const LightningServices = require("../utils/lightningServices"); const GunDB = require("../services/gunDB/Mediator"); +const GunActions = require("../services/gunDB/contact-api/actions") const { unprotectedRoutes } = require("../utils/protectedRoutes"); const DEFAULT_MAX_NUM_ROUTES_TO_QUERY = 10; @@ -440,7 +441,13 @@ module.exports = ( // Register user before creating wallet const publicKey = await GunDB.register(alias, password); - + + await GunActions.saveSeedBackup( + mnemonicPhrase, + GunDB.getUser(), + GunDB.mySEA + ) + walletUnlocker.initWallet( walletArgs, async (initWalletErr, initWalletResponse) => {