First version of the newly restructured repository
This commit is contained in:
196
frontend/gamma/js/Clipperz/KeePassExportProcessor.js
Normal file
196
frontend/gamma/js/Clipperz/KeePassExportProcessor.js
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
|
||||
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, {
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'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"
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user