mirror of
http://git.whoc.org.uk/git/password-manager.git
synced 2024-11-01 07:27:17 +01:00
252 lines
10 KiB
JavaScript
252 lines
10 KiB
JavaScript
/*
|
|
|
|
Copyright 2008-2011 Clipperz Srl
|
|
|
|
This file is part of Clipperz's Javascript Crypto Library.
|
|
Javascript Crypto Library provides web developers with an extensive
|
|
and efficient set of cryptographic functions. The library aims to
|
|
obtain maximum execution speed while preserving modularity and
|
|
reusability.
|
|
For further information about its features and functionalities please
|
|
refer to http://www.clipperz.com
|
|
|
|
* Javascript Crypto Library 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.
|
|
|
|
* Javascript Crypto Library 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 Javascript Crypto Library. 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, {
|
|
|
|
//-------------------------------------------------------------------------
|
|
/*
|
|
'parse': function(aValue) {
|
|
var result;
|
|
|
|
//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.parse");
|
|
result = [];
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.parse - result: " + Clipperz.Base.serializeJSON(result));
|
|
//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.parse");
|
|
|
|
return result;
|
|
},
|
|
*/
|
|
//-------------------------------------------------------------------------
|
|
|
|
'deferredParse_core': function(aContext) {
|
|
var deferredResult;
|
|
|
|
//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse_core");
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (1) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - aContext: " + Clipperz.Base.serializeJSON(aContext).substring(0,50));
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (2) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
|
|
//console.log("deferredParse_core - aContext", aContext);
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse_core - (3) aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
|
|
if (aContext.line == "") {
|
|
deferredResult = MochiKit.Async.succeed(aContext.result);
|
|
} else {
|
|
var record;
|
|
|
|
record = this.parseRecord(aContext);
|
|
if (record != null) {
|
|
aContext.result.push(record);
|
|
}
|
|
|
|
//MochiKit.Logging.logDebug("--> KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
|
|
aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, "");
|
|
//MochiKit.Logging.logDebug("<-- KeePassExportProcessor.deferredParse_core - aContext.line: " + aContext.line.replace(/\n/g, "\\n").substring(0,50));
|
|
|
|
deferredResult = new MochiKit.Async.Deferred();
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.1 " + res); return res;});
|
|
deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)});
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.2 " + res); return res;});
|
|
deferredResult.addCallback(MochiKit.Async.wait, 0.2);
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.3 " + res); return res;});
|
|
//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse_core - 1.3 ", res); return res;});
|
|
deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core'))
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse_core - 1.4 " + res); return res;});
|
|
deferredResult.callback(aContext);
|
|
}
|
|
//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse_core");
|
|
|
|
return deferredResult;
|
|
},
|
|
|
|
//.........................................................................
|
|
|
|
'deferredParse': function(aValue) {
|
|
var deferredResult;
|
|
var lines;
|
|
var context;
|
|
|
|
//MochiKit.Logging.logDebug(">>> KeePassExportProcessor.deferredParse");
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - aValue: " + aValue.length);
|
|
lines = aValue.replace(/\r?\n/g, "\n");
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - lines: " + lines.length);
|
|
context = {
|
|
line: lines,
|
|
size: lines.length,
|
|
result: []
|
|
}
|
|
//MochiKit.Logging.logDebug("--- KeePassExportProcessor.deferredParse - context: " + Clipperz.Base.serializeJSON(context).substring(0,50));
|
|
//console.log("--- KeePassExportProcessor.deferredParse - context: ", context);
|
|
|
|
deferredResult = new MochiKit.Async.Deferred();
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 1 " + res); return res;});
|
|
//deferredResult.addBoth(function(res) {console.log("KeePassExportProcessor.deferredParse - 1 ", res); return res;});
|
|
deferredResult.addCallback(MochiKit.Base.method(this, 'deferredParse_core'));
|
|
//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("KeePassExportProcessor.deferredParse - 2 " + res); return res;});
|
|
deferredResult.callback(context);
|
|
//MochiKit.Logging.logDebug("<<< KeePassExportProcessor.deferredParse");
|
|
|
|
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");
|
|
// recordLabelRegexp = new RegExp("^\\[(.*)\\]$", "m");
|
|
fieldLabelRegexp = new RegExp("^(Group|Group Tree|UserName|URL|Password|Notes|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;
|
|
|
|
//MochiKit.Logging.logDebug("1.0");
|
|
line = aContext.line;
|
|
//MochiKit.Logging.logDebug("0 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
|
|
result = {};
|
|
result['Title'] = line.match(recordLabelRegexp)[1];
|
|
//MochiKit.Logging.logDebug("1 - title: " + result['Title']);
|
|
line = line.replace(/^.*\n/, "");
|
|
//MochiKit.Logging.logDebug("2 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
//MochiKit.Logging.logDebug("=======================================");
|
|
while (fieldLabelRegexp.test(line) == true) {
|
|
var fieldName;
|
|
var fieldValue;
|
|
|
|
fieldName = RegExp.$1;
|
|
//MochiKit.Logging.logDebug("3 - fieldName: " + fieldName);
|
|
line = RegExp.rightContext;
|
|
//MochiKit.Logging.logDebug("4 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
|
|
fieldValue = line.match(fieldValueRegexp)[1];
|
|
//MochiKit.Logging.logDebug("5 - fieldValue: " + fieldValue);
|
|
line = RegExp.rightContext;
|
|
//MochiKit.Logging.logDebug("6 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
|
|
if (fieldName == 'Notes') {
|
|
var isMultiline;
|
|
|
|
isMultiline = false;
|
|
|
|
//MochiKit.Logging.logDebug("7 - fieldLabelRegexp.test(line): " + fieldLabelRegexp.test(line) + " - recordLabelRegexp.test(line): " + recordLabelRegexp.test(line));
|
|
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;
|
|
//MochiKit.Logging.logDebug("8 - fieldValue: " + fieldValue);
|
|
line = RegExp.rightContext;
|
|
//MochiKit.Logging.logDebug("9 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
//MochiKit.Logging.logDebug("10 - fieldLabelRegexp.test(line): " + fieldLabelRegexp.test(line) + " - recordLabelRegexp.test(line): " + recordLabelRegexp.test(line));
|
|
}
|
|
|
|
if (isMultiline) {
|
|
fieldValue = fieldValue.replace(/\n$/g, "");
|
|
} else {
|
|
fieldValue = fieldValue.replace(/\n\n$/g, "");
|
|
}
|
|
|
|
line = line.replace(/^\n/, '');
|
|
}
|
|
//MochiKit.Logging.logDebug("5 - fieldValue: " + fieldValue);
|
|
|
|
result[fieldName] = fieldValue;
|
|
//MochiKit.Logging.logDebug("6 - line: " + line.replace(/\n/g, "\\n").substring(0,50));
|
|
//MochiKit.Logging.logDebug("---------------------------------------");
|
|
}
|
|
} else {
|
|
//MochiKit.Logging.logDebug("2.0");
|
|
result = null;
|
|
}
|
|
|
|
aContext.line = line;
|
|
//MochiKit.Logging.logDebug("#######################################");
|
|
|
|
return result;
|
|
},
|
|
|
|
//-------------------------------------------------------------------------
|
|
__syntaxFix__: "syntax fix"
|
|
});
|
|
|
|
|