summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/DataModel/Header.js
Side-by-side diff
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/DataModel/Header.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Header.js751
1 files changed, 751 insertions, 0 deletions
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Header.js b/frontend/beta/js/Clipperz/PM/DataModel/Header.js
new file mode 100644
index 0000000..ef34732
--- a/dev/null
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Header.js
@@ -0,0 +1,751 @@
+/*
+
+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 = {}; }
+if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
+if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
+
+
+//#############################################################################
+
+Clipperz.PM.DataModel.Header = function(args) {
+ args = args || {};
+
+ this._user = args.user;
+
+ this._serverData = null;
+ this._serverDataVersion = null;
+ this._jsonEvaledServerData = null;
+
+ this._decryptedLegacyServerData = null;
+ this._isDecryptingLegacyServerData = false;
+ this._decryptingLegacyServerDataPendingQueue = [];
+
+ this.resetUpdatedSections();
+
+ this._shouldLoadSections = {};
+
+ Clipperz.NotificationCenter.register(this.user(), 'updatedSection', this, 'updatedSectionHandler');
+
+ return this;
+}
+
+Clipperz.PM.DataModel.Header.prototype = MochiKit.Base.update(null, {
+
+ //-------------------------------------------------------------------------
+
+ 'user': function() {
+ return this._user;
+ },
+
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+
+ 'updatedSections': function() {
+ return this._updatedSections;
+ },
+
+ 'markSectionAsUpdated': function(aSectionName) {
+ this.updatedSections().push(aSectionName);
+ },
+
+ 'resetUpdatedSections': function() {
+ this._updatedSections = []
+ },
+
+ 'hasSectionBeenUpdated': function(aSectionName) {
+ return (this.updatedSections().join().indexOf(aSectionName) != -1);
+ },
+
+ 'cachedServerDataSection': function(aSectionName) {
+ return (this.hasSectionBeenUpdated(aSectionName)) ? {} : this.jsonEvaledServerData()[aSectionName];
+ },
+
+ 'updateAllSections': function() {
+ this.resetUpdatedSections();
+ this.markSectionAsUpdated('records');
+ this.markSectionAsUpdated('directLogins');
+ this.markSectionAsUpdated('preferences');
+ this.markSectionAsUpdated('oneTimePasswords');
+
+ return MochiKit.Async.succeed(this);
+ },
+
+ 'updatedSectionHandler': function(anEvent) {
+ this.markSectionAsUpdated(anEvent.parameters());
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getObjectKeyIndex': function(anObject) {
+ var result;
+ var itemReference;
+ var index;
+
+ result = {};
+ index = 0;
+
+ for (itemReference in anObject) {
+ result[itemReference] = index.toString();
+ index ++;
+ }
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'serializedDataWithRecordAndDirectLoginIndexes': function(aRecordIndexes, aDirectLoginIndexs) {
+ var result;
+ var records;
+ var recordReference;
+
+//MochiKit.Logging.logDebug(">>> Header.serializedData");
+ result = {
+ 'records': {},
+ 'directLogins': {}
+ };
+
+ records = this.user().records();
+ for (recordReference in records) {
+ result['records'][aRecordIndexes[recordReference]] = this.user().records()[recordReference].headerData();
+ }
+
+ for (directLoginReference in this.user().directLoginReferences()) {
+ var currentDirectLogin;
+ var directLoginData;
+
+ currentDirectLogin = this.user().directLoginReferences()[directLoginReference];
+ if (aRecordIndexes[currentDirectLogin.recordReference()] != null) {
+ directLoginData = {
+// reference: currentDirectLogin.reference(),
+ record: aRecordIndexes[currentDirectLogin.recordReference()].toString(),
+ label: currentDirectLogin.label(),
+ favicon: currentDirectLogin.favicon() || ""
+ }
+
+ result['directLogins'][aDirectLoginIndexs[directLoginReference]] = directLoginData;
+ }
+
+ }
+//MochiKit.Logging.logDebug("<<< Header.serializedData - result: " + Clipperz.Base.serializeJSON(result));
+//MochiKit.Logging.logDebug("<<< Header.serializedData");
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encryptedData': function() {
+ var deferredResult;
+ var recordIndex;
+ var directLoginIndex;
+ var serializedData;
+ var result;
+
+//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Header.encryptedData");
+//MochiKit.Logging.logDebug("### Header.encryptedData - " + Clipperz.Base.serializeJSON(this.updatedSections()));
+ result = {
+ 'records': this.cachedServerDataSection('records'),
+ 'directLogins': this.cachedServerDataSection('directLogins'),
+ 'preferences': this.cachedServerDataSection('preferences'),
+ 'oneTimePasswords': this.cachedServerDataSection('oneTimePasswords'),
+ 'version': '0.1'
+ };
+
+ if (this.hasSectionBeenUpdated('records')) {
+ recordIndex = this.getObjectKeyIndex(this.user().records());
+ result['records']['index'] = recordIndex;
+ } else {
+ recordIndex = result['records']['index'];
+ }
+
+ if (this.hasSectionBeenUpdated('directLogins')) {
+ directLoginIndex = this.getObjectKeyIndex(this.user().directLoginReferences());
+ result['directLogins']['index'] = directLoginIndex;
+ } else {
+ directLoginIndex = result['directLogins']['index'];
+ }
+
+ if (this.hasSectionBeenUpdated('records') || this.hasSectionBeenUpdated('directLogins')) {
+ serializedData = this.serializedDataWithRecordAndDirectLoginIndexes(recordIndex, directLoginIndex);
+ }
+
+ deferredResult = new MochiKit.Async.Deferred();
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1: " + res); return res;});
+ if (this.hasSectionBeenUpdated('records')) {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.1: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aSerializedData, aValue) {
+ return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), aSerializedData['records']);
+ }, this, result, serializedData);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.2: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ aResult['records']['data'] = aValue;
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.3: " + res); return res;});
+ }
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2: " + res); return res;});
+ if (this.hasSectionBeenUpdated('directLogins')) {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.1: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aSerializedData, aValue) {
+ return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), aSerializedData['directLogins']);
+ }, this, result, serializedData);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.2: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ aResult['directLogins']['data'] = aValue;
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.3: " + res); return res;});
+ }
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3: " + res); return res;});
+ if (this.hasSectionBeenUpdated('preferences')) {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.1: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), anHeader.user().preferences().serializedData());
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.2: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ aResult['preferences']['data'] = aValue;
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.3: " + res); return res;});
+ }
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4: " + res); return res;});
+ if (this.hasSectionBeenUpdated('oneTimePasswords')) {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.1: " + res); return res;});
+// deferredResult.addCallback(MochiKit.Base.method(this, 'loadOneTimePasswords'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.2: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), anHeader.user().oneTimePasswordManager().serializedData());
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.3: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ aResult['oneTimePasswords']['data'] = aValue;
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.4: " + res); return res;});
+ }
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 5: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aResult, aValue) {
+ var serverData;
+
+ serverData = Clipperz.Base.serializeJSON(aResult);
+ anHeader.setServerData(serverData);
+
+ return serverData;
+ }, this, result);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 6: " + res); return res;});
+
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Header.encryptedData");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'serverData': function() {
+ return this._serverData;
+ },
+
+ 'setServerData': function(aValue) {
+//MochiKit.Logging.logDebug(">>> Header.setServerData");
+//MochiKit.Logging.logDebug("[start]=============================================");
+//MochiKit.Logging.logDebug("SERVER_DATA: " + aValue);
+//MochiKit.Logging.logDebug("[end]===============================================");
+ this._serverData = aValue;
+//MochiKit.Logging.logDebug("--- Header.setServerData - 1");
+ this.resetUpdatedSections();
+//MochiKit.Logging.logDebug("--- Header.setServerData - 2");
+ this.resetJsonEvaledServerData();
+//MochiKit.Logging.logDebug("<<< Header.setServerData");
+ },
+
+ 'jsonEvaledServerData': function() {
+ if (this._jsonEvaledServerData == null) {
+ this._jsonEvaledServerData = Clipperz.Base.evalJSON(this.serverData());
+ }
+
+ return this._jsonEvaledServerData;
+ },
+
+ 'resetJsonEvaledServerData': function() {
+ this._jsonEvaledServerData = null;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'serverDataVersion': function() {
+ return this._serverDataVersion;
+ },
+
+ 'setServerDataVersion': function(aValue) {
+ this._serverDataVersion = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'decryptedLegacyServerData': function() {
+ var deferredResult;
+
+//MochiKit.Logging.logDebug(">>> Header.decryptedLegacyServerData");
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'updateAllSections'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ if (this._decryptedLegacyServerData == null) {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_decryptingUserData');
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.user().passphrase(), this.serverData(), this.serverDataVersion());
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(function(anHeader, aValue) {
+ anHeader._decryptedLegacyServerData = aValue;
+ }, this);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 6: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ };
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 7: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+
+ deferredResult.addCallback(function(anHeader) {
+ return anHeader._decryptedLegacyServerData;
+ }, this);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 8: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< Header.decryptedLegacyServerData");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'serverDataFormat': function() {
+ var result;
+
+//MochiKit.Logging.logDebug(">>> Header.serverDataFormat");
+ if (this.serverData().charAt(0) == '{') {
+ var serverData;
+
+ serverData = Clipperz.Base.evalJSON(this.serverData());
+ result = serverData['version'];
+ } else {
+ result = 'LEGACY';
+ }
+//MochiKit.Logging.logDebug("<<< Header.serverDataFormat");
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'extractHeaderDataFromUserDetails': function(someUserDetails) {
+ if (this.serverData() == null) {
+ this.setServerData(someUserDetails['header']);
+ this.setServerDataVersion(someUserDetails['version'])
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'extractDataWithKey': function(aKey) {
+ var deferredResult;
+
+//MochiKit.Logging.logDebug(">>> Header.extractDataWithKey");
+ deferredResult = new MochiKit.Async.Deferred();
+
+ switch (this.serverDataFormat()) {
+ case 'LEGACY':
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'decryptedLegacyServerData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(function(someDecryptedValues) {
+ return someDecryptedValues[aKey] || {};
+ })
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ break;
+ case '0.1':
+ var data;
+
+//# data = Clipperz.Base.evalJSON(this.serverData());
+ data = this.jsonEvaledServerData();
+ if (typeof(data[aKey]) != 'undefined') {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_decryptingUserData');
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.user().passphrase(), data[aKey]['data'], this.serverDataVersion());
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 6: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(function(/*anHeader,*/ aKey, aData, aRecordIndex, aValue) {
+ var result;
+//MochiKit.Logging.logDebug(">>> [start] ===============================================");
+//MochiKit.Logging.logDebug("--- extractDataWithKey - 0 [" + aKey + "]: " + Clipperz.Base.serializeJSON(aValue));
+//MochiKit.Logging.logDebug("<<< [end] =================================================");
+ if (aKey == 'records') {
+ var recordKey;
+
+ result = {};
+ for (recordKey in aData['index']) {
+ result[recordKey] = aValue[aData['index'][recordKey]];
+ }
+ } else if (aKey == 'directLogins') {
+ var recordKeyReversedIndex;
+ var recordKey;
+ var directLoginKey;
+
+ result = {};
+ recordKeyReversedIndex = {};
+
+ for (recordKey in aRecordIndex) {
+ recordKeyReversedIndex[aRecordIndex[recordKey]] = recordKey;
+ }
+
+//MochiKit.Logging.logDebug("--- extractDataWithKey - 1 - aData['index']: " + Clipperz.Base.serializeJSON(aData['index']));
+ for (directLoginKey in aData['index']) {
+try {
+ if ((aData['index'][directLoginKey] != null) && (aValue[aData['index'][directLoginKey]] != null)) {
+ result[directLoginKey] = aValue[aData['index'][directLoginKey]];
+ result[directLoginKey]['record'] = recordKeyReversedIndex[result[directLoginKey]['record']];
+ }
+} catch(exception) {
+ // result[directLoginKey] has no properties
+ MochiKit.Logging.logDebug("[Header 391] EXCEPTION: " + exception);
+ throw exception;
+}
+ }
+//MochiKit.Logging.logDebug("--- extractDataWithKey - 2");
+ } else {
+ result = aValue;
+ }
+
+ return result;
+ }, /*this,*/ aKey, data[aKey], data['records']['index']);
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 6: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ } else {
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 7: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Async.succeed, {});
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 8: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ }
+ break;
+ }
+
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 9: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< Header.extractDataWithKey");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'processRecordData': function(someRecordData) {
+ var records;
+ var recordReference;
+
+//console.log("HeaderRecordData parameters", someRecordData);
+//MochiKit.Logging.logDebug(">>> Header.processRecordData");
+ records = someRecordData;
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 1");
+ if (records != null) {
+//MochiKit.Logging.logDebug("--- Header.processRecordData - records: " + Clipperz.Base.serializeJSON(records));
+ for (recordReference in records) {
+ var newRecord;
+ var parameters;
+
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 2 - recordReference: " + recordReference);
+ if (recordReference != "stacktrace") {
+ parameters = records[recordReference]; //.slice();
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 3");
+ if (typeof(parameters['notes']) != 'undefined') {
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 4");
+ if (parameters['notes'] != "") {
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 5");
+ parameters['headerNotes'] = parameters['notes'];
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 6");
+ }
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 7");
+ delete parameters['notes'];
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 8");
+ }
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 9");
+ parameters['reference'] = recordReference;
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 10");
+ parameters['user'] = this.user();
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 11");
+
+ newRecord = new Clipperz.PM.DataModel.Record(parameters);
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 12");
+ this.user().addRecord(newRecord, true);
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 13");
+ }
+ }
+
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 14");
+ Clipperz.NotificationCenter.notify(null, 'recordAdded', null, true);
+//MochiKit.Logging.logDebug("--- Header.processRecordData - 15");
+ }
+//MochiKit.Logging.logDebug("<<< Header.processRecordData");
+
+ return this.user().records();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'processDirectLoginData': function(someDirectLoginData) {
+ var directLogins;
+ var directLoginReference;
+
+//MochiKit.Logging.logDebug(">>> Header.processDirectLoginData");
+ directLogins = someDirectLoginData;
+ if (directLogins != null) {
+ for (directLoginReference in directLogins) {
+ var directLoginReference;
+ var parameters;
+
+ parameters = directLogins[directLoginReference]; //.slice();
+ parameters.user = this.user();
+ parameters.reference = directLoginReference;
+ directLoginReference = new Clipperz.PM.DataModel.DirectLoginReference(parameters);
+ if (directLoginReference.record() != null) {
+ this.user().addDirectLoginReference(directLoginReference, true);
+ }
+ }
+ }
+
+ Clipperz.NotificationCenter.notify(null, 'directLoginAdded', null, true);
+//MochiKit.Logging.logDebug("<<< Header.processDirectLoginData");
+
+ return this.user().directLoginReferences();
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'shouldLoadSections': function() {
+ return this._shouldLoadSections;
+ },
+
+ 'shouldLoadSection': function(aSectionName) {
+ var result;
+
+ if (typeof(this.shouldLoadSections()[aSectionName]) != 'undefined') {
+ result = this.shouldLoadSections()[aSectionName];
+ } else {
+ result = true;
+ }
+
+ return result;
+ },
+
+ 'setShouldLoadSection': function(aSectionName, aValue) {
+ this.shouldLoadSections()[aSectionName] = aValue;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadRecords': function() {
+ var deferredResult;
+
+ if (this.shouldLoadSection('records') == true) {
+ this.setShouldLoadSection('records', false);
+
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'records'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'processRecordData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+ } else {
+ deferredResult = MochiKit.Async.succeed(this.user().records());
+ }
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadDirectLogins': function() {
+ var deferredResult;
+
+ if (this.shouldLoadSection('directLogins') == true) {
+ this.setShouldLoadSection('directLogins', false);
+
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'directLogins'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'processDirectLoginData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+ } else {
+ deferredResult = MochiKit.Async.succeed(this.user().directLoginReferences());
+ }
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadPreferences': function() {
+ var deferredResult;
+
+ if (this.shouldLoadSection('preferences') == true) {
+ this.setShouldLoadSection('preferences', false);
+
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'preferences'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user().preferences(), 'updateWithData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+ } else {
+ deferredResult = MochiKit.Async.succeed(this.user().preferences());
+ }
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadOneTimePasswords': function() {
+ var deferredResult;
+
+ if (this.shouldLoadSection('oneTimePasswords') == true) {
+ this.setShouldLoadSection('oneTimePasswords', false);
+
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'oneTimePasswords'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'updateWithData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getOneTimePasswordsDetails', {});
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 6: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'updateWithServerData'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 7: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+ } else {
+ deferredResult = MochiKit.Async.succeed(this.user().oneTimePasswordManager());
+ }
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadAllSections': function() {
+ var deferredResult;
+
+ deferredResult = new MochiKit.Async.Deferred();
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 1: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'loadRecords'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 2: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'loadDirectLogins'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 3: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'loadPreferences'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 4: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this, 'loadOneTimePasswords'));
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 5: "/* + res*/); return res;});
+//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+
+});
+