12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 'use strict'
- const { BerWriter } = require('@ldapjs/asn1')
- /**
- * Baseline LDAP control object. Implements
- * https://tools.ietf.org/html/rfc4511#section-4.1.11
- *
- * @class
- */
- class Control {
- /**
- * @typedef {object} ControlParams
- * @property {string} [type=''] The dotted decimal control type value.
- * @property {boolean} [criticality=false] Criticality value for the control.
- * @property {string|Buffer} [value] The value for the control. If this is
- * a `string` then it will be written as-is. If it is an instance of `Buffer`
- * then it will be written by `value.toString()` when generating a BER
- * instance.
- */
- /**
- * Create a new baseline LDAP control.
- *
- * @param {ControlParams} [options]
- */
- constructor (options = {}) {
- const opts = Object.assign({ type: '', criticality: false, value: null }, options)
- this.type = opts.type
- this.criticality = opts.criticality
- this.value = opts.value
- }
- get [Symbol.toStringTag] () {
- return 'LdapControl'
- }
- /**
- * Serializes the control into a plain JavaScript object that can be passed
- * to the constructor as an options object. If an instance has a `_pojo(obj)`
- * method then the built object will be sent to that method and the resulting
- * mutated object returned.
- *
- * @returns {object} A plain JavaScript object that represents an LDAP control.
- */
- get pojo () {
- const obj = {
- type: this.type,
- value: this.value,
- criticality: this.criticality
- }
- if (typeof this._pojo === 'function') {
- this._pojo(obj)
- }
- return obj
- }
- /**
- * Converts the instance into a [BER](http://luca.ntop.org/Teaching/Appunti/asn1.html)
- * representation.
- *
- * @param {BerWriter} [ber] An empty `BerWriter` instance to populate.
- *
- * @returns {object} A BER object.
- */
- toBer (ber = new BerWriter()) {
- ber.startSequence()
- ber.writeString(this.type || '')
- ber.writeBoolean(this.criticality)
- /* istanbul ignore else */
- if (typeof (this._toBer) === 'function') {
- this._toBer(ber)
- } else if (this.value !== undefined) {
- if (typeof this.value === 'string') {
- ber.writeString(this.value)
- } else if (Buffer.isBuffer(this.value)) {
- ber.writeString(this.value.toString())
- }
- }
- ber.endSequence()
- return ber
- }
- }
- module.exports = Control
|