Skip to content

Commit 713aa5d

Browse files
authored
Merge branch 'alpha' into moumouls/webauthn-adapter
2 parents de2e08a + 5c2d2c5 commit 713aa5d

File tree

5 files changed

+66
-15
lines changed

5 files changed

+66
-15
lines changed

Diff for: changelogs/CHANGELOG_alpha.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# [5.3.0-alpha.21](https://github.com/parse-community/parse-server/compare/5.3.0-alpha.20...5.3.0-alpha.21) (2022-08-05)
2+
3+
4+
### Bug Fixes
5+
6+
* internal indices for classes `_Idempotency` and `_Role` are not protected in defined schema ([#8121](https://github.com/parse-community/parse-server/issues/8121)) ([c16f529](https://github.com/parse-community/parse-server/commit/c16f529f74f92154401bf662f634b3c5fa45e18e))
7+
18
# [5.3.0-alpha.20](https://github.com/parse-community/parse-server/compare/5.3.0-alpha.19...5.3.0-alpha.20) (2022-07-22)
29

310

Diff for: package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-server",
3-
"version": "5.3.0-alpha.20",
3+
"version": "5.3.0-alpha.21",
44
"description": "An express module providing a Parse-compatible API server",
55
"main": "lib/index.js",
66
"repository": {
@@ -56,7 +56,7 @@
5656
"uuid": "8.3.2",
5757
"winston": "3.8.0",
5858
"winston-daily-rotate-file": "4.7.1",
59-
"ws": "8.8.0"
59+
"ws": "8.8.1"
6060
},
6161
"devDependencies": {
6262
"graphql-tag": "2.12.6",

Diff for: spec/DefinedSchemas.spec.js

+36
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,42 @@ describe('DefinedSchemas', () => {
432432
expect(testSchema.indexes).toBeUndefined();
433433
expect(userSchema.indexes).toEqual(expectedIndexes);
434434
});
435+
436+
it('should detect protected indexes for _User class', () => {
437+
const definedSchema = new DefinedSchemas({}, {});
438+
const protectedUserIndexes = ['_id_', 'case_insensitive_email', 'username_1', 'email_1'];
439+
protectedUserIndexes.forEach(field => {
440+
expect(definedSchema.isProtectedIndex('_User', field)).toEqual(true);
441+
});
442+
expect(definedSchema.isProtectedIndex('_User', 'test')).toEqual(false);
443+
});
444+
445+
it('should detect protected indexes for _Role class', () => {
446+
const definedSchema = new DefinedSchemas({}, {});
447+
expect(definedSchema.isProtectedIndex('_Role', 'name_1')).toEqual(true);
448+
expect(definedSchema.isProtectedIndex('_Role', 'test')).toEqual(false);
449+
});
450+
451+
it('should detect protected indexes for _Idempotency class', () => {
452+
const definedSchema = new DefinedSchemas({}, {});
453+
expect(definedSchema.isProtectedIndex('_Idempotency', 'reqId_1')).toEqual(true);
454+
expect(definedSchema.isProtectedIndex('_Idempotency', 'test')).toEqual(false);
455+
});
456+
457+
it('should not detect protected indexes on user defined class', () => {
458+
const definedSchema = new DefinedSchemas({}, {});
459+
const protectedIndexes = [
460+
'case_insensitive_email',
461+
'username_1',
462+
'email_1',
463+
'reqId_1',
464+
'name_1',
465+
];
466+
protectedIndexes.forEach(field => {
467+
expect(definedSchema.isProtectedIndex('ExampleClass', field)).toEqual(false);
468+
});
469+
expect(definedSchema.isProtectedIndex('ExampleClass', '_id_')).toEqual(true);
470+
});
435471
});
436472

437473
describe('ClassLevelPermissions', () => {

Diff for: src/SchemaMigrations/DefinedSchemas.js

+17-9
Original file line numberDiff line numberDiff line change
@@ -399,15 +399,23 @@ export class DefinedSchemas {
399399
}
400400

401401
isProtectedIndex(className: string, indexName: string) {
402-
let indexes = ['_id_'];
403-
if (className === '_User') {
404-
indexes = [
405-
...indexes,
406-
'case_insensitive_username',
407-
'case_insensitive_email',
408-
'username_1',
409-
'email_1',
410-
];
402+
const indexes = ['_id_'];
403+
switch (className) {
404+
case '_User':
405+
indexes.push(
406+
'case_insensitive_username',
407+
'case_insensitive_email',
408+
'username_1',
409+
'email_1'
410+
);
411+
break;
412+
case '_Role':
413+
indexes.push('name_1');
414+
break;
415+
416+
case '_Idempotency':
417+
indexes.push('reqId_1');
418+
break;
411419
}
412420

413421
return indexes.indexOf(indexName) !== -1;

0 commit comments

Comments
 (0)