Skip to content

Commit 2cf1449

Browse files
committed
Refactor
1 parent 3d3e6c0 commit 2cf1449

File tree

1 file changed

+12
-9
lines changed
  • packages/ra-data-local-storage/src

1 file changed

+12
-9
lines changed

packages/ra-data-local-storage/src/index.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
9898

9999
// update methods need to persist changes in localStorage
100100
update: <RecordType extends RaRecord = any>(resource, params) => {
101+
checkResource(resource);
101102
updateLocalStorage(() => {
102103
const index = data[resource]?.findIndex(
103104
record => record.id == params.id
@@ -110,9 +111,7 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
110111
return baseDataProvider.update<RecordType>(resource, params);
111112
},
112113
updateMany: (resource, params) => {
113-
if (['__proto__', 'constructor', 'prototype'].includes(resource)) {
114-
throw new Error(`Invalid resource key: ${resource}`);
115-
}
114+
checkResource(resource);
116115
updateLocalStorage(() => {
117116
params.ids.forEach(id => {
118117
const index = data[resource]?.findIndex(
@@ -130,6 +129,7 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
130129
resource,
131130
params
132131
) => {
132+
checkResource(resource);
133133
// we need to call the fakerest provider first to get the generated id
134134
return baseDataProvider
135135
.create<RecordType>(resource, params)
@@ -144,9 +144,7 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
144144
});
145145
},
146146
delete: <RecordType extends RaRecord = any>(resource, params) => {
147-
if (['__proto__', 'constructor', 'prototype'].includes(resource)) {
148-
throw new Error(`Invalid resource key: ${resource}`);
149-
}
147+
checkResource(resource);
150148
updateLocalStorage(() => {
151149
const index = data[resource]?.findIndex(
152150
record => record.id == params.id
@@ -156,9 +154,7 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
156154
return baseDataProvider.delete<RecordType>(resource, params);
157155
},
158156
deleteMany: (resource, params) => {
159-
if (['__proto__', 'constructor', 'prototype'].includes(resource)) {
160-
throw new Error(`Invalid resource key: ${resource}`);
161-
}
157+
checkResource(resource);
162158
updateLocalStorage(() => {
163159
const indexes = params.ids.map(id =>
164160
data[resource]?.findIndex(record => record.id == id)
@@ -170,6 +166,13 @@ export default (params?: LocalStorageDataProviderParams): DataProvider => {
170166
};
171167
};
172168

169+
const checkResource = resource => {
170+
if (['__proto__', 'constructor', 'prototype'].includes(resource)) {
171+
// protection against prototype pollution
172+
throw new Error(`Invalid resource key: ${resource}`);
173+
}
174+
};
175+
173176
export interface LocalStorageDataProviderParams {
174177
defaultData?: any;
175178
localStorageKey?: string;

0 commit comments

Comments
 (0)