Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
extract-params
Advanced tools
npm install extract-params --save
Then, in your app:
var extractParams = require('extract-params').extractParams;
// or
var extractParamsInFirstMatch = require('extract-params').extractParamsInFirstMatch;
Tests whether str
matches the given parameterized pattern
, and returns a key-value object of parameters and their values in case of a successful match.
An optional transform
function can be passed to manipulate the extracted params. If transform
returns null
, the match fails. transform
can be used, for example, to lowercase the values in params
, or to validate them (return null
if validation fails).
pattern
parameters must be in the following format: :camelCase
Match must occur from the first character of str
in order to be considered successful (see examples below).
If match is not successful, extractParams
returns null
.
var params = extractParams(
'/users/123/friends/456/photo',
'/users/:userId/friends/:friendId/photo'
);
/*
Returns:
{
userId: '123',
friendId: '456'
}
*/
var params = extractParams(
'/home/users/123/friends/456/photo',
'/users/:userId/friends/:friendId/photo'
);
/*
Returns:
null
because `str` matches `pattern`,
but not from the first character of `str`.
*/
var params = extractParams(
'/users/1234/friends/456/photo',
'/users/:userId/friends/:friendId/photo',
function(params) {
var userId = parseInt(params.userId, 10);
return userId >= 1 && userId <= 999 ? params : null;
}
);
/*
Returns:
null
because userId > 999
*/
Tests whether str
matches one of the parameterized patterns
. Every pattern can have an optional transform
function. If none of the patterns
match, extractParamsInFirstMatch
returns null
. Otherwise, it returns the matching pattern index and its parameters.
var params = extractParamsInFirstMatch(
'/users/123',
[
{ pattern: '/users/:userId/friends/:friendId/photo' },
{ pattern: '/users/:userId/friends/:friendId' },
{ pattern: '/users/:userId/friends' },
{ pattern: '/users/:userId' },
{ pattern: '/users' }
]
);
/*
Returns:
{
patternIndex: 3,
params: {
userId: '123'
}
}
*/
var params = extractParamsInFirstMatch(
'/users/123/subscriptions',
[
{ pattern: '/users/:userId/friends/:friendId/photo' },
{ pattern: '/users/:userId/friends/:friendId' },
{ pattern: '/users/:userId/friends' },
{ pattern: '/users/:userId' },
{ pattern: '/users' }
]
);
/*
Returns:
null
because none of the patterns match.
*/
function userIdValidator(params) {
if (!('userId' in params)) {
return params;
}
// Without this check, '/users/1234/friends/567' would match '/users/:userId'
// with { userId: '1234/friends/567' }
if (!(/^\d+$/.test(params.userId))) {
return null;
}
var userId = parseInt(params.userId, 10);
return userId >= 1 && userId <= 999 ? params : null;
}
var params = extractParamsInFirstMatch(
'/users/1234/friends/567',
[
{ pattern: '/users/:userId/friends/:friendId/photo', transform: userIdValidator },
{ pattern: '/users/:userId/friends/:friendId', transform: userIdValidator },
{ pattern: '/users/:userId/friends', transform: userIdValidator },
{ pattern: '/users/:userId', transform: userIdValidator },
{ pattern: '/users' }
]
);
/*
Returns:
null
because userId > 999
*/
npm test
FAQs
Extract parameters from a string based on a pattern
The npm package extract-params receives a total of 0 weekly downloads. As such, extract-params popularity was classified as not popular.
We found that extract-params demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.