103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
var _ = require('../util').lodash,
|
|
PropertyList = require('../collection/property-list').PropertyList,
|
|
Url = require('../collection/url').Url,
|
|
UrlMatchPattern = require('./url-match-pattern').UrlMatchPattern,
|
|
|
|
MATCH_ALL_URLS = UrlMatchPattern.MATCH_ALL_URLS,
|
|
|
|
UrlMatchPatternList;
|
|
|
|
_.inherit((
|
|
|
|
/**
|
|
* UrlMatchPattern is a list of UrlMatchPatterns.
|
|
* This allows you to test for any url over a list of match patterns.
|
|
*
|
|
* @constructor
|
|
* @extends {PropertyList}
|
|
*
|
|
* @param {Object} parent -
|
|
* @param {String[]} list -
|
|
* @example <caption>An example UrlMatchPatternList</caption>
|
|
* var matchPatternList = new UrlMatchPatternList(['https://*.google.com/*']);
|
|
*/
|
|
UrlMatchPatternList = function (parent, list) {
|
|
UrlMatchPatternList.super_.call(this, UrlMatchPattern, parent, list);
|
|
}), PropertyList);
|
|
|
|
_.assign(UrlMatchPatternList.prototype, /** @lends UrlMatchPatternList.prototype */ {
|
|
|
|
/**
|
|
* Allows this property to be serialised into its plural form.
|
|
* This is here because Property.prototype.toJSON() tries to singularise
|
|
* the keys which are PropertyLists.
|
|
* i.e. when a property has a key - `matches = new PropertyList()`,
|
|
* toJSON on the property tries to singularise 'matches' and ends up with 'matche'.
|
|
*
|
|
* @private
|
|
* @readOnly
|
|
* @type {String}
|
|
*/
|
|
_postman_proprtyIsSerialisedAsPlural: true,
|
|
|
|
/**
|
|
* Tests the url string with the match pattern list provided to see if it matches any of it.
|
|
* Follows the https://developer.chrome.com/extensions/match_patterns pattern for pattern validation and matching
|
|
*
|
|
* @param {String=} [urlStr] The url string for which the proxy match needs to be done.
|
|
* @returns {Boolean=}
|
|
*/
|
|
test: function (urlStr) {
|
|
/*
|
|
* Similar to the UrlMatchPattern.test, however instead of testing
|
|
* MATCH_ALL_URLS and Regex conditions serially with each of the pattern,
|
|
* this method first searches for MATCH_ALL_URLS in all patterns
|
|
* and then moves on to the slower Regex based searches.
|
|
*/
|
|
var url,
|
|
matchAllUrlsPattern,
|
|
matchedSpecificPattern;
|
|
|
|
matchAllUrlsPattern = this.find(function (urlMatchPattern) {
|
|
return urlMatchPattern.pattern === MATCH_ALL_URLS;
|
|
});
|
|
|
|
if (_.isObject(matchAllUrlsPattern)) {
|
|
return true;
|
|
}
|
|
|
|
url = new Url(urlStr);
|
|
|
|
matchedSpecificPattern = this.find(function (urlMatchPattern) {
|
|
var matchRegexObject = urlMatchPattern._matchPatternObject;
|
|
|
|
// Empty matchRegexObject represents the match is INVALID match
|
|
if (_.isEmpty(matchRegexObject)) {
|
|
return false;
|
|
}
|
|
|
|
return (urlMatchPattern.testProtocol(url.protocol) &&
|
|
urlMatchPattern.testHost(url.getHost()) &&
|
|
urlMatchPattern.testPort(url.port, url.protocol) &&
|
|
urlMatchPattern.testPath(url.getPath()));
|
|
});
|
|
|
|
return Boolean(matchedSpecificPattern);
|
|
}
|
|
});
|
|
|
|
_.assign(UrlMatchPatternList, /** @lends UrlMatchPatternList */ {
|
|
/**
|
|
* Defines the name of this property for internal use
|
|
*
|
|
* @private
|
|
* @readOnly
|
|
* @type {String}
|
|
*/
|
|
_postman_propertyName: 'UrlMatchPatternList'
|
|
});
|
|
|
|
module.exports = {
|
|
UrlMatchPatternList
|
|
};
|