diff options
-rw-r--r-- | .gitmodules | 6 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | index.html | 2 | ||||
m--------- | libs/parseLDIF | 0 | ||||
-rw-r--r-- | libs/parseLDIF.js | 295 | ||||
m--------- | parser | 0 |
6 files changed, 5 insertions, 300 deletions
diff --git a/.gitmodules b/.gitmodules index 2e19c11..0a8a914 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "libs/parseLDIF"] - path = libs/parseLDIF - url = https://github.com/mcepl/parseLDIF.git +[submodule "parser"] + path = parser + url = git://github.com/mcepl/parseLDIF.git @@ -1,4 +1,4 @@ -FILES=icon-128.png importAddrBook.js index.html libs/parseLDIF.js \ +FILES=icon-128.png importAddrBook.js index.html parser/parseLDIF.js \ manifest.webapp all: importLDIF.zip @@ -40,7 +40,7 @@ <progress value="0" max="100">0 %</progress> </div> - <script src="libs/parseLDIF.js" type="text/javascript"></script> + <script src="parser/parseLDIF.js" type="text/javascript"></script> <script src="importAddrBook.js" type="text/javascript"></script> </body> </html> diff --git a/libs/parseLDIF b/libs/parseLDIF deleted file mode 160000 -Subproject 7f91596ca5fbe55831d587cdb746b4da595a15f diff --git a/libs/parseLDIF.js b/libs/parseLDIF.js deleted file mode 100644 index e060f54..0000000 --- a/libs/parseLDIF.js +++ /dev/null @@ -1,295 +0,0 @@ -// Compatibility shims -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g,''); - }; -} - -if (!String.prototype.trimRight) { - String.prototype.trimRight = function () { - return this.replace(/\s+$/,''); - }; -} - -if (!Array.isArray) { - Array.isArray = function (vArg) { - return Object.prototype.toString.call(vArg) === "[object Array]"; - }; -} - -const debugState = false; - -/** -* -* Base64 encode / decode -* http://www.webtoolkit.info/ -* From http://stackoverflow.com/questions/246801\ -* /how-can-you-encode-to-base64-using-javascript -* -**/ -var Base64 = { - - // private property - _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", - - // public method for encoding - encode : function (input) { - var output = ""; - var chr1, chr2, chr3, enc1, enc2, enc3, enc4; - var i = 0; - - input = Base64._utf8_encode(input); - - while (i < input.length) { - - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - - enc1 = chr1 >> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); - enc4 = chr3 & 63; - - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - - output = output + - this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + - this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); - - } - - return output; - }, - - // public method for decoding - decode : function (input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - while (i < input.length) { - - enc1 = this._keyStr.indexOf(input.charAt(i++)); - enc2 = this._keyStr.indexOf(input.charAt(i++)); - enc3 = this._keyStr.indexOf(input.charAt(i++)); - enc4 = this._keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output = output + String.fromCharCode(chr1); - - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - - } - - output = Base64._utf8_decode(output); - - return output; - - }, - - // private method for UTF-8 encoding - _utf8_encode : function (string) { - string = string.replace(/\r\n/g,"\n"); - var utftext = ""; - - for (var n = 0; n < string.length; n++) { - - var c = string.charCodeAt(n); - - if (c < 128) { - utftext += String.fromCharCode(c); - } - else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } - else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - - } - - return utftext; - }, - - // private method for UTF-8 decoding - _utf8_decode : function (utftext) { - var string = ""; - var i = 0; - var c = c1 = c2 = 0; - - while ( i < utftext.length ) { - - c = utftext.charCodeAt(i); - - if (c < 128) { - string += String.fromCharCode(c); - i++; - } - else if((c > 191) && (c < 224)) { - c2 = utftext.charCodeAt(i+1); - string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - i += 2; - } - else { - c2 = utftext.charCodeAt(i+1); - c3 = utftext.charCodeAt(i+2); - string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - - } - - return string; - } - -} - -const usefulFields = ["birthyear", "c", "cn", "description", - "facsimiletelephonenumber", "givenName", "homePhone", "l", "mail", - "mobile", "mozillaHomeCountryName", "mozillaHomeLocalityName", - "mozillaHomePostalCode", "mozillaHomeState", "mozillaHomeStreet", - "mozillaHomeUrl", "mozillaNickname", "o", "sn", "st", "street", - "telephoneNumber", "title", "objectclass" - ]; - -function debug(str) { - if (debugState) { - print(str); - } -} - -/** - * parse LDIF string into JavaScript Object - * - * @inStr String - * @returns Object - * - * @todo - * Tries to follow RFC2849, but - * - doesn’t even consider change requests, only complete values - * - doesn’t include version: field (seems to be ignored by - * Thunderbird as well). - * - ignores multi-value attributes completely - * - ignores < links - */ -function parseLDIF(inStr) { - var record = {}, - key = "", - value = null, - splitLine = [], - colon_idx = 0, - out_records = []; - - function handleAdding(key, value) { - value = value ? value.trim() : ""; - - // base64 encoded value - if (value[0] === ":") { - value = Base64.decode(value.slice(1).trim()); - } - - if (key && (usefulFields.indexOf(key) != -1) && - value.length > 0) { - if (key in this) { - if (Array.isArray(this[key])) { - this[key].push(value); - } - else { - this[key] = new Array(this[key]); - this[key].push(value); - } - } - else { - this[key] = value; - } - } - - key = ""; - value = null; - } - - record.add = handleAdding; - - inStr.forEach(function (line) { - if (line != undefined) { - line = line.trim(); - - if (line.length == 0) { - // > 1, because we have always .add property - if (Object.keys(record).length > 1) { - record.add(key, value); - delete record.add; - - if (record.objectclass && - (record.objectclass === "person" || - record.objectclass.indexOf("person") !== -1)) { - delete record.objectclass; - out_records.push(record); - } - } - record = {}; - record.add = handleAdding; - key = ""; - value = null; - } - else { - // comment line - if (line[0] === "#") { - return ; - } - else { - colon_idx = line.indexOf(":"); - line = line.trim(); - - // Line continuation - // This is how it works in THunderbird exported LDIF - // files, but not what RFC describes ... the first character - // of continuing entry should be space, and the first line - // of value should never be empty. Hopefully, this solution - // should be at least compatible for reading of RFC LDIF - // files (so it doesn’t hurt) - if (colon_idx == -1) { - // multiline value - if (line[0] === " ") { - line = line.slice(1); - } - value += line; - } - else { - record.add(key, value); - - key = line.slice(0, colon_idx); - value = line.slice(colon_idx + 1); - } - - } - } - } - }); - - return out_records; -} - -if (arguments && arguments.length == 1) { - var lines = readFile(arguments[0]).replace(/\r\n/g,"\n"); - print(parseLDIF(lines.split("\n")).toSource()); -} diff --git a/parser b/parser new file mode 160000 +Subproject ccd8b64dbb18e19f3129f74429ac83b99c29573 |