From 20bea94ab6b91c85b171dcf86baba0a64169d508 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Fri, 30 Aug 2013 15:56:53 +0000 Subject: First release of /delta version --- (limited to 'frontend/delta/js/Clipperz/KeePassExportProcessor.js') diff --git a/frontend/delta/js/Clipperz/KeePassExportProcessor.js b/frontend/delta/js/Clipperz/KeePassExportProcessor.js new file mode 100644 index 0000000..e35d729 --- a/dev/null +++ b/frontend/delta/js/Clipperz/KeePassExportProcessor.js @@ -0,0 +1,191 @@ +/* + +Copyright 2008-2013 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } + + +Clipperz.KeePassExportProcessor = function(args) { + args = args || {}; + + return this; +} + +//============================================================================= + +Clipperz.KeePassExportProcessor.prototype = MochiKit.Base.update(null, { + + //------------------------------------------------------------------------- + + 'deferredParse_core': function(aContext) { + var deferredResult; + + if (aContext.line == "") { + deferredResult = MochiKit.Async.succeed(aContext.result); + } else { + var record; + + record = this.parseRecord(aContext); + if (record != null) { + aContext.result.push(record); + } + + aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, ""); + + deferredResult = new Clipperz.Async.Deferred("KeePassExportProcessor.deferredParse_core"); + deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)}); + deferredResult.addCallback(MochiKit.Async.wait, 0.2); + deferredResult.addMethod(this, 'deferredParse_core'); + deferredResult.callback(aContext); + } + + return deferredResult; + }, + + //......................................................................... + + 'deferredParse': function(aValue) { + var deferredResult; + var lines; + var context; + + lines = aValue.replace(/\r?\n/g, "\n"); + context = { + line: lines, + size: lines.length, + result: [] + } + + deferredResult = new Clipperz.Async.Deferred("KeePassExportProcessor.deferredResult"); + deferredResult.addMethod(this, 'deferredParse_core'); + deferredResult.callback(context); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'parseRecord': function(aContext) { + var result; + var recordLabelRegexp; + var fieldLabelRegexp; + var fieldValueRegexp; + var fullLineRegexp; +/* +[Record name] +Group Tree: +UserName: +URL: +Password: +Notes: test +UUID: 525f62430079bae48b79ed2961924b05 +Icon: 0 +Creation Time: 2007-06-26 17:56:03 +Last Access: 2007-10-25 16:23:51 +Last Modification: 2007-10-25 16:23:51 +Expires: 2999-12-28 23:59:59 + +[Record name] ==> Title +Group: General ==> Group +Group Tree: ==> Group Tree +UserName: ==> UserName +URL: ==> URL +Password: ==> Password +Notes: test ==> Notes +UUID: 525f62430079bae48b79ed2961924b05 ==> UUID +Icon: 0 ==> Icon +Creation Time: 2007-06-26 17:56:03 ==> Creation Time +Last Access: 2007-10-25 16:23:51 ==> Last Access +Last Modification: 2007-10-25 16:23:51 ==> Last Modification +Expires: 2999-12-28 23:59:59 ==> Expires +Attachment Description: ==> Attachment Description +Attachment: ==> Attachment +*/ +// recordLabelRegexp = new RegExp("(^\\[(.*)\\]\\n|^Title:\s*(.*)\\n)"); + recordLabelRegexp = new RegExp("^\\[(.*)\\]\\n|^Title:\s*(.*)\\n"); + fieldLabelRegexp = new RegExp("^\s?(Group|Group Tree|Username|UserName|User Name|Url|URL|Password|Notes|Comment|UUID|Icon|Creation Time|Last Access|Last Modification|Expires|Attachment Description|Attachment|Valid until): "); + fieldValueRegexp = new RegExp("(.*)(\\n|$)"); + fullLineRegexp = new RegExp("^(.*\\n)"); + + if (recordLabelRegexp.test(aContext.line) == true) { + var line; + + line = aContext.line; + + result = {}; + result['Title'] = line.match(recordLabelRegexp)[1]; + line = line.replace(/^.*\n/, ""); + while (fieldLabelRegexp.test(line) == true) { + var fieldName; + var fieldValue; + + fieldName = RegExp.$1; + line = RegExp.rightContext; + + fieldValue = line.match(fieldValueRegexp)[1]; + line = RegExp.rightContext; + + if (fieldName == 'Notes') { + var isMultiline; + + isMultiline = false; + + if ((line != "") && (fieldLabelRegexp.test(line) == false) && (recordLabelRegexp.test(line) == false)) { + fieldValue += '\n'; + } + + while ((line != "") && (fieldLabelRegexp.test(line) == false) && (recordLabelRegexp.test(line) == false)) { + var newLineValue; + + newLineValue = line.match(fullLineRegexp)[1]; + if (newLineValue != "\n") { + isMultiline = true; + } + fieldValue += newLineValue; + line = RegExp.rightContext; + } + + if (isMultiline) { + fieldValue = fieldValue.replace(/\n$/g, ""); + } else { + fieldValue = fieldValue.replace(/\n\n$/g, ""); + } + + line = line.replace(/^\n/, ''); + } + + result[fieldName] = fieldValue; + } + } else { + result = null; + } + + aContext.line = line; + + return result; + }, + + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" +}); + + -- cgit v0.9.0.2