Improve DN formatting flexibility
- Add 'spaced' function to DN objects allowing toggle of inter-RDN when rendering to a string. ('dc=test,dc=tld' vs 'dc=test, dc=tld') - Detect RDN spacing when parsing DN.
This commit is contained in:
parent
e808aee99d
commit
0d12eef3ff
20
lib/dn.js
20
lib/dn.js
|
@ -53,11 +53,13 @@ function parse(name) {
|
|||
|
||||
var cur = 0;
|
||||
var len = name.length;
|
||||
var rdnSpaced = false;
|
||||
|
||||
function parseRdn() {
|
||||
var rdn = new RDN();
|
||||
while (cur < len) {
|
||||
trim();
|
||||
var leading = trim();
|
||||
rdnSpaced = rdnSpaced || (leading > 0);
|
||||
var attr = parseAttrType();
|
||||
trim();
|
||||
if (cur >= len || name[cur++] !== '=')
|
||||
|
@ -77,8 +79,12 @@ function parse(name) {
|
|||
|
||||
|
||||
function trim() {
|
||||
while ((cur < len) && isWhitespace(name[cur]))
|
||||
var count = 0;
|
||||
while ((cur < len) && isWhitespace(name[cur])) {
|
||||
++cur;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function parseAttrType() {
|
||||
|
@ -179,7 +185,7 @@ function parse(name) {
|
|||
}
|
||||
}
|
||||
|
||||
return new DN(rdns);
|
||||
return new DN(rdns).spaced(rdnSpaced);
|
||||
}
|
||||
|
||||
|
||||
|
@ -196,6 +202,7 @@ function DN(rdns) {
|
|||
});
|
||||
|
||||
this.rdns = rdns.slice();
|
||||
this.rdnSpaced = true;
|
||||
|
||||
this.__defineGetter__('length', function () {
|
||||
return this.rdns.length;
|
||||
|
@ -208,7 +215,12 @@ DN.prototype.toString = function () {
|
|||
this.rdns.forEach(function (rdn) {
|
||||
_dn.push(rdn.toString());
|
||||
});
|
||||
return _dn.join(', ');
|
||||
return _dn.join(this.rdnSpaced ? ', ' : ',');
|
||||
};
|
||||
|
||||
DN.prototype.spaced = function (spaces) {
|
||||
this.rdnSpaced = (spaces === false) ? false : true;
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -131,3 +131,15 @@ test('case insensitive attribute names GH-20', function (t) {
|
|||
t.ok(dn1.equals(dn.parse('cn=foo, DC=bar')));
|
||||
t.end();
|
||||
});
|
||||
|
||||
|
||||
test('rdn spacing', function (t) {
|
||||
var dn1 = dn.parse('cn=foo,dc=bar');
|
||||
var dn2 = dn.parse('cn=foo, dc=bar');
|
||||
t.ok(dn1.equals(dn2));
|
||||
t.equals(dn1.toString(), 'cn=foo,dc=bar');
|
||||
t.equals(dn2.toString(), 'cn=foo, dc=bar');
|
||||
t.equals(dn1.spaced().toString(), 'cn=foo, dc=bar');
|
||||
t.equals(dn2.spaced(false).toString(), 'cn=foo,dc=bar');
|
||||
t.end();
|
||||
});
|
||||
|
|
|
@ -51,7 +51,7 @@ test('new with args', function (t) {
|
|||
|
||||
test('parse', function (t) {
|
||||
var ber = new BerWriter();
|
||||
ber.writeString('cn=foo,o=test');
|
||||
ber.writeString('cn=foo, o=test');
|
||||
|
||||
ber.startSequence();
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ test('new with args', function (t) {
|
|||
|
||||
test('parse', function (t) {
|
||||
var ber = new BerWriter();
|
||||
ber.writeString('cn=foo,o=test');
|
||||
ber.writeString('cn=foo, o=test');
|
||||
|
||||
ber.startSequence();
|
||||
ber.writeString('sn');
|
||||
|
|
|
@ -45,7 +45,7 @@ test('new with args', function (t) {
|
|||
|
||||
test('parse', function (t) {
|
||||
var ber = new BerWriter();
|
||||
ber.writeString('cn=foo,o=test');
|
||||
ber.writeString('cn=foo, o=test');
|
||||
ber.writeString('cn=foo2');
|
||||
ber.writeBoolean(true);
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ test('new with args', function (t) {
|
|||
|
||||
test('parse', function (t) {
|
||||
var ber = new BerWriter();
|
||||
ber.writeString('cn=foo,o=test');
|
||||
ber.writeString('cn=foo, o=test');
|
||||
ber.startSequence();
|
||||
|
||||
ber.startSequence();
|
||||
|
|
|
@ -58,7 +58,7 @@ test('parse', function (t) {
|
|||
});
|
||||
|
||||
var ber = new BerWriter();
|
||||
ber.writeString('cn=foo,o=test');
|
||||
ber.writeString('cn=foo, o=test');
|
||||
ber.writeEnumeration(0);
|
||||
ber.writeEnumeration(0);
|
||||
ber.writeInt(1);
|
||||
|
|
Loading…
Reference in New Issue