log into first decrypted SEA account

This commit is contained in:
Mark Nadal 2018-07-22 09:52:38 -07:00
parent e0e846113e
commit 0593bd1b7e
2 changed files with 7 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "gun", "name": "gun",
"version": "0.9.9996", "version": "0.9.9997",
"description": "A realtime, decentralized, offline-first, graph data synchronization engine.", "description": "A realtime, decentralized, offline-first, graph data synchronization engine.",
"main": "index.js", "main": "index.js",
"browser": "gun.min.js", "browser": "gun.min.js",

11
sea.js
View File

@ -716,7 +716,7 @@
let err let err
// then attempt to log into each one until we find ours! // then attempt to log into each one until we find ours!
// (if two users have the same username AND the same password... that would be bad) // (if two users have the same username AND the same password... that would be bad)
const [ user ] = await Promise.all(aliases.map(async ({ at: at, pub: pub }) => { const users = await Promise.all(aliases.map(async ({ at: at, pub: pub }, i) => {
// attempt to PBKDF2 extend the password with the salt. (Verifying the signature gives us the plain text salt.) // attempt to PBKDF2 extend the password with the salt. (Verifying the signature gives us the plain text salt.)
const auth = parseProps(at.put.auth) const auth = parseProps(at.put.auth)
// NOTE: aliasquery uses `gun.get` which internally SEA.read verifies the data for us, so we do not need to re-verify it here. // NOTE: aliasquery uses `gun.get` which internally SEA.read verifies the data for us, so we do not need to re-verify it here.
@ -731,7 +731,7 @@
const salt = auth.salt const salt = auth.salt
const sea = await SEA.decrypt(auth.ek, proof) const sea = await SEA.decrypt(auth.ek, proof)
if (!sea) { if (!sea) {
err = 'Failed to decrypt secret!' err = 'Failed to decrypt secret! ' + i +'/'+aliases.length;
return return
} }
// now we have AES decrypted the private key, from when we encrypted it with the proof at registration. // now we have AES decrypted the private key, from when we encrypted it with the proof at registration.
@ -754,7 +754,7 @@
throw { err } throw { err }
} }
})) }))
var user = Gun.list.map(users, function(acc){ if(acc){ return acc } })
if (!user) { if (!user) {
throw { err: err || 'Public key does not exist!' } throw { err: err || 'Public key does not exist!' }
} }
@ -1111,7 +1111,7 @@
var u; var u;
// Well first we have to actually create a user. That is what this function does. // Well first we have to actually create a user. That is what this function does.
User.prototype.create = function(username, pass, cb){ User.prototype.create = function(username, pass, cb, opt){
// TODO: Needs to be cleaned up!!! // TODO: Needs to be cleaned up!!!
const gunRoot = this.back(-1) const gunRoot = this.back(-1)
var gun = this, cat = (gun._); var gun = this, cat = (gun._);
@ -1121,12 +1121,13 @@
return gun; return gun;
} }
cat.ing = true; cat.ing = true;
opt = opt || {};
var resolve = function(){}, reject = resolve; var resolve = function(){}, reject = resolve;
// Because more than 1 user might have the same username, we treat the alias as a list of those users. // Because more than 1 user might have the same username, we treat the alias as a list of those users.
if(cb){ resolve = reject = cb } if(cb){ resolve = reject = cb }
gunRoot.get('~@'+username).get(async (at, ev) => { gunRoot.get('~@'+username).get(async (at, ev) => {
ev.off() ev.off()
if (at.put) { if (at.put && !opt.already) {
// If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed. // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.
const err = 'User already created!' const err = 'User already created!'
Gun.log(err) Gun.log(err)