|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright 2011 Mark Cavage, Inc. All rights reserved.
-
- var assert = require('assert');
- var util = require('util');
-
- var parents = require('ldap-filter');
-
- var Filter = require('./filter');
-
-
- ///--- API
-
- function SubstringFilter(options) {
- parents.SubstringFilter.call(this, options);
- }
- util.inherits(SubstringFilter, parents.SubstringFilter);
- Filter.mixin(SubstringFilter);
- module.exports = SubstringFilter;
-
-
- SubstringFilter.prototype.parse = function (ber) {
- assert.ok(ber);
-
- this.attribute = ber.readString().toLowerCase();
- ber.readSequence();
- var end = ber.offset + ber.length;
-
- while (ber.offset < end) {
- var tag = ber.peek();
- switch (tag) {
- case 0x80: // Initial
- this.initial = ber.readString(tag);
- if (this.attribute === 'objectclass')
- this.initial = this.initial.toLowerCase();
- break;
- case 0x81: // Any
- var anyVal = ber.readString(tag);
- if (this.attribute === 'objectclass')
- anyVal = anyVal.toLowerCase();
- this.any.push(anyVal);
- break;
- case 0x82: // Final
- this.final = ber.readString(tag);
- if (this.attribute === 'objectclass')
- this.final = this.final.toLowerCase();
- break;
- default:
- throw new Error('Invalid substrings filter type: 0x' + tag.toString(16));
- }
- }
-
- return true;
- };
-
-
- SubstringFilter.prototype._toBer = function (ber) {
- assert.ok(ber);
-
- ber.writeString(this.attribute);
- ber.startSequence();
-
- if (this.initial)
- ber.writeString(this.initial, 0x80);
-
- if (this.any && this.any.length)
- this.any.forEach(function (s) {
- ber.writeString(s, 0x81);
- });
-
- if (this.final)
- ber.writeString(this.final, 0x82);
-
- ber.endSequence();
-
- return ber;
- };
|