mirror of
http://git.whoc.org.uk/git/password-manager.git
synced 2024-11-01 11:17:16 +01:00
752 lines
35 KiB
JavaScript
752 lines
35 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 = {}; }
|
|
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"
|
|
|
|
});
|
|
|