summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/DataModel/Header.js
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-02 23:56:18 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-02 23:56:18 (UTC)
commitef68436ac04da078ffdcacd7e1f785473a303d45 (patch) (unidiff)
treec403752d66a2c4775f00affd4fa8431b29c5b68c /frontend/beta/js/Clipperz/PM/DataModel/Header.js
parent597ecfbc0249d83e1b856cbd558340c01237a360 (diff)
downloadclipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.zip
clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.gz
clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.bz2
First version of the newly restructured repository
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/DataModel/Header.js') (more/less context) (show 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 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz's Javascript Crypto Library.
6Javascript Crypto Library provides web developers with an extensive
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please
11refer to http://www.clipperz.com
12
13* Javascript Crypto Library is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version.
17
18* Javascript Crypto Library is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details.
22
23* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see
25 <http://www.gnu.org/licenses/>.
26
27*/
28
29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
30if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
31if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
32
33
34//#############################################################################
35
36Clipperz.PM.DataModel.Header = function(args) {
37 args = args || {};
38
39 this._user = args.user;
40
41 this._serverData = null;
42 this._serverDataVersion = null;
43 this._jsonEvaledServerData = null;
44
45 this._decryptedLegacyServerData = null;
46 this._isDecryptingLegacyServerData = false;
47 this._decryptingLegacyServerDataPendingQueue = [];
48
49 this.resetUpdatedSections();
50
51 this._shouldLoadSections = {};
52
53 Clipperz.NotificationCenter.register(this.user(), 'updatedSection', this, 'updatedSectionHandler');
54
55 return this;
56}
57
58Clipperz.PM.DataModel.Header.prototype = MochiKit.Base.update(null, {
59
60 //-------------------------------------------------------------------------
61
62 'user': function() {
63 return this._user;
64 },
65
66 //-------------------------------------------------------------------------
67 //-------------------------------------------------------------------------
68 //-------------------------------------------------------------------------
69 //-------------------------------------------------------------------------
70 //-------------------------------------------------------------------------
71 //-------------------------------------------------------------------------
72 //-------------------------------------------------------------------------
73 //-------------------------------------------------------------------------
74 //-------------------------------------------------------------------------
75
76 'updatedSections': function() {
77 return this._updatedSections;
78 },
79
80 'markSectionAsUpdated': function(aSectionName) {
81 this.updatedSections().push(aSectionName);
82 },
83
84 'resetUpdatedSections': function() {
85 this._updatedSections = []
86 },
87
88 'hasSectionBeenUpdated': function(aSectionName) {
89 return (this.updatedSections().join().indexOf(aSectionName) != -1);
90 },
91
92 'cachedServerDataSection': function(aSectionName) {
93 return (this.hasSectionBeenUpdated(aSectionName)) ? {} : this.jsonEvaledServerData()[aSectionName];
94 },
95
96 'updateAllSections': function() {
97 this.resetUpdatedSections();
98 this.markSectionAsUpdated('records');
99 this.markSectionAsUpdated('directLogins');
100 this.markSectionAsUpdated('preferences');
101 this.markSectionAsUpdated('oneTimePasswords');
102
103 return MochiKit.Async.succeed(this);
104 },
105
106 'updatedSectionHandler': function(anEvent) {
107 this.markSectionAsUpdated(anEvent.parameters());
108 },
109
110 //-------------------------------------------------------------------------
111
112 'getObjectKeyIndex': function(anObject) {
113 var result;
114 varitemReference;
115 var index;
116
117 result = {};
118 index = 0;
119
120 for (itemReference in anObject) {
121 result[itemReference] = index.toString();
122 index ++;
123 }
124
125 return result;
126 },
127
128 //-------------------------------------------------------------------------
129
130 'serializedDataWithRecordAndDirectLoginIndexes': function(aRecordIndexes, aDirectLoginIndexs) {
131 var result;
132 var records;
133 var recordReference;
134
135//MochiKit.Logging.logDebug(">>> Header.serializedData");
136 result = {
137 'records': {},
138 'directLogins': {}
139 };
140
141 records = this.user().records();
142 for (recordReference in records) {
143 result['records'][aRecordIndexes[recordReference]] = this.user().records()[recordReference].headerData();
144 }
145
146 for (directLoginReference in this.user().directLoginReferences()) {
147 var currentDirectLogin;
148 vardirectLoginData;
149
150 currentDirectLogin = this.user().directLoginReferences()[directLoginReference];
151 if (aRecordIndexes[currentDirectLogin.recordReference()] != null) {
152 directLoginData = {
153 // reference: currentDirectLogin.reference(),
154 record: aRecordIndexes[currentDirectLogin.recordReference()].toString(),
155 label: currentDirectLogin.label(),
156 favicon:currentDirectLogin.favicon() || ""
157 }
158
159 result['directLogins'][aDirectLoginIndexs[directLoginReference]] = directLoginData;
160 }
161
162 }
163//MochiKit.Logging.logDebug("<<< Header.serializedData - result: " + Clipperz.Base.serializeJSON(result));
164//MochiKit.Logging.logDebug("<<< Header.serializedData");
165
166 return result;
167 },
168
169 //-------------------------------------------------------------------------
170
171 'encryptedData': function() {
172 var deferredResult;
173 var recordIndex;
174 var directLoginIndex;
175 varserializedData;
176 var result;
177
178//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Header.encryptedData");
179//MochiKit.Logging.logDebug("### Header.encryptedData - " + Clipperz.Base.serializeJSON(this.updatedSections()));
180 result = {
181 'records': this.cachedServerDataSection('records'),
182 'directLogins': this.cachedServerDataSection('directLogins'),
183 'preferences': this.cachedServerDataSection('preferences'),
184 'oneTimePasswords': this.cachedServerDataSection('oneTimePasswords'),
185 'version': '0.1'
186 };
187
188 if (this.hasSectionBeenUpdated('records')) {
189 recordIndex = this.getObjectKeyIndex(this.user().records());
190 result['records']['index'] = recordIndex;
191 } else {
192 recordIndex = result['records']['index'];
193 }
194
195 if (this.hasSectionBeenUpdated('directLogins')) {
196 directLoginIndex = this.getObjectKeyIndex(this.user().directLoginReferences());
197 result['directLogins']['index'] = directLoginIndex;
198 } else {
199 directLoginIndex = result['directLogins']['index'];
200 }
201
202 if (this.hasSectionBeenUpdated('records') || this.hasSectionBeenUpdated('directLogins')) {
203 serializedData = this.serializedDataWithRecordAndDirectLoginIndexes(recordIndex, directLoginIndex);
204 }
205
206 deferredResult = new MochiKit.Async.Deferred();
207
208//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1: " + res); return res;});
209 if (this.hasSectionBeenUpdated('records')) {
210//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.1: " + res); return res;});
211 deferredResult.addCallback(function(anHeader, aResult, aSerializedData, aValue) {
212 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), aSerializedData['records']);
213 }, this, result, serializedData);
214//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.2: " + res); return res;});
215 deferredResult.addCallback(function(anHeader, aResult, aValue) {
216 aResult['records']['data'] = aValue;
217 }, this, result);
218//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 1.3: " + res); return res;});
219 }
220
221//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2: " + res); return res;});
222 if (this.hasSectionBeenUpdated('directLogins')) {
223//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.1: " + res); return res;});
224 deferredResult.addCallback(function(anHeader, aResult, aSerializedData, aValue) {
225 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), aSerializedData['directLogins']);
226 }, this, result, serializedData);
227//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.2: " + res); return res;});
228 deferredResult.addCallback(function(anHeader, aResult, aValue) {
229 aResult['directLogins']['data'] = aValue;
230 }, this, result);
231//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 2.3: " + res); return res;});
232 }
233
234//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3: " + res); return res;});
235 if (this.hasSectionBeenUpdated('preferences')) {
236//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.1: " + res); return res;});
237 deferredResult.addCallback(function(anHeader, aResult, aValue) {
238 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), anHeader.user().preferences().serializedData());
239 }, this, result);
240//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.2: " + res); return res;});
241 deferredResult.addCallback(function(anHeader, aResult, aValue) {
242 aResult['preferences']['data'] = aValue;
243 }, this, result);
244//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 3.3: " + res); return res;});
245 }
246
247//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4: " + res); return res;});
248 if (this.hasSectionBeenUpdated('oneTimePasswords')) {
249//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.1: " + res); return res;});
250 // deferredResult.addCallback(MochiKit.Base.method(this, 'loadOneTimePasswords'));
251//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.2: " + res); return res;});
252 deferredResult.addCallback(function(anHeader, aResult, aValue) {
253 return Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion(anHeader.user().passphrase(), anHeader.user().oneTimePasswordManager().serializedData());
254 }, this, result);
255//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.3: " + res); return res;});
256 deferredResult.addCallback(function(anHeader, aResult, aValue) {
257 aResult['oneTimePasswords']['data'] = aValue;
258 }, this, result);
259//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 4.4: " + res); return res;});
260 }
261
262//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 5: " + res); return res;});
263 deferredResult.addCallback(function(anHeader, aResult, aValue) {
264 var serverData;
265
266 serverData = Clipperz.Base.serializeJSON(aResult);
267 anHeader.setServerData(serverData);
268
269 return serverData;
270 }, this, result);
271//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.encryptedData - 6: " + res); return res;});
272
273 deferredResult.callback();
274//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Header.encryptedData");
275
276 return deferredResult;
277 },
278
279 //-------------------------------------------------------------------------
280
281 'serverData': function() {
282 return this._serverData;
283 },
284
285 'setServerData': function(aValue) {
286//MochiKit.Logging.logDebug(">>> Header.setServerData");
287//MochiKit.Logging.logDebug("[start]=============================================");
288//MochiKit.Logging.logDebug("SERVER_DATA: " + aValue);
289//MochiKit.Logging.logDebug("[end]===============================================");
290 this._serverData = aValue;
291//MochiKit.Logging.logDebug("--- Header.setServerData - 1");
292 this.resetUpdatedSections();
293//MochiKit.Logging.logDebug("--- Header.setServerData - 2");
294 this.resetJsonEvaledServerData();
295//MochiKit.Logging.logDebug("<<< Header.setServerData");
296 },
297
298 'jsonEvaledServerData': function() {
299 if (this._jsonEvaledServerData == null) {
300 this._jsonEvaledServerData = Clipperz.Base.evalJSON(this.serverData());
301 }
302
303 return this._jsonEvaledServerData;
304 },
305
306 'resetJsonEvaledServerData': function() {
307 this._jsonEvaledServerData = null;
308 },
309
310 //-------------------------------------------------------------------------
311
312 'serverDataVersion': function() {
313 return this._serverDataVersion;
314 },
315
316 'setServerDataVersion': function(aValue) {
317 this._serverDataVersion = aValue;
318 },
319
320 //-------------------------------------------------------------------------
321
322 'decryptedLegacyServerData': function() {
323 var deferredResult;
324
325//MochiKit.Logging.logDebug(">>> Header.decryptedLegacyServerData");
326 deferredResult = new MochiKit.Async.Deferred();
327//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 1: "/* + res*/); return res;});
328//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
329 deferredResult.addCallback(MochiKit.Base.method(this, 'updateAllSections'));
330//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 2: "/* + res*/); return res;});
331//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
332 if (this._decryptedLegacyServerData == null) {
333//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 3: "/* + res*/); return res;});
334//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
335 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_decryptingUserData');
336//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 4: "/* + res*/); return res;});
337//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
338 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.user().passphrase(), this.serverData(), this.serverDataVersion());
339//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 5: "/* + res*/); return res;});
340//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
341 deferredResult.addCallback(function(anHeader, aValue) {
342 anHeader._decryptedLegacyServerData = aValue;
343 }, this);
344//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 6: "/* + res*/); return res;});
345//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
346 };
347//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 7: "/* + res*/); return res;});
348//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
349
350 deferredResult.addCallback(function(anHeader) {
351 return anHeader._decryptedLegacyServerData;
352 }, this);
353//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.decryptedLegacyServerData 8: "/* + res*/); return res;});
354//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
355 deferredResult.callback();
356//MochiKit.Logging.logDebug("<<< Header.decryptedLegacyServerData");
357
358 return deferredResult;
359 },
360
361 //-------------------------------------------------------------------------
362
363 'serverDataFormat': function() {
364 var result;
365
366//MochiKit.Logging.logDebug(">>> Header.serverDataFormat");
367 if (this.serverData().charAt(0) == '{') {
368 varserverData;
369
370 serverData = Clipperz.Base.evalJSON(this.serverData());
371 result = serverData['version'];
372 } else {
373 result = 'LEGACY';
374 }
375//MochiKit.Logging.logDebug("<<< Header.serverDataFormat");
376
377 return result;
378 },
379
380 //-------------------------------------------------------------------------
381
382 'extractHeaderDataFromUserDetails': function(someUserDetails) {
383 if (this.serverData() == null) {
384 this.setServerData(someUserDetails['header']);
385 this.setServerDataVersion(someUserDetails['version'])
386 }
387 },
388
389 //-------------------------------------------------------------------------
390
391 'extractDataWithKey': function(aKey) {
392 var deferredResult;
393
394//MochiKit.Logging.logDebug(">>> Header.extractDataWithKey");
395 deferredResult = new MochiKit.Async.Deferred();
396
397 switch (this.serverDataFormat()) {
398 case 'LEGACY':
399//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 1: "/* + res*/); return res;});
400//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
401 deferredResult.addCallback(MochiKit.Base.method(this, 'decryptedLegacyServerData'));
402//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 2: "/* + res*/); return res;});
403//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
404 deferredResult.addCallback(function(someDecryptedValues) {
405 return someDecryptedValues[aKey] || {};
406 })
407//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 3: "/* + res*/); return res;});
408//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
409 break;
410 case '0.1':
411 var data;
412
413 //# data = Clipperz.Base.evalJSON(this.serverData());
414 data = this.jsonEvaledServerData();
415 if (typeof(data[aKey]) != 'undefined') {
416//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 4: "/* + res*/); return res;});
417//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
418 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_decryptingUserData');
419//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 5: "/* + res*/); return res;});
420//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
421 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.user().passphrase(), data[aKey]['data'], this.serverDataVersion());
422//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 6: "/* + res*/); return res;});
423//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
424 deferredResult.addCallback(function(/*anHeader,*/ aKey, aData, aRecordIndex, aValue) {
425 var result;
426//MochiKit.Logging.logDebug(">>> [start] ===============================================");
427//MochiKit.Logging.logDebug("--- extractDataWithKey - 0 [" + aKey + "]: " + Clipperz.Base.serializeJSON(aValue));
428//MochiKit.Logging.logDebug("<<< [end] =================================================");
429 if (aKey == 'records') {
430 var recordKey;
431
432 result = {};
433 for (recordKey in aData['index']) {
434 result[recordKey] = aValue[aData['index'][recordKey]];
435 }
436 } else if (aKey == 'directLogins') {
437 varrecordKeyReversedIndex;
438 var recordKey;
439 var directLoginKey;
440
441 result = {};
442 recordKeyReversedIndex = {};
443
444 for (recordKey in aRecordIndex) {
445 recordKeyReversedIndex[aRecordIndex[recordKey]] = recordKey;
446 }
447
448//MochiKit.Logging.logDebug("--- extractDataWithKey - 1 - aData['index']: " + Clipperz.Base.serializeJSON(aData['index']));
449 for (directLoginKey in aData['index']) {
450try {
451 if ((aData['index'][directLoginKey] != null) && (aValue[aData['index'][directLoginKey]] != null)) {
452 result[directLoginKey] = aValue[aData['index'][directLoginKey]];
453 result[directLoginKey]['record'] = recordKeyReversedIndex[result[directLoginKey]['record']];
454 }
455} catch(exception) {
456 //result[directLoginKey] has no properties
457 MochiKit.Logging.logDebug("[Header 391] EXCEPTION: " + exception);
458 throw exception;
459}
460 }
461//MochiKit.Logging.logDebug("--- extractDataWithKey - 2");
462 } else {
463 result = aValue;
464 }
465
466 return result;
467 }, /*this,*/ aKey, data[aKey], data['records']['index']);
468//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 6: "/* + res*/); return res;});
469//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
470 } else {
471//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 7: "/* + res*/); return res;});
472//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
473 deferredResult.addCallback(MochiKit.Async.succeed, {});
474//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 8: "/* + res*/); return res;});
475//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
476 }
477 break;
478 }
479
480//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.extractDataWithKey 9: "/* + res*/); return res;});
481//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
482 deferredResult.callback();
483//MochiKit.Logging.logDebug("<<< Header.extractDataWithKey");
484
485 return deferredResult;
486 },
487
488 //-------------------------------------------------------------------------
489
490 'processRecordData': function(someRecordData) {
491 var records;
492 varrecordReference;
493
494//console.log("HeaderRecordData parameters", someRecordData);
495//MochiKit.Logging.logDebug(">>> Header.processRecordData");
496 records = someRecordData;
497//MochiKit.Logging.logDebug("--- Header.processRecordData - 1");
498 if (records != null) {
499//MochiKit.Logging.logDebug("--- Header.processRecordData - records: " + Clipperz.Base.serializeJSON(records));
500 for (recordReference in records) {
501 var newRecord;
502 var parameters;
503
504//MochiKit.Logging.logDebug("--- Header.processRecordData - 2 - recordReference: " + recordReference);
505 if (recordReference != "stacktrace") {
506 parameters = records[recordReference];//.slice();
507//MochiKit.Logging.logDebug("--- Header.processRecordData - 3");
508 if (typeof(parameters['notes']) != 'undefined') {
509//MochiKit.Logging.logDebug("--- Header.processRecordData - 4");
510 if (parameters['notes'] != "") {
511//MochiKit.Logging.logDebug("--- Header.processRecordData - 5");
512 parameters['headerNotes'] = parameters['notes'];
513//MochiKit.Logging.logDebug("--- Header.processRecordData - 6");
514 }
515//MochiKit.Logging.logDebug("--- Header.processRecordData - 7");
516 delete parameters['notes'];
517//MochiKit.Logging.logDebug("--- Header.processRecordData - 8");
518 }
519//MochiKit.Logging.logDebug("--- Header.processRecordData - 9");
520 parameters['reference'] = recordReference;
521//MochiKit.Logging.logDebug("--- Header.processRecordData - 10");
522 parameters['user'] = this.user();
523//MochiKit.Logging.logDebug("--- Header.processRecordData - 11");
524
525 newRecord = new Clipperz.PM.DataModel.Record(parameters);
526//MochiKit.Logging.logDebug("--- Header.processRecordData - 12");
527 this.user().addRecord(newRecord, true);
528//MochiKit.Logging.logDebug("--- Header.processRecordData - 13");
529 }
530 }
531
532//MochiKit.Logging.logDebug("--- Header.processRecordData - 14");
533 Clipperz.NotificationCenter.notify(null, 'recordAdded', null, true);
534//MochiKit.Logging.logDebug("--- Header.processRecordData - 15");
535 }
536//MochiKit.Logging.logDebug("<<< Header.processRecordData");
537
538 return this.user().records();
539 },
540
541 //-------------------------------------------------------------------------
542
543 'processDirectLoginData': function(someDirectLoginData) {
544 var directLogins;
545 var directLoginReference;
546
547//MochiKit.Logging.logDebug(">>> Header.processDirectLoginData");
548 directLogins = someDirectLoginData;
549 if (directLogins != null) {
550 for (directLoginReference in directLogins) {
551 var directLoginReference;
552 var parameters;
553
554 parameters = directLogins[directLoginReference];//.slice();
555 parameters.user = this.user();
556 parameters.reference = directLoginReference;
557 directLoginReference = new Clipperz.PM.DataModel.DirectLoginReference(parameters);
558 if (directLoginReference.record() != null) {
559 this.user().addDirectLoginReference(directLoginReference, true);
560 }
561 }
562 }
563
564 Clipperz.NotificationCenter.notify(null, 'directLoginAdded', null, true);
565//MochiKit.Logging.logDebug("<<< Header.processDirectLoginData");
566
567 return this.user().directLoginReferences();
568 },
569
570 //-------------------------------------------------------------------------
571
572 'shouldLoadSections': function() {
573 return this._shouldLoadSections;
574 },
575
576 'shouldLoadSection': function(aSectionName) {
577 var result;
578
579 if (typeof(this.shouldLoadSections()[aSectionName]) != 'undefined') {
580 result = this.shouldLoadSections()[aSectionName];
581 } else {
582 result = true;
583 }
584
585 return result;
586 },
587
588 'setShouldLoadSection': function(aSectionName, aValue) {
589 this.shouldLoadSections()[aSectionName] = aValue;
590 },
591
592 //-------------------------------------------------------------------------
593
594 'loadRecords': function() {
595 var deferredResult;
596
597 if (this.shouldLoadSection('records') == true) {
598 this.setShouldLoadSection('records', false);
599
600 deferredResult = new MochiKit.Async.Deferred();
601//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 1: "/* + res*/); return res;});
602//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
603 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
604//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 2: "/* + res*/); return res;});
605//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
606 deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
607//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 3: "/* + res*/); return res;});
608//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
609 deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'records'));
610//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 4: "/* + res*/); return res;});
611//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
612 deferredResult.addCallback(MochiKit.Base.method(this, 'processRecordData'));
613//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadRecords 5: "/* + res*/); return res;});
614//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
615 deferredResult.callback();
616 } else {
617 deferredResult = MochiKit.Async.succeed(this.user().records());
618 }
619
620 return deferredResult;
621 },
622
623 //-------------------------------------------------------------------------
624
625 'loadDirectLogins': function() {
626 var deferredResult;
627
628 if (this.shouldLoadSection('directLogins') == true) {
629 this.setShouldLoadSection('directLogins', false);
630
631 deferredResult = new MochiKit.Async.Deferred();
632//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 1: "/* + res*/); return res;});
633//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
634 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
635//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 2: "/* + res*/); return res;});
636//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
637 deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
638//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 3: "/* + res*/); return res;});
639//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
640 deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'directLogins'));
641//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 4: "/* + res*/); return res;});
642//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
643 deferredResult.addCallback(MochiKit.Base.method(this, 'processDirectLoginData'));
644//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadDirectLogins - 5: "/* + res*/); return res;});
645//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
646 deferredResult.callback();
647 } else {
648 deferredResult = MochiKit.Async.succeed(this.user().directLoginReferences());
649 }
650
651 return deferredResult;
652 },
653
654 //-------------------------------------------------------------------------
655
656 'loadPreferences': function() {
657 var deferredResult;
658
659 if (this.shouldLoadSection('preferences') == true) {
660 this.setShouldLoadSection('preferences', false);
661
662 deferredResult = new MochiKit.Async.Deferred();
663//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 1: "/* + res*/); return res;});
664//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
665 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
666//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 2: "/* + res*/); return res;});
667//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
668 deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
669//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 3: "/* + res*/); return res;});
670//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
671 deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'preferences'));
672//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 4: "/* + res*/); return res;});
673//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
674 deferredResult.addCallback(MochiKit.Base.method(this.user().preferences(), 'updateWithData'));
675//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadPreferences - 5: "/* + res*/); return res;});
676//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
677 deferredResult.callback();
678 } else {
679 deferredResult = MochiKit.Async.succeed(this.user().preferences());
680 }
681
682 return deferredResult;
683 },
684
685 //-------------------------------------------------------------------------
686
687 'loadOneTimePasswords': function() {
688 var deferredResult;
689
690 if (this.shouldLoadSection('oneTimePasswords') == true) {
691 this.setShouldLoadSection('oneTimePasswords', false);
692
693 deferredResult = new MochiKit.Async.Deferred();
694//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 1: "/* + res*/); return res;});
695//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
696 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'getUserDetails'));
697//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 2: "/* + res*/); return res;});
698//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
699 deferredResult.addCallback(MochiKit.Base.method(this, 'extractHeaderDataFromUserDetails'));
700//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 3: "/* + res*/); return res;});
701//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
702 deferredResult.addCallback(MochiKit.Base.method(this, 'extractDataWithKey', 'oneTimePasswords'));
703//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 4: "/* + res*/); return res;});
704//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
705 deferredResult.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'updateWithData'));
706//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 5: "/* + res*/); return res;});
707//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
708 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getOneTimePasswordsDetails', {});
709//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 6: "/* + res*/); return res;});
710//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
711 deferredResult.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'updateWithServerData'));
712//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadOneTimePasswords - 7: "/* + res*/); return res;});
713//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
714 deferredResult.callback();
715 } else {
716 deferredResult = MochiKit.Async.succeed(this.user().oneTimePasswordManager());
717 }
718
719 return deferredResult;
720 },
721
722 //-------------------------------------------------------------------------
723
724 'loadAllSections': function() {
725 var deferredResult;
726
727 deferredResult = new MochiKit.Async.Deferred();
728//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 1: "/* + res*/); return res;});
729//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
730 deferredResult.addCallback(MochiKit.Base.method(this, 'loadRecords'));
731//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 2: "/* + res*/); return res;});
732//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
733 deferredResult.addCallback(MochiKit.Base.method(this, 'loadDirectLogins'));
734//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 3: "/* + res*/); return res;});
735//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
736 deferredResult.addCallback(MochiKit.Base.method(this, 'loadPreferences'));
737//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 4: "/* + res*/); return res;});
738//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
739 deferredResult.addCallback(MochiKit.Base.method(this, 'loadOneTimePasswords'));
740//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Header.loadAllSections - 5: "/* + res*/); return res;});
741//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
742 deferredResult.callback();
743
744 return deferredResult;
745 },
746
747 //-------------------------------------------------------------------------
748 __syntaxFix__: "syntax fix"
749
750});
751