@@ -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+
173176export interface LocalStorageDataProviderParams {
174177 defaultData ?: any ;
175178 localStorageKey ?: string ;
0 commit comments