diff --git a/src/server/components/auth.js b/src/server/components/auth.js index a6e56267..a48f462e 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -425,7 +425,6 @@ module.exports = { msg.callback(); }, - /* eslint-disable-next-line max-lines-per-function */ createCharacter: async function (msg) { let data = msg.data; let name = data.name; @@ -459,14 +458,8 @@ module.exports = { return; } - console.log('Starting new character create for', name); - const t1 = +new Date(); - const releaseCreateLock = await getCreateLock(); - const t2 = +new Date(); - console.log('Took', t2 - t1, 'ms to get a create lock'); - let exists = await io.getAsync({ key: name, ignoreCase: true, @@ -474,9 +467,6 @@ module.exports = { noDefault: true }); - const t3 = +new Date(); - console.log('Took', t3 - t2, 'ms to check if the character exists'); - if (exists) { releaseCreateLock(); msg.callback(messages.login.charExists); @@ -498,13 +488,7 @@ module.exports = { let simple = this.obj.getSimple(true); - const t4 = +new Date(); - console.log('Took', t4 - t3, 'ms to build the simpleObj'); - await this.verifySkin(simple); - - const t5 = +new Date(); - console.log('Took', t5 - t4, 'ms to verify the skin'); let prophecies = (data.prophecies || []).filter(p => p); @@ -523,9 +507,6 @@ module.exports = { eventEmitter.emit('beforeSaveCharacter', eBeforeSaveCharacter); - const t6 = +new Date(); - console.log('Took', t6 - t5, 'ms to run beforeSaveCharacter'); - await io.setAsync({ key: name, table: 'character', @@ -535,9 +516,6 @@ module.exports = { this.characters[name] = simple; this.characterList.push(name); - - const t7 = +new Date(); - console.log('Took', t7 - t6, 'ms to save the character'); await io.setAsync({ key: this.username, @@ -546,9 +524,6 @@ module.exports = { serialize: true }); - const t8 = +new Date(); - console.log('Took', t8 - t7, 'ms to save the character list'); - releaseCreateLock(); this.initTracker(); diff --git a/src/server/db/ioRethink.js b/src/server/db/ioRethink.js index ae984543..e01fdc51 100644 --- a/src/server/db/ioRethink.js +++ b/src/server/db/ioRethink.js @@ -33,6 +33,19 @@ module.exports = { _.log(e); } } + + //Create indices used for case-insensitive checks + if (!(await r.table('login').indexList()).includes('idLowerCase')) { + await r.table('login').indexCreate('idLowerCase', r.row('id').downcase()); + + _.log('Created index: idLowerCase on table: login'); + } + + if (!(await r.table('character').indexList()).includes('idLowerCase')) { + await r.table('character').indexCreate('idLowerCase', r.row('id').downcase()); + + _.log('Created index: idLowerCase on table: character'); + } }, createTable: async function (tableName) { @@ -46,7 +59,7 @@ module.exports = { getAsyncIgnoreCase: async function (table, key) { const res = await r.table(table) - .filter(doc => doc('id').match(`(?i)^${key}$`)) + .getAll(key.toLowerCase(), { index: 'idLowerCase' }) .run(); return res[0];