walter-whitelist
This lightweight module whitelists javascript objects recursively. This is particularly useful in the following situations:
- you have to check that a user-supplied object only contains keys that the user is allowed to supply, e.g., when handling a POST/PUT request
- you have to pick fields from an object that the user is allowed to see, e.g., before sending a response to a client
Examples
Process user-supplied objects
Before storing user-supplied data in a database, you usually want to check if the object contains fields that the user is allowed to store.
let allowed = name: true age: true;; // resolves with {name: 'Darth', age: 42}; // rejects with WhitelistError (field 'id' is not allowed); // resolves with {name: 'Darth', age: undefined}// omit keys with undefined values:; // resolves with {name: 'Darth'}
You can also use a function to check fields:
let allowed = name: true { if age < 50 return age; throw ; };; // resolves with {name: 'Darth', age: 42}; // rejects with WhitelistError ('age must be less than 50')
Nested objects work, too:
allowed = name: true lightsaber: color: true;; // resolves with {name: 'Darth', lightsaber: {color: 'red'}}; // resolves with {name: 'Darth', lightsaber: {color: undefined}}// omit keys with undefined values:; // resolves with {name: 'Darth', lightsaber: {}}
Pick allowed fields
Before sending data from a database to a client, you want to pick only fields that the client is allowed to see. This can be achieved by using the option omitDisallowed: true
.
let allowed = name: true age: true;; // resolves with {name: 'Darth', age: 42}; // resolves with {name: 'Darth', age: undefined}// omitDisallowed can be combined with omitUndefined:; // resolves with {name: 'Darth'}
Installation
npm install walter-whitelist
Documentation
const whitelist = ;
whitelist(src, allowed, options)
src
: source object, array or primitiveallowed
: the checks onsrc
are performed according to this value. The following values are accepted:- an object
{key: value, ...}
:- expects
src
to be an object. - iterates over keys and uses the value for whitelisting the corresponding key/value pair in
src
value
can be any value that is accepted as theallowed
parameter
- expects
- an array with one element
[value]
:- expects
src
to be an array - iterates over elements of array
src
and whitelists according tovalue
value
can be any value that is accepted as theallowed parameter
- expects
- a function
fn(src, options)
:- should return the whitelisted
src
(directly or via a promise) - if
omitDisallowed
isfalse
andsrc
contains disallowed data, the function is responsible for throwing aWhitelistError
(or rejecting the returned promise with aWhitelistError
)
- should return the whitelisted
- a boolean: if the value is
true
,src
is allowed and returned as the result
- an object
options
: an object with the following optional keys:omitUndefined
: if set totrue
, it omits fields in the result whose values are undefinedomitDisallowed
: if set totrue
, it omits fields from src that are not present inallowed
.data
: custom data that is recursively passed to any function in theallowed
parameter.
The function returns a new object with the whitelisted fields and throws a whitelist.WhitelistError
if a field in src
is not allowed (unless omitDisallow
is true
).