Case insensitive signup (#5634)
* Always delete data after each, even for mongo. * Add failing simple case test * run all tests * 1. when validating username be case insensitive 2. add _auth_data_anonymous to specialQueryKeys...whatever that is! * More case sensitivity 1. also make email validation case insensitive 2. update comments to reflect what this change does * wordsmithery and grammar * first pass at a preformant case insensitive query. mongo only so far. * change name of parameter from insensitive to caseInsensitive * Postgres support * properly handle auth data null * wip * use 'caseInsensitive' instead of 'insensitive' in all places. * update commenet to reclect current plan * skip the mystery test for now * create case insensitive indecies for mongo to support case insensitive checks for email and username * remove unneeded specialKey * pull collation out to a function. * not sure what i planned to do with this test. removing. * remove typo * remove another unused flag * maintain order * maintain order of params * boil the ocean on param sequence i like having explain last cause it seems like something you would change/remove after getting what you want from the explain? * add test to verify creation and use of caseInsensitive index * add no op func to prostgress * get collation object from mongocollection make flow lint happy by declaring things Object. * fix typo * add changelog * kick travis * properly reference static method * add a test to confirm that anonymous users with unique username that do collide when compared insensitively can still be created. * minot doc nits * add a few tests to make sure our spy is working as expected wordsmith the changelog Co-authored-by: Diamond Lewis <findlewis@gmail.com>
This commit is contained in:
@@ -1299,6 +1299,7 @@ class DatabaseController {
|
||||
// acl restrict this operation with an ACL for the provided array
|
||||
// of user objectIds and roles. acl: null means no user.
|
||||
// when this field is not present, don't do anything regarding ACLs.
|
||||
// caseInsensitive make string comparisons case insensitive
|
||||
// TODO: make userIds not needed here. The db adapter shouldn't know
|
||||
// anything about users, ideally. Then, improve the format of the ACL
|
||||
// arg to work like the others.
|
||||
@@ -1317,6 +1318,7 @@ class DatabaseController {
|
||||
pipeline,
|
||||
readPreference,
|
||||
hint,
|
||||
caseInsensitive = false,
|
||||
explain,
|
||||
}: any = {},
|
||||
auth: any = {},
|
||||
@@ -1368,6 +1370,7 @@ class DatabaseController {
|
||||
keys,
|
||||
readPreference,
|
||||
hint,
|
||||
caseInsensitive,
|
||||
explain,
|
||||
};
|
||||
Object.keys(sort).forEach(fieldName => {
|
||||
@@ -1723,6 +1726,24 @@ class DatabaseController {
|
||||
throw error;
|
||||
});
|
||||
|
||||
const usernameCaseInsensitiveIndex = userClassPromise
|
||||
.then(() =>
|
||||
this.adapter.ensureIndex(
|
||||
'_User',
|
||||
requiredUserFields,
|
||||
['username'],
|
||||
'case_insensitive_username',
|
||||
true
|
||||
)
|
||||
)
|
||||
.catch(error => {
|
||||
logger.warn(
|
||||
'Unable to create case insensitive username index: ',
|
||||
error
|
||||
);
|
||||
throw error;
|
||||
});
|
||||
|
||||
const emailUniqueness = userClassPromise
|
||||
.then(() =>
|
||||
this.adapter.ensureUniqueness('_User', requiredUserFields, ['email'])
|
||||
@@ -1735,6 +1756,21 @@ class DatabaseController {
|
||||
throw error;
|
||||
});
|
||||
|
||||
const emailCaseInsensitiveIndex = userClassPromise
|
||||
.then(() =>
|
||||
this.adapter.ensureIndex(
|
||||
'_User',
|
||||
requiredUserFields,
|
||||
['email'],
|
||||
'case_insensitive_email',
|
||||
true
|
||||
)
|
||||
)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create case insensitive email index: ', error);
|
||||
throw error;
|
||||
});
|
||||
|
||||
const roleUniqueness = roleClassPromise
|
||||
.then(() =>
|
||||
this.adapter.ensureUniqueness('_Role', requiredRoleFields, ['name'])
|
||||
@@ -1752,7 +1788,9 @@ class DatabaseController {
|
||||
});
|
||||
return Promise.all([
|
||||
usernameUniqueness,
|
||||
usernameCaseInsensitiveIndex,
|
||||
emailUniqueness,
|
||||
emailCaseInsensitiveIndex,
|
||||
roleUniqueness,
|
||||
adapterInit,
|
||||
indexPromise,
|
||||
|
||||
Reference in New Issue
Block a user