Trivial server side extensible search filter support
This commit is contained in:
parent
b8885d7793
commit
13978d5303
|
@ -82,12 +82,49 @@ ExtensibleFilter.prototype.matches = function(target) {
|
||||||
if (typeof(target) !== 'object')
|
if (typeof(target) !== 'object')
|
||||||
throw new TypeError('target (object) required');
|
throw new TypeError('target (object) required');
|
||||||
|
|
||||||
|
if (this.dnAttribute)
|
||||||
|
throw new Error('ExtensibleMatch dnAttributes not supported');
|
||||||
|
|
||||||
|
if (!this.value)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
if (this.matchType && target.hasOwnProperty(this.matchType)) {
|
||||||
|
return Filter.multi_test(function(v) {
|
||||||
|
if (self.rule === '2.5.13.2')
|
||||||
|
return self.value.toLowerCase() === v.toLowerCase();
|
||||||
|
|
||||||
|
return self.value === v;
|
||||||
|
}, target[this.matchType]);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
ExtensibleFilter.prototype.parse = function(ber) {
|
ExtensibleFilter.prototype.parse = function(ber) {
|
||||||
throw new Error('ExtensibleFilter not supported');
|
var end = ber.offset + ber.length;
|
||||||
|
while (ber.offset < end) {
|
||||||
|
var tag = ber.peek();
|
||||||
|
switch (tag) {
|
||||||
|
case 0x81:
|
||||||
|
this.rule = ber.readString(tag);
|
||||||
|
break;
|
||||||
|
case 0x82:
|
||||||
|
this.matchType = ber.readString(tag);
|
||||||
|
break;
|
||||||
|
case 0x83:
|
||||||
|
this.value = ber.readString(tag);
|
||||||
|
break;
|
||||||
|
case 0x84:
|
||||||
|
this.dnAttributes = ber.readBoolean(tag);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error('Invalid ext_match filter type: 0x' + tag.toString(16));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue