Abstracted creating user versus updating user

This commit is contained in:
Dan Seripap 2016-02-25 12:55:02 -05:00
parent d0d47c098a
commit fc63e1b2b9

View File

@ -101,6 +101,31 @@ export default class Darkwire {
return importKeysPromises; return importKeysPromises;
} }
createUser(resolve, reject, username) {
Promise.all([
this._cryptoUtil.createPrimaryKeys()
])
.then((data) => {
this._keys = {
public: data[0].publicKey,
private: data[0].privateKey
};
return Promise.all([
this._cryptoUtil.exportKey(data[0].publicKey, 'spki')
]);
})
.then((exportedKeys) => {
if (!exportedKeys) {
return reject('Could not create a user session');
}
return resolve({
username: username,
publicKey: exportedKeys[0]
});
});
}
checkSessionUsernames(username) { checkSessionUsernames(username) {
let matches = _.find(this._users, (users) => { let matches = _.find(this._users, (users) => {
return username.toLowerCase() === users.username.toLowerCase(); return username.toLowerCase() === users.username.toLowerCase();
@ -122,32 +147,19 @@ export default class Darkwire {
let user = null; let user = null;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// Check if user is here
if (username) { if (username) {
user = this.getUserById(this._myUserId); user = this.getUserById(this._myUserId);
} }
if (!user) { if (user) {
Promise.all([ // User exists and is attempting to change username
this._cryptoUtil.createPrimaryKeys() // Check if anyone else is using the requested username
])
.then((data) => {
this._keys = {
public: data[0].publicKey,
private: data[0].privateKey
};
return Promise.all([
this._cryptoUtil.exportKey(data[0].publicKey, 'spki')
]);
})
.then((exportedKeys) => {
resolve({
username: username,
publicKey: exportedKeys[0]
});
});
} else {
let userExists = this.checkSessionUsernames(username); let userExists = this.checkSessionUsernames(username);
if (userExists) { if (userExists) {
// Someone else is using the username requested, allow reformatting
// if it is owned by the user, else reject the promise
if (userExists.id !== this._myUserId) { if (userExists.id !== this._myUserId) {
return reject(username + ' is being used by someone else in this chat session.'); return reject(username + ' is being used by someone else in this chat session.');
} }
@ -158,6 +170,9 @@ export default class Darkwire {
publicKey: user.publicKey publicKey: user.publicKey
}); });
} }
// User doesn't exist, create the user
return this.createUser(resolve, reject, username);
}); });
} }