summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/User.js9
1 files changed, 7 insertions, 2 deletions
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/User.js b/frontend/beta/js/Clipperz/PM/DataModel/User.js
index b065557..b29d224 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/User.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/User.js
@@ -1,904 +1,909 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager. 6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 7For further information about its features and functionalities please
8refer to http://www.clipperz.com. 8refer to http://www.clipperz.com.
9 9
10* Clipperz Community Edition is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
11 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
12 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
14 14
15* Clipperz Community Edition is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
19 19
20* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
23 23
24*/ 24*/
25 25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } 28if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
29 29
30 30
31//############################################################################# 31//#############################################################################
32 32
33Clipperz.PM.DataModel.User = function(args) { 33Clipperz.PM.DataModel.User = function(args) {
34//MochiKit.Logging.logDebug(">>> new User"); 34//MochiKit.Logging.logDebug(">>> new User");
35 args = args || {}; 35 args = args || {};
36 36
37 this._username = args.username || null; 37 this._username = args.username || null;
38 this._passphrase = args.passphrase || null; 38 this._passphrase = args.passphrase || null;
39 39
40 this._connection = null; 40 this._connection = null;
41 this._connectionVersion = 'current'; 41 this._connectionVersion = 'current';
42 42
43 this._header = null; 43 this._header = null;
44 this._statistics = null; 44 this._statistics = null;
45 this._lock = 'new lock'; 45 this._lock = 'new lock';
46 46
47 this._preferences = null; 47 this._preferences = null;
48 this._records = {}; 48 this._records = {};
49 this._directLoginReferences = {}; 49 this._directLoginReferences = {};
50 this._oneTimePasswordManager = null; 50 this._oneTimePasswordManager = null;
51 51
52 this._isLoadingUserDetails = false; 52 this._isLoadingUserDetails = false;
53 this._loadingUserDetailsPendingQueue = []; 53 this._loadingUserDetailsPendingQueue = [];
54 54
55 this._maxNumberOfRecords = Number.MAX_VALUE; 55 this._maxNumberOfRecords = Number.MAX_VALUE;
56 56
57 this._shouldDownloadOfflineCopy = false; 57 this._shouldDownloadOfflineCopy = false;
58 58
59 this._loginInfo = null; 59 this._loginInfo = null;
60 this._loginHistory = null; 60 this._loginHistory = null;
61 61
62 this._serverData = null; 62 this._serverData = null;
63//MochiKit.Logging.logDebug("<<< new User"); 63//MochiKit.Logging.logDebug("<<< new User");
64 64
65 return this; 65 return this;
66} 66}
67 67
68Clipperz.PM.DataModel.User.prototype = MochiKit.Base.update(null, { 68Clipperz.PM.DataModel.User.prototype = MochiKit.Base.update(null, {
69 69
70 'toString': function() { 70 'toString': function() {
71 return "Clipperz.PM.DataModel.User - " + this.username(); 71 return "Clipperz.PM.DataModel.User - " + this.username();
72 }, 72 },
73 73
74 //------------------------------------------------------------------------- 74 //-------------------------------------------------------------------------
75 75
76 'username': function() { 76 'username': function() {
77 return this._username; 77 return this._username;
78 }, 78 },
79 79
80 'setUsername': function(aValue) { 80 'setUsername': function(aValue) {
81 this._username = aValue; 81 this._username = aValue;
82 }, 82 },
83 83
84 //------------------------------------------------------------------------- 84 //-------------------------------------------------------------------------
85 85
86 'passphrase': function() { 86 'passphrase': function() {
87 return this._passphrase; 87 return this._passphrase;
88 }, 88 },
89 89
90 'setPassphrase': function(aValue) { 90 'setPassphrase': function(aValue) {
91 this._passphrase = aValue; 91 this._passphrase = aValue;
92 }, 92 },
93 93
94 //------------------------------------------------------------------------- 94 //-------------------------------------------------------------------------
95 95
96 'maxNumberOfRecords': function() { 96 'maxNumberOfRecords': function() {
97 return this._maxNumberOfRecords; 97 return this._maxNumberOfRecords;
98 }, 98 },
99 99
100 'setMaxNumberOfRecords': function(aValue) { 100 'setMaxNumberOfRecords': function(aValue) {
101 this._maxNumberOfRecords = aValue; 101 this._maxNumberOfRecords = aValue;
102 }, 102 },
103 103
104 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
105 105
106 'errorHandler': function(anErrorString, anException) { 106 'errorHandler': function(anErrorString, anException) {
107MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anException + ")"); 107MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anException + ")");
108 }, 108 },
109 109
110 //------------------------------------------------------------------------- 110 //-------------------------------------------------------------------------
111 111
112 'connectionVersion': function() { 112 'connectionVersion': function() {
113 return this._connectionVersion; 113 return this._connectionVersion;
114 }, 114 },
115 115
116 'setConnectionVersion': function(aValue) { 116 'setConnectionVersion': function(aValue) {
117 this._connectionVersion = aValue; 117 this._connectionVersion = aValue;
118 }, 118 },
119 119
120 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
121 121
122 'connection': function() { 122 'connection': function() {
123 if ((this._connection == null) && (this.connectionVersion() != null) ){ 123 if ((this._connection == null) && (this.connectionVersion() != null) ){
124 this._connection = new Clipperz.PM.Crypto.communicationProtocol.versions[this.connectionVersion()]({user:this}); 124 this._connection = new Clipperz.PM.Crypto.communicationProtocol.versions[this.connectionVersion()]({user:this});
125 } 125 }
126 126
127 return this._connection; 127 return this._connection;
128 }, 128 },
129 129
130 'resetConnection': function(aValue) { 130 'resetConnection': function(aValue) {
131 this._connection = null; 131 this._connection = null;
132 }, 132 },
133 133
134 //========================================================================= 134 //=========================================================================
135 135
136 'register': function(anInvitationCode) { 136 'register': function(anInvitationCode) {
137 vardeferredResult; 137 vardeferredResult;
138 var prng; 138 var prng;
139 139
140//MochiKit.Logging.logError(">>> User.register: " + this); 140//MochiKit.Logging.logError(">>> User.register: " + this);
141 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator(); 141 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator();
142 142
143 deferredResult = new MochiKit.Async.Deferred() 143 deferredResult = new MochiKit.Async.Deferred()
144//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 1: " + res); return res;}); 144//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 1: " + res); return res;});
145 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection')); 145 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection'));
146//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2: " + res); return res;}); 146//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2: " + res); return res;});
147 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'), anInvitationCode); 147 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'), anInvitationCode);
148//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2.1: " + res); return res;}); 148//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 2.1: " + res); return res;});
149 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'register'), anInvitationCode); 149 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'register'), anInvitationCode);
150//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 3: " + res); return res;}); 150//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.register - 3: " + res); return res;});
151 deferredResult.callback(); 151 deferredResult.callback();
152//MochiKit.Logging.logError("<<< User.register"); 152//MochiKit.Logging.logError("<<< User.register");
153 153
154 return deferredResult; 154 return deferredResult;
155 }, 155 },
156 156
157 //========================================================================= 157 //=========================================================================
158 158
159 'connect': function(aValue) { 159 'connect': function(aValue) {
160 vardeferredResult; 160 vardeferredResult;
161 var prng; 161 var prng;
162 162
163 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator(); 163 prng = Clipperz.Crypto.PRNG.defaultRandomGenerator();
164 164
165//MochiKit.Logging.logDebug(">>> User.connect"); 165//MochiKit.Logging.logDebug(">>> User.connect");
166 deferredResult = new MochiKit.Async.Deferred(); 166 deferredResult = new MochiKit.Async.Deferred();
167//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.1 - User.connect - 1: "/* + res*/); return res;}); 167//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.1 - User.connect - 1: "/* + res*/); return res;});
168//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 168//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
169 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection')); 169 deferredResult.addCallback(MochiKit.Base.method(prng, 'deferredEntropyCollection'));
170//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.2 - User.connect - 2: "/* + res*/); return res;}); 170//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.2 - User.connect - 2: "/* + res*/); return res;});
171//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 171//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
172 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'login')); 172 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'login'));
173//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.3 - User.connect - 3: "/* + res*/); return res;}); 173//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.3 - User.connect - 3: "/* + res*/); return res;});
174//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 174//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
175 175
176 // TODO:add an addErrback call here to manage a wrong login. Any error after this point is due to some other causes. 176 // TODO:add an addErrback call here to manage a wrong login. Any error after this point is due to some other causes.
177 // possibly the same exact 'handleConnectionFallback use at the end of this same method. 177 // possibly the same exact 'handleConnectionFallback use at the end of this same method.
178 178
179 if (this.connectionVersion() != 'current') { 179 if (this.connectionVersion() != 'current') {
180 varcurrentConnection; 180 varcurrentConnection;
181 181
182 currentVersionConnection = new Clipperz.PM.Crypto.communicationProtocol.versions['current']({user:this}); 182 currentVersionConnection = new Clipperz.PM.Crypto.communicationProtocol.versions['current']({user:this});
183 183
184//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.4 - User.connect - 4: "/* + res*/); return res;}); 184//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.4 - User.connect - 4: "/* + res*/); return res;});
185//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 185//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
186 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_upgrading'); 186 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_upgrading');
187//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.5 - User.connect - 5: "/* + res*/); return res;}); 187//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.5 - User.connect - 5: "/* + res*/); return res;});
188//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 188//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
189 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'upgradeUserCredentials', currentVersionConnection.serverSideUserCredentials()); 189 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'upgradeUserCredentials', currentVersionConnection.serverSideUserCredentials());
190//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.6 - User.connect - 6: "/* + res*/); return res;}); 190//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.6 - User.connect - 6: "/* + res*/); return res;});
191//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 191//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
192 } 192 }
193 193
194//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.7 - User.connect - 7: "/* + res*/); return res;}); 194//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.7 - User.connect - 7: "/* + res*/); return res;});
195//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 195//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
196 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'userConnected', null); 196 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'userConnected', null);
197//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.8 - User.connect - 8: "/* + res*/); return res;}); 197//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.8 - User.connect - 8: "/* + res*/); return res;});
198//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 198//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
199 deferredResult.addErrback(MochiKit.Base.method(this, 'handleConnectionFallback')); 199 deferredResult.addErrback(MochiKit.Base.method(this, 'handleConnectionFallback'));
200//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.9 - User.connect - 9: "/* + res*/); return res;}); 200//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.9 - User.connect - 9: "/* + res*/); return res;});
201//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 201//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
202 202
203 deferredResult.callback(aValue); 203 deferredResult.callback(aValue);
204//MochiKit.Logging.logDebug("<<< User.connect"); 204//MochiKit.Logging.logDebug("<<< User.connect");
205 205
206 return deferredResult; 206 return deferredResult;
207 }, 207 },
208 208
209 //......................................................................... 209 //.........................................................................
210 210
211 'handleConnectionFallback': function(aValue) { 211 'handleConnectionFallback': function(aValue) {
212 var result; 212 var result;
213//MochiKit.Logging.logDebug(">>> User.handleConnectionFallback"); 213//MochiKit.Logging.logDebug(">>> User.handleConnectionFallback");
214 if (aValue instanceof MochiKit.Async.CancelledError) { 214 if (aValue instanceof MochiKit.Async.CancelledError) {
215//MochiKit.Logging.logDebug("--- User.handleConnectionFallback - operation cancelled"); 215//MochiKit.Logging.logDebug("--- User.handleConnectionFallback - operation cancelled");
216 result = aValue; 216 result = aValue;
217 } else { 217 } else {
218 218
219//MochiKit.Logging.logDebug("--- User.handleConnectionFallback - an ERROR has occurred - " + aValue); 219//MochiKit.Logging.logDebug("--- User.handleConnectionFallback - an ERROR has occurred - " + aValue);
220 this.resetConnection(); 220 this.resetConnection();
221 this.setConnectionVersion(Clipperz.PM.Crypto.communicationProtocol.fallbackVersions[this.connectionVersion()]); 221 this.setConnectionVersion(Clipperz.PM.Crypto.communicationProtocol.fallbackVersions[this.connectionVersion()]);
222 222
223 if (this.connectionVersion() != null) { 223 if (this.connectionVersion() != null) {
224 result = new MochiKit.Async.Deferred(); 224 result = new MochiKit.Async.Deferred();
225 225
226 result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_tryOlderSchema'); 226 result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_tryOlderSchema');
227 result.addCallback(MochiKit.Base.method(this, 'connect')); 227 result.addCallback(MochiKit.Base.method(this, 'connect'));
228 result.callback(); 228 result.callback();
229 } else { 229 } else {
230 result = MochiKit.Async.fail(Clipperz.PM.DataModel.User.exception.LoginFailed); 230 result = MochiKit.Async.fail(Clipperz.PM.DataModel.User.exception.LoginFailed);
231 } 231 }
232 } 232 }
233//MochiKit.Logging.logDebug("<<< User.handleConnectionFallback"); 233//MochiKit.Logging.logDebug("<<< User.handleConnectionFallback");
234 return result; 234 return result;
235 }, 235 },
236 236
237 //========================================================================= 237 //=========================================================================
238 238
239 'header': function() { 239 'header': function() {
240 if (this._header == null) { 240 if (this._header == null) {
241 this._header = new Clipperz.PM.DataModel.Header({user:this}); 241 this._header = new Clipperz.PM.DataModel.Header({user:this});
242 } 242 }
243 return this._header; 243 return this._header;
244 }, 244 },
245 245
246 //------------------------------------------------------------------------- 246 //-------------------------------------------------------------------------
247 247
248 'statistics': function() { 248 'statistics': function() {
249 if (this._statistics == null) { 249 if (this._statistics == null) {
250 this._statistics = new Clipperz.PM.DataModel.Statistics({user:this}); 250 this._statistics = new Clipperz.PM.DataModel.Statistics({user:this});
251 } 251 }
252 return this._statistics; 252 return this._statistics;
253 }, 253 },
254 254
255 //------------------------------------------------------------------------- 255 //-------------------------------------------------------------------------
256 256
257 'records': function() { 257 'records': function() {
258 return this._records; 258 return this._records;
259 }, 259 },
260 260
261 //......................................................................... 261 //.........................................................................
262 262
263 'addRecord': function(aValue, isBatchUpdate) { 263 'addRecord': function(aValue, isBatchUpdate) {
264 this.records()[aValue.reference()] = aValue; 264 this.records()[aValue.reference()] = aValue;
265 265
266 if (isBatchUpdate != true) { 266 if (isBatchUpdate != true) {
267 Clipperz.NotificationCenter.notify(aValue, 'recordAdded', null, true); 267 Clipperz.NotificationCenter.notify(aValue, 'recordAdded', null, true);
268 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); 268 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true);
269 } 269 }
270 }, 270 },
271 271
272 //----------------------------------------------------------------------------- 272 //-----------------------------------------------------------------------------
273 273
274 'addNewRecord': function() { 274 'addNewRecord': function() {
275 varrecord; 275 varrecord;
276 276
277//MochiKit.Logging.logDebug(">>> User.addNewRecord"); 277//MochiKit.Logging.logDebug(">>> User.addNewRecord");
278 record = new Clipperz.PM.DataModel.Record({user:this}); 278 record = new Clipperz.PM.DataModel.Record({user:this});
279 this.addRecord(record); 279 this.addRecord(record);
280 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); 280 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true);
281//MochiKit.Logging.logDebug("<<< User.addNewRecord"); 281//MochiKit.Logging.logDebug("<<< User.addNewRecord");
282 282
283 return record; 283 return record;
284 }, 284 },
285 285
286 //------------------------------------------------------------------------- 286 //-------------------------------------------------------------------------
287 287
288 'saveRecords': function(someRecords /*, aMethodName*/) { 288 'saveRecords': function(someRecords /*, aMethodName*/) {
289 var deferredResult; 289 var deferredResult;
290 // var methodName; 290 // var methodName;
291 varresult; 291 varresult;
292 var i,c; 292 var i,c;
293 293
294//console.log("User.saveRecords - someRecords", someRecords); 294//console.log("User.saveRecords - someRecords", someRecords);
295 // methodName = aMethodName || 'addNewRecords'; 295 // methodName = aMethodName || 'addNewRecords';
296 296
297 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); 297 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true);
298//MochiKit.Logging.logDebug(">>> User.saveRecords"); 298//MochiKit.Logging.logDebug(">>> User.saveRecords");
299//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] User.saveRecords"); 299//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] User.saveRecords");
300/* 300/*
301MochiKit.Logging.logDebug("--- User.saveRecords - 1"); 301MochiKit.Logging.logDebug("--- User.saveRecords - 1");
302 MochiKit.Iter.forEach(someRecords, function(aRecord) { 302 MochiKit.Iter.forEach(someRecords, function(aRecord) {
303 if (aRecord.headerNotes() != null) { 303 if (aRecord.headerNotes() != null) {
304 aRecord.setNotes(aRecord.headerNotes()); 304 aRecord.setNotes(aRecord.headerNotes());
305 } 305 }
306 aRecord.syncDirectLoginReferenceValues(); 306 aRecord.syncDirectLoginReferenceValues();
307 aRecord.currentVersion().createNewVersion(); 307 aRecord.currentVersion().createNewVersion();
308 aRecord.updateKey(); 308 aRecord.updateKey();
309 }); 309 });
310MochiKit.Logging.logDebug("--- User.saveRecords - 2"); 310MochiKit.Logging.logDebug("--- User.saveRecords - 2");
311*/ 311*/
312 312
313 result = {'records': []}; 313 result = {
314 'records': {
315 // 'deleted': [],
316 'updated': []
317 }
318 };
314 319
315 deferredResult = new MochiKit.Async.Deferred(); 320 deferredResult = new MochiKit.Async.Deferred();
316 c = someRecords.length; 321 c = someRecords.length;
317 for (i=0; i<c; i++) { 322 for (i=0; i<c; i++) {
318 deferredResult.addCallback(function(aRecord) { 323 deferredResult.addCallback(function(aRecord) {
319 if (aRecord.headerNotes() != null) { 324 if (aRecord.headerNotes() != null) {
320 aRecord.setNotes(aRecord.headerNotes()); 325 aRecord.setNotes(aRecord.headerNotes());
321 } 326 }
322 aRecord.syncDirectLoginReferenceValues(); 327 aRecord.syncDirectLoginReferenceValues();
323 aRecord.currentVersion().createNewVersion(); 328 aRecord.currentVersion().createNewVersion();
324 aRecord.updateKey(); 329 aRecord.updateKey();
325 }, someRecords[i]); 330 }, someRecords[i]);
326 deferredResult.addCallback(MochiKit.Async.wait, 0.1); 331 deferredResult.addCallback(MochiKit.Async.wait, 0.1);
327 } 332 }
328//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 1 " + res); return res;}); 333//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 1 " + res); return res;});
329 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 334 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
330//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 2 " + res); return res;}); 335//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 2 " + res); return res;});
331 336
332 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 337 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
333//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 3 " + res); return res;}); 338//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 3 " + res); return res;});
334 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 339 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
335//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 4 " + res); return res;}); 340//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 4 " + res); return res;});
336 deferredResult.addCallback(function(aResult, res) { 341 deferredResult.addCallback(function(aResult, res) {
337 aResult['user'] = res; 342 aResult['user'] = res;
338 return aResult; 343 return aResult;
339 }, result); 344 }, result);
340//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 5 " + res); return res;}); 345//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 5 " + res); return res;});
341 346
342 c = someRecords.length; 347 c = someRecords.length;
343 for (i=0; i<c; i++) { 348 for (i=0; i<c; i++) {
344 var recordData; 349 var recordData;
345 350
346 recordData = {}; 351 recordData = {};
347 352
348//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.1 " + res); return res;}); 353//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.1 " + res); return res;});
349 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 354 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
350//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.2 " + res); return res;}); 355//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.2 " + res); return res;});
351 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'encryptedData')); 356 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'encryptedData'));
352//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.3 " + res); return res;}); 357//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.3 " + res); return res;});
353 deferredResult.addCallback(function(aResult, res) { 358 deferredResult.addCallback(function(aResult, res) {
354 aResult['record'] = res; 359 aResult['record'] = res;
355 return aResult; 360 return aResult;
356 }, recordData); 361 }, recordData);
357//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.4 " + res); return res;}); 362//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.4 " + res); return res;});
358 363
359 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', {} /*'saveCard_encryptRecordVersions'*/); 364 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', {} /*'saveCard_encryptRecordVersions'*/);
360//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.5 " + res); return res;}); 365//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.5 " + res); return res;});
361 deferredResult.addCallback(MochiKit.Base.method(someRecords[i].currentVersion(), 'encryptedData')); 366 deferredResult.addCallback(MochiKit.Base.method(someRecords[i].currentVersion(), 'encryptedData'));
362//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.6 " + res); return res;}); 367//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.6 " + res); return res;});
363 deferredResult.addCallback(function(aResult, res) { 368 deferredResult.addCallback(function(aResult, res) {
364 aResult['currentRecordVersion'] = res; 369 aResult['currentRecordVersion'] = res;
365 return aResult; 370 return aResult;
366 }, recordData); 371 }, recordData);
367//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.7 " + res); return res;}); 372//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.7 " + res); return res;});
368 373
369 deferredResult.addCallback(function(aResult, res) { 374 deferredResult.addCallback(function(aResult, res) {
370 aResult['records'] = { 'updated': [res] }; 375 aResult['records']['updated'].push(res);
371 return aResult; 376 return aResult;
372 }, result); 377 }, result);
373//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.8 " + res); return res;}); 378//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.8 " + res); return res;});
374 } 379 }
375 380
376//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 7 " + res); return res;}); 381//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 7 " + res); return res;});
377 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); 382 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData');
378//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 8 " + res); return res;}); 383//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 8 " + res); return res;});
379 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName); 384 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName);
380 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges'); 385 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges');
381//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9 " + res); return res;}); 386//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9 " + res); return res;});
382 387
383 for (i=0; i<c; i++) { 388 for (i=0; i<c; i++) {
384//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.1 " + res); return res;}); 389//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.1 " + res); return res;});
385 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'takeSnapshotOfCurrentData')); 390 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'takeSnapshotOfCurrentData'));
386//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.2 " + res); return res;}); 391//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.2 " + res); return res;});
387 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'setIsBrandNew'), false); 392 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'setIsBrandNew'), false);
388//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.3 " + res); return res;}); 393//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.3 " + res); return res;});
389 } 394 }
390 395
391//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 10 " + res); return res;}); 396//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 10 " + res); return res;});
392 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); 397 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated');
393//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 11 " + res); return res;}); 398//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 11 " + res); return res;});
394 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); 399 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated');
395//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 12 " + res); return res;}); 400//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 12 " + res); return res;});
396 deferredResult.callback(); 401 deferredResult.callback();
397 402
398 return deferredResult; 403 return deferredResult;
399 }, 404 },
400 405
401 //------------------------------------------------------------------------- 406 //-------------------------------------------------------------------------
402 407
403 'removeRecord': function(aRecord) { 408 'removeRecord': function(aRecord) {
404//MochiKit.Logging.logDebug(">>> User.removeRecord"); 409//MochiKit.Logging.logDebug(">>> User.removeRecord");
405 delete this.records()[aRecord.reference()]; 410 delete this.records()[aRecord.reference()];
406//MochiKit.Logging.logDebug("--- User.removeRecord - 1"); 411//MochiKit.Logging.logDebug("--- User.removeRecord - 1");
407 Clipperz.NotificationCenter.notify(aRecord, 'recordRemoved', null, false); 412 Clipperz.NotificationCenter.notify(aRecord, 'recordRemoved', null, false);
408 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); 413 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true);
409//MochiKit.Logging.logDebug("<<< User.removeRecord"); 414//MochiKit.Logging.logDebug("<<< User.removeRecord");
410 }, 415 },
411 416
412 //------------------------------------------------------------------------- 417 //-------------------------------------------------------------------------
413 418
414 'deleteRecordsAction': function(someRecords) { 419 'deleteRecordsAction': function(someRecords) {
415 vardeferredResult; 420 vardeferredResult;
416 var parameters; 421 var parameters;
417 422
418//MochiKit.Logging.logDebug(">>> User.deleteRecordsAction - someRecords.length: " + someRecords.length); 423//MochiKit.Logging.logDebug(">>> User.deleteRecordsAction - someRecords.length: " + someRecords.length);
419 parameters = {}; 424 parameters = {};
420 deferredResult = new MochiKit.Async.Deferred(); 425 deferredResult = new MochiKit.Async.Deferred();
421//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 1 " + res); return res;}); 426//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 1 " + res); return res;});
422 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_collectData'); 427 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_collectData');
423//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 2 " + res); return res;}); 428//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 2 " + res); return res;});
424 deferredResult.addCallback(function(someParameters, someRecords) { 429 deferredResult.addCallback(function(someParameters, someRecords) {
425 var recordReferences; 430 var recordReferences;
426 431
427 recordReferences = MochiKit.Base.map(function(aRecord) { 432 recordReferences = MochiKit.Base.map(function(aRecord) {
428 var result; 433 var result;
429 434
430 result = aRecord.reference(); 435 result = aRecord.reference();
431 aRecord.remove(); 436 aRecord.remove();
432 437
433 return result; 438 return result;
434 }, someRecords); 439 }, someRecords);
435 // someParameters.recordReferences = recordReferences; 440 // someParameters.recordReferences = recordReferences;
436 someParameters['records'] = { 'deleted': recordReferences}; 441 someParameters['records'] = { 'deleted': recordReferences};
437 442
438 return someParameters; 443 return someParameters;
439 }, parameters); 444 }, parameters);
440//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 3 " + res); return res;}); 445//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 3 " + res); return res;});
441 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_encryptData'); 446 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_encryptData');
442//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 4 " + res); return res;}); 447//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 4 " + res); return res;});
443 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 448 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
444//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 5 " + res); return res;}); 449//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 5 " + res); return res;});
445 deferredResult.addCallback(function(someParameters, anUserEncryptedData) { 450 deferredResult.addCallback(function(someParameters, anUserEncryptedData) {
446 someParameters.user = anUserEncryptedData; 451 someParameters.user = anUserEncryptedData;
447 return someParameters; 452 return someParameters;
448 }, parameters); 453 }, parameters);
449//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 6 " + res); return res;}); 454//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 6 " + res); return res;});
450 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_sendingData'); 455 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_sendingData');
451//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecords parameters: " + Clipperz.Base.serializeJSON(res)); return res;}); 456//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecords parameters: " + Clipperz.Base.serializeJSON(res)); return res;});
452//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 7 " + res); return res;}); 457//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 7 " + res); return res;});
453 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords'); 458 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords');
454 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges'); 459 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges');
455//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 8 " + res); return res;}); 460//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 8 " + res); return res;});
456 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_updatingInterface'); 461 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_updatingInterface');
457//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 9 " + res); return res;}); 462//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 9 " + res); return res;});
458 deferredResult.callback(someRecords); 463 deferredResult.callback(someRecords);
459//MochiKit.Logging.logDebug("<<< User.deleteRecordsAction"); 464//MochiKit.Logging.logDebug("<<< User.deleteRecordsAction");
460 465
461 return deferredResult; 466 return deferredResult;
462 }, 467 },
463 468
464 //------------------------------------------------------------------------- 469 //-------------------------------------------------------------------------
465 470
466 'resetAllLocalData': function() { 471 'resetAllLocalData': function() {
467 this.resetConnection(); 472 this.resetConnection();
468 473
469 this.setUsername(""); 474 this.setUsername("");
470 this.setPassphrase(""); 475 this.setPassphrase("");
471 476
472 this._header = null; 477 this._header = null;
473 this._statistics = null; 478 this._statistics = null;
474 this._preferences = null; 479 this._preferences = null;
475 this._records = {}; 480 this._records = {};
476 this._directLoginReferences = {}; 481 this._directLoginReferences = {};
477 }, 482 },
478 483
479 //------------------------------------------------------------------------- 484 //-------------------------------------------------------------------------
480 485
481 'deleteAccountAction': function() { 486 'deleteAccountAction': function() {
482 var deferredResult; 487 var deferredResult;
483 488
484//MochiKit.Logging.logDebug(">>> user.deleteAccountAction - " + this); 489//MochiKit.Logging.logDebug(">>> user.deleteAccountAction - " + this);
485 deferredResult = new MochiKit.Async.Deferred(); 490 deferredResult = new MochiKit.Async.Deferred();
486 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser'); 491 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser');
487 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData')); 492 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData'));
488 deferredResult.callback(); 493 deferredResult.callback();
489//MochiKit.Logging.logDebug("<<< user.deleteAccountAction - " + this); 494//MochiKit.Logging.logDebug("<<< user.deleteAccountAction - " + this);
490 495
491 return deferredResult; 496 return deferredResult;
492 }, 497 },
493 498
494 //------------------------------------------------------------------------- 499 //-------------------------------------------------------------------------
495 500
496 'encryptedData': function() { 501 'encryptedData': function() {
497 var deferredResult; 502 var deferredResult;
498 varresult; 503 varresult;
499 504
500 result = {}; 505 result = {};
501 506
502 deferredResult = new MochiKit.Async.Deferred(); 507 deferredResult = new MochiKit.Async.Deferred();
503 508
504//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 0: " + res); return res;}); 509//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 0: " + res); return res;});
505 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'encryptedData')); 510 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'encryptedData'));
506//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 1: " + res); return res;}); 511//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 1: " + res); return res;});
507 deferredResult.addCallback(function(aResult, aValue) { 512 deferredResult.addCallback(function(aResult, aValue) {
508 aResult['header'] = aValue; 513 aResult['header'] = aValue;
509 }, result); 514 }, result);
510//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 2: " + res); return res;}); 515//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 2: " + res); return res;});
511 516
512 deferredResult.addCallback(MochiKit.Base.method(this.statistics(), 'encryptedData')); 517 deferredResult.addCallback(MochiKit.Base.method(this.statistics(), 'encryptedData'));
513//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 3: " + res); return res;}); 518//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 3: " + res); return res;});
514 deferredResult.addCallback(function(aResult, aValue) { 519 deferredResult.addCallback(function(aResult, aValue) {
515 aResult['statistics'] = aValue; 520 aResult['statistics'] = aValue;
516 }, result); 521 }, result);
517//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 4: " + res); return res;}); 522//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 4: " + res); return res;});
518 523
519 deferredResult.addCallback(MochiKit.Base.bind(function(aResult, aValue) { 524 deferredResult.addCallback(MochiKit.Base.bind(function(aResult, aValue) {
520 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 525 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
521 aResult['lock'] = this.lock(); 526 aResult['lock'] = this.lock();
522 527
523 return aResult; 528 return aResult;
524 }, this), result); 529 }, this), result);
525//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 5: " + res); return res;}); 530//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 5: " + res); return res;});
526 deferredResult.callback(); 531 deferredResult.callback();
527 532
528 return deferredResult; 533 return deferredResult;
529 }, 534 },
530 535
531 //------------------------------------------------------------------------- 536 //-------------------------------------------------------------------------
532 537
533 'preferences': function() { 538 'preferences': function() {
534 if (this._preferences == null) { 539 if (this._preferences == null) {
535 this._preferences = new Clipperz.PM.DataModel.UserPreferences({user:this}); 540 this._preferences = new Clipperz.PM.DataModel.UserPreferences({user:this});
536 } 541 }
537 542
538 return this._preferences; 543 return this._preferences;
539 }, 544 },
540/* 545/*
541 'setPreferences': function(aValue) { 546 'setPreferences': function(aValue) {
542 this._preferences = aValue; 547 this._preferences = aValue;
543 548
544 if (this._preferences.preferredLanguage() != null) { 549 if (this._preferences.preferredLanguage() != null) {
545 Clipperz.PM.Strings.Languages.setSelectedLanguage(this._preferences.preferredLanguage()); 550 Clipperz.PM.Strings.Languages.setSelectedLanguage(this._preferences.preferredLanguage());
546 } else { 551 } else {
547//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage); 552//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage);
548 } 553 }
549 }, 554 },
550*/ 555*/
551 //------------------------------------------------------------------------- 556 //-------------------------------------------------------------------------
552 557
553 'oneTimePasswordManager': function() { 558 'oneTimePasswordManager': function() {
554 if (this._oneTimePasswordManager == null) { 559 if (this._oneTimePasswordManager == null) {
555 this._oneTimePasswordManager = new Clipperz.PM.DataModel.OneTimePasswordManager(this, null); 560 this._oneTimePasswordManager = new Clipperz.PM.DataModel.OneTimePasswordManager(this, null);
556 } 561 }
557 562
558 return this._oneTimePasswordManager; 563 return this._oneTimePasswordManager;
559 }, 564 },
560 565
561 //------------------------------------------------------------------------- 566 //-------------------------------------------------------------------------
562 567
563 'directLoginReferences': function() { 568 'directLoginReferences': function() {
564 return this._directLoginReferences; 569 return this._directLoginReferences;
565 }, 570 },
566 571
567 'addDirectLoginReference': function(aDirectLoginReference, isBatchUpdate) { 572 'addDirectLoginReference': function(aDirectLoginReference, isBatchUpdate) {
568//MochiKit.Logging.logDebug(">>> User.addDirectLoginReference"); 573//MochiKit.Logging.logDebug(">>> User.addDirectLoginReference");
569 this.directLoginReferences()[aDirectLoginReference.reference()] = aDirectLoginReference; 574 this.directLoginReferences()[aDirectLoginReference.reference()] = aDirectLoginReference;
570 575
571 if (isBatchUpdate != true) { 576 if (isBatchUpdate != true) {
572 Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginAdded'); 577 Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginAdded');
573 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true); 578 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true);
574 } 579 }
575 }, 580 },
576 581
577 'removeDirectLoginReference': function(aDirectLoginReference) { 582 'removeDirectLoginReference': function(aDirectLoginReference) {
578 delete this.directLoginReferences()[aDirectLoginReference.reference()]; 583 delete this.directLoginReferences()[aDirectLoginReference.reference()];
579 Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginRemoved'); 584 Clipperz.NotificationCenter.notify(aDirectLoginReference, 'directLoginRemoved');
580 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true); 585 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'directLogins', true);
581 }, 586 },
582 587
583 //......................................................................... 588 //.........................................................................
584 589
585 'addDirectLogin': function(aDirectLogin) { 590 'addDirectLogin': function(aDirectLogin) {
586 varnewDirectLoginReference; 591 varnewDirectLoginReference;
587 592
588 newDirectLoginReference = new Clipperz.PM.DataModel.DirectLoginReference({user:this, directLogin:aDirectLogin}) 593 newDirectLoginReference = new Clipperz.PM.DataModel.DirectLoginReference({user:this, directLogin:aDirectLogin})
589 this.addDirectLoginReference(newDirectLoginReference); 594 this.addDirectLoginReference(newDirectLoginReference);
590 }, 595 },
591 596
592 'synchronizeDirectLogin': function(aDirectLogin) { 597 'synchronizeDirectLogin': function(aDirectLogin) {
593 var directLoginReference; 598 var directLoginReference;
594 599
595 directLoginReference = this.directLoginReferences()[aDirectLogin.reference()]; 600 directLoginReference = this.directLoginReferences()[aDirectLogin.reference()];
596 if (typeof(directLoginReference) != 'undefined') { 601 if (typeof(directLoginReference) != 'undefined') {
597 directLoginReference.synchronizeValues(aDirectLogin); 602 directLoginReference.synchronizeValues(aDirectLogin);
598 } else { 603 } else {
599 this.addDirectLogin(aDirectLogin); 604 this.addDirectLogin(aDirectLogin);
600 } 605 }
601 }, 606 },
602 607
603 'removeDirectLogin': function(aDirectLogin) { 608 'removeDirectLogin': function(aDirectLogin) {
604 this.removeDirectLoginReference(aDirectLogin); 609 this.removeDirectLoginReference(aDirectLogin);
605 }, 610 },
606 611
607 //------------------------------------------------------------------------- 612 //-------------------------------------------------------------------------
608 613
609 'changeCredentials': function(aUsername, aPassphrase) { 614 'changeCredentials': function(aUsername, aPassphrase) {
610 vardeferredResult; 615 vardeferredResult;
611 var result; 616 var result;
612 617
613 result = {}; 618 result = {};
614 619
615 deferredResult = new MochiKit.Async.Deferred(); 620 deferredResult = new MochiKit.Async.Deferred();
616 621
617 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'loadAllSections')); 622 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'loadAllSections'));
618 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections')); 623 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'updateAllSections'));
619 624
620 deferredResult.addCallback(MochiKit.Base.bind(function(aUsername, aPssphrase) { 625 deferredResult.addCallback(MochiKit.Base.bind(function(aUsername, aPssphrase) {
621 this.setUsername(aUsername); 626 this.setUsername(aUsername);
622 this.setPassphrase(aPassphrase); 627 this.setPassphrase(aPassphrase);
623 }, this), aUsername, aPassphrase) 628 }, this), aUsername, aPassphrase)
624 629
625//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 1: " + res); return res;}); 630//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 1: " + res); return res;});
626 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_encryptingData'); 631 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_encryptingData');
627//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 2: " + res); return res;}); 632//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 2: " + res); return res;});
628 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 633 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
629//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 3: " + res); return res;}); 634//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 3: " + res); return res;});
630 deferredResult.addCallback(function(aResult, anEncryptedData) { 635 deferredResult.addCallback(function(aResult, anEncryptedData) {
631 aResult['user'] = anEncryptedData; 636 aResult['user'] = anEncryptedData;
632 637
633 return aResult; 638 return aResult;
634 }, result); 639 }, result);
635//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 4: " + res); return res;}); 640//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 4: " + res); return res;});
636 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_creatingNewCredentials'); 641 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_creatingNewCredentials');
637//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 5: " + res); return res;}); 642//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 5: " + res); return res;});
638 deferredResult.addCallback(function(aResult, anUser) { 643 deferredResult.addCallback(function(aResult, anUser) {
639 varnewConnection; 644 varnewConnection;
640 645
641 newConnection = new Clipperz.PM.Crypto.communicationProtocol.versions[Clipperz.PM.Crypto.communicationProtocol.currentVersion]({user:anUser}) 646 newConnection = new Clipperz.PM.Crypto.communicationProtocol.versions[Clipperz.PM.Crypto.communicationProtocol.currentVersion]({user:anUser})
642 aResult['credentials'] = newConnection.serverSideUserCredentials(); 647 aResult['credentials'] = newConnection.serverSideUserCredentials();
643 648
644 return aResult; 649 return aResult;
645 }, result, this); 650 }, result, this);
646//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 6: " + res); return res;}); 651//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 6: " + res); return res;});
647 deferredResult.addCallback(MochiKit.Base.method(this.oneTimePasswordManager(), 'encryptedData')); 652 deferredResult.addCallback(MochiKit.Base.method(this.oneTimePasswordManager(), 'encryptedData'));
648//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 7: " + res); return res;}); 653//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 7: " + res); return res;});
649 deferredResult.addCallback(function(aResult, anEncryptedData) { 654 deferredResult.addCallback(function(aResult, anEncryptedData) {
650 aResult['oneTimePasswords'] = anEncryptedData; 655 aResult['oneTimePasswords'] = anEncryptedData;
651 656
652 return aResult; 657 return aResult;
653 }, result); 658 }, result);
654//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 8: " + res); return res;}); 659//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 8: " + res); return res;});
655 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_sendingCredentials'); 660 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_sendingCredentials');
656//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 9: " + res); return res;}); 661//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 9: " + res); return res;});
657 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'upgradeUserCredentials'); 662 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'upgradeUserCredentials');
658//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 10: " + res); return res;}); 663//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 10: " + res); return res;});
659 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_done'); 664 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'changeCredentials_done');
660//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 11: " + res); return res;}); 665//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.changeCredentials - 11: " + res); return res;});
661 deferredResult.callback(); 666 deferredResult.callback();
662 667
663 return deferredResult; 668 return deferredResult;
664 }, 669 },
665 670
666 //------------------------------------------------------------------------- 671 //-------------------------------------------------------------------------
667 672
668 'doLogout': function() { 673 'doLogout': function() {
669 var deferredResult; 674 var deferredResult;
670 675
671 deferredResult = new MochiKit.Async.Deferred(); 676 deferredResult = new MochiKit.Async.Deferred();
672//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 1: " + res); return res;}); 677//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 1: " + res); return res;});
673 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'logout')); 678 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'logout'));
674//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 2: " + res); return res;}); 679//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 2: " + res); return res;});
675 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData')); 680 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData'));
676//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 3: " + res); return res;}); 681//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.doLogout - 3: " + res); return res;});
677 682
678 deferredResult.callback(); 683 deferredResult.callback();
679 684
680 return deferredResult; 685 return deferredResult;
681 }, 686 },
682 687
683 //------------------------------------------------------------------------- 688 //-------------------------------------------------------------------------
684 689
685 'lock': function() { 690 'lock': function() {
686 this.setPassphrase("") 691 this.setPassphrase("")
687 this.connection().logout(); 692 this.connection().logout();
688 this.connection().resetSrpConnection(); 693 this.connection().resetSrpConnection();
689 }, 694 },
690 695
691 'unlockWithPassphrase': function(aValue) { 696 'unlockWithPassphrase': function(aValue) {
692 vardeferredResult; 697 vardeferredResult;
693 // varconnection; 698 // varconnection;
694 699
695 // connection = this.connection(); 700 // connection = this.connection();
696 701
697 deferredResult = new MochiKit.Async.Deferred(); 702 deferredResult = new MochiKit.Async.Deferred();
698//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 1: " + res); return res;}); 703//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 1: " + res); return res;});
699 deferredResult.addCallback(MochiKit.Base.method(this, 'setPassphrase')); 704 deferredResult.addCallback(MochiKit.Base.method(this, 'setPassphrase'));
700//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 2: " + res); return res;}); 705//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 2: " + res); return res;});
701 // deferredResult.addCallback(MochiKit.Base.method(connection, 'message'), 'echo', {'echo':"echo"}); 706 // deferredResult.addCallback(MochiKit.Base.method(connection, 'message'), 'echo', {'echo':"echo"});
702 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'reestablishConnection')); 707 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'reestablishConnection'));
703//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 3: " + res); return res;}); 708//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 3: " + res); return res;});
704 // deferredResult.addErrback(MochiKit.Base.method(this, 'setPassphrase', "")); 709 // deferredResult.addErrback(MochiKit.Base.method(this, 'setPassphrase', ""));
705 deferredResult.addErrback(MochiKit.Base.bind(function(anError) { 710 deferredResult.addErrback(MochiKit.Base.bind(function(anError) {
706 this.setPassphrase(""); 711 this.setPassphrase("");
707 this.connection().resetSrpConnection(); 712 this.connection().resetSrpConnection();
708 713
709 return anError; 714 return anError;
710 }, this)); 715 }, this));
711//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 4: " + res); return res;}); 716//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.unlockWithPassphrase 4: " + res); return res;});
712 deferredResult.callback(aValue); 717 deferredResult.callback(aValue);
713 718
714 return deferredResult; 719 return deferredResult;
715 }, 720 },
716 721
717 //------------------------------------------------------------------------- 722 //-------------------------------------------------------------------------
718 //------------------------------------------------------------------------- 723 //-------------------------------------------------------------------------
719 //------------------------------------------------------------------------- 724 //-------------------------------------------------------------------------
720 //------------------------------------------------------------------------- 725 //-------------------------------------------------------------------------
721 //------------------------------------------------------------------------- 726 //-------------------------------------------------------------------------
722 //------------------------------------------------------------------------- 727 //-------------------------------------------------------------------------
723 //------------------------------------------------------------------------- 728 //-------------------------------------------------------------------------
724 //------------------------------------------------------------------------- 729 //-------------------------------------------------------------------------
725 //------------------------------------------------------------------------- 730 //-------------------------------------------------------------------------
726 //------------------------------------------------------------------------- 731 //-------------------------------------------------------------------------
727 //------------------------------------------------------------------------- 732 //-------------------------------------------------------------------------
728 //------------------------------------------------------------------------- 733 //-------------------------------------------------------------------------
729 734
730 'serverData': function() { 735 'serverData': function() {
731 return this._serverData; 736 return this._serverData;
732 }, 737 },
733 738
734 'setServerData': function(aValue) { 739 'setServerData': function(aValue) {
735//MochiKit.Logging.logDebug(">>> User.setServerData"); 740//MochiKit.Logging.logDebug(">>> User.setServerData");
736 this._serverData = aValue; 741 this._serverData = aValue;
737 742
738 if (typeof(aValue.maxNumberOfRecords) != 'undefined') { 743 if (typeof(aValue.maxNumberOfRecords) != 'undefined') {
739 this.setMaxNumberOfRecords(aValue.maxNumberOfRecords); 744 this.setMaxNumberOfRecords(aValue.maxNumberOfRecords);
740 } 745 }
741//MochiKit.Logging.logDebug("<<< User.setServerData"); 746//MochiKit.Logging.logDebug("<<< User.setServerData");
742 }, 747 },
743 748
744 //------------------------------------------------------------------------- 749 //-------------------------------------------------------------------------
745 750
746 'isLoadingUserDetails': function() { 751 'isLoadingUserDetails': function() {
747 return this._isLoadingUserDetails; 752 return this._isLoadingUserDetails;
748 }, 753 },
749 754
750 'setIsLoadingUserDetails': function(aValue) { 755 'setIsLoadingUserDetails': function(aValue) {
751 this._isLoadingUserDetails = aValue; 756 this._isLoadingUserDetails = aValue;
752 }, 757 },
753 758
754 //------------------------------------------------------------------------- 759 //-------------------------------------------------------------------------
755 760
756 'loadingUserDetailsPendingQueue': function() { 761 'loadingUserDetailsPendingQueue': function() {
757 return this._loadingUserDetailsPendingQueue; 762 return this._loadingUserDetailsPendingQueue;
758 }, 763 },
759 764
760 'flushLoadingUserDetailsPendingQueue': function() { 765 'flushLoadingUserDetailsPendingQueue': function() {
761 var queue; 766 var queue;
762 767
763//MochiKit.Logging.logDebug(">>> User.flushLoadingUserDetailsPendingQueue"); 768//MochiKit.Logging.logDebug(">>> User.flushLoadingUserDetailsPendingQueue");
764 queue = this.loadingUserDetailsPendingQueue(); 769 queue = this.loadingUserDetailsPendingQueue();
765 770
766 while(queue.length > 0) { 771 while(queue.length > 0) {
767//MochiKit.Logging.logDebug("--- User.flushLoadingUserDetailsPendingQueue - pop"); 772//MochiKit.Logging.logDebug("--- User.flushLoadingUserDetailsPendingQueue - pop");
768 queue.pop().callback(); 773 queue.pop().callback();
769 } 774 }
770//MochiKit.Logging.logDebug("<<< User.flushLoadingUserDetailsPendingQueue"); 775//MochiKit.Logging.logDebug("<<< User.flushLoadingUserDetailsPendingQueue");
771 }, 776 },
772 777
773 //------------------------------------------------------------------------- 778 //-------------------------------------------------------------------------
774 779
775 'getUserDetails': function() { 780 'getUserDetails': function() {
776 var deferredResult; 781 var deferredResult;
777 782
778//MochiKit.Logging.logDebug(">>> User.getUserDetails"); 783//MochiKit.Logging.logDebug(">>> User.getUserDetails");
779 deferredResult = new MochiKit.Async.Deferred(); 784 deferredResult = new MochiKit.Async.Deferred();
780 if ((this.serverData() == null) && (this.isLoadingUserDetails() == false)) { 785 if ((this.serverData() == null) && (this.isLoadingUserDetails() == false)) {
781 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsLoadingUserDetails', true)); 786 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsLoadingUserDetails', true));
782 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'getUserDetails'); 787 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'getUserDetails');
783 deferredResult.addCallback(MochiKit.Base.method(this, 'setServerData')); 788 deferredResult.addCallback(MochiKit.Base.method(this, 'setServerData'));
784 deferredResult.addCallback(MochiKit.Base.method(this, 'flushLoadingUserDetailsPendingQueue')); 789 deferredResult.addCallback(MochiKit.Base.method(this, 'flushLoadingUserDetailsPendingQueue'));
785 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsLoadingUserDetails', false)); 790 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsLoadingUserDetails', false));
786 } 791 }
787 792
788 deferredResult.addCallback(MochiKit.Base.method(this, 'serverData')); 793 deferredResult.addCallback(MochiKit.Base.method(this, 'serverData'));
789 794
790 if (this.isLoadingUserDetails() == false) { 795 if (this.isLoadingUserDetails() == false) {
791 deferredResult.callback(); 796 deferredResult.callback();
792 } else { 797 } else {
793 this.loadingUserDetailsPendingQueue().push(deferredResult); 798 this.loadingUserDetailsPendingQueue().push(deferredResult);
794 } 799 }
795//MochiKit.Logging.logDebug("<<< User.getUserDetails"); 800//MochiKit.Logging.logDebug("<<< User.getUserDetails");
796 801
797 return deferredResult; 802 return deferredResult;
798 }, 803 },
799 804
800 //------------------------------------------------------------------------- 805 //-------------------------------------------------------------------------
801 806
802 'loadRecords': function() { 807 'loadRecords': function() {
803 return this.header().loadRecords(); 808 return this.header().loadRecords();
804 }, 809 },
805 810
806 'loadDirectLogins': function() { 811 'loadDirectLogins': function() {
807 return this.header().loadDirectLogins(); 812 return this.header().loadDirectLogins();
808 }, 813 },
809 814
810 'loadPreferences': function() { 815 'loadPreferences': function() {
811 return this.header().loadPreferences(); 816 return this.header().loadPreferences();
812 }, 817 },
813 818
814 'loadOneTimePasswords': function() { 819 'loadOneTimePasswords': function() {
815 return this.header().loadOneTimePasswords(); 820 return this.header().loadOneTimePasswords();
816 }, 821 },
817 822
818 //------------------------------------------------------------------------- 823 //-------------------------------------------------------------------------
819 824
820 'loadLoginHistory': function() { 825 'loadLoginHistory': function() {
821 var deferredResult; 826 var deferredResult;
822 827
823 deferredResult = new MochiKit.Async.Deferred(); 828 deferredResult = new MochiKit.Async.Deferred();
824 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'getLoginHistory'); 829 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'getLoginHistory');
825 deferredResult.addCallback(function(aResult) { 830 deferredResult.addCallback(function(aResult) {
826 return aResult['result']; 831 return aResult['result'];
827 }); 832 });
828 deferredResult.addCallback(MochiKit.Base.method(this, 'setLoginHistory')); 833 deferredResult.addCallback(MochiKit.Base.method(this, 'setLoginHistory'));
829 deferredResult.addCallback(MochiKit.Base.method(this, 'loginHistory')); 834 deferredResult.addCallback(MochiKit.Base.method(this, 'loginHistory'));
830 deferredResult.callback(); 835 deferredResult.callback();
831 836
832 return deferredResult; 837 return deferredResult;
833 }, 838 },
834 839
835 //------------------------------------------------------------------------- 840 //-------------------------------------------------------------------------
836 841
837 'shouldDownloadOfflineCopy': function() { 842 'shouldDownloadOfflineCopy': function() {
838 return this._shouldDownloadOfflineCopy; 843 return this._shouldDownloadOfflineCopy;
839 }, 844 },
840 845
841 'setShouldDownloadOfflineCopy': function(aValue) { 846 'setShouldDownloadOfflineCopy': function(aValue) {
842 this._shouldDownloadOfflineCopy = aValue; 847 this._shouldDownloadOfflineCopy = aValue;
843 }, 848 },
844 849
845 //------------------------------------------------------------------------- 850 //-------------------------------------------------------------------------
846 851
847 'loginInfo': function() { 852 'loginInfo': function() {
848 return this._loginInfo; 853 return this._loginInfo;
849 }, 854 },
850 855
851 'setLoginInfo': function(aValue) { 856 'setLoginInfo': function(aValue) {
852 this._loginInfo = aValue; 857 this._loginInfo = aValue;
853//MochiKit.Logging.logDebug("### LoginInfo: " + Clipperz.Base.serializeJSON(aValue)); 858//MochiKit.Logging.logDebug("### LoginInfo: " + Clipperz.Base.serializeJSON(aValue));
854 }, 859 },
855 860
856 //------------------------------------------------------------------------- 861 //-------------------------------------------------------------------------
857 862
858 'loginHistory': function() { 863 'loginHistory': function() {
859 return this._loginHistory; 864 return this._loginHistory;
860 }, 865 },
861 866
862 'setLoginHistory': function(aValue) { 867 'setLoginHistory': function(aValue) {
863 this._loginHistory = aValue; 868 this._loginHistory = aValue;
864 }, 869 },
865/* 870/*
866 'loginInfoWithOneTimePasswordReference': function(aOneTimePasswordReference) { 871 'loginInfoWithOneTimePasswordReference': function(aOneTimePasswordReference) {
867 var result; 872 var result;
868 var i,c; 873 var i,c;
869 874
870 result = null; 875 result = null;
871 c = this.loginHistory().length; 876 c = this.loginHistory().length;
872 for (i=0; (i<c) && (result == null); i++) { 877 for (i=0; (i<c) && (result == null); i++) {
873 var currentLoginInfo; 878 var currentLoginInfo;
874 879
875 currentLoginInfo = this.loginHistory()[i]; 880 currentLoginInfo = this.loginHistory()[i];
876 if (currentLoginInfo['oneTimePasswordReference'] == aOneTimePasswordReference) { 881 if (currentLoginInfo['oneTimePasswordReference'] == aOneTimePasswordReference) {
877 result = currentLoginInfo; 882 result = currentLoginInfo;
878 } 883 }
879 } 884 }
880 885
881 return result; 886 return result;
882 }, 887 },
883 */ 888 */
884 //------------------------------------------------------------------------- 889 //-------------------------------------------------------------------------
885 890
886 'lock': function() { 891 'lock': function() {
887 return this._lock; 892 return this._lock;
888 }, 893 },
889 894
890 'setLock': function(aValue) { 895 'setLock': function(aValue) {
891//MochiKit.Logging.logDebug("=== User.setLock: " + aValue); 896//MochiKit.Logging.logDebug("=== User.setLock: " + aValue);
892 this._lock = aValue; 897 this._lock = aValue;
893 }, 898 },
894 899
895 //------------------------------------------------------------------------- 900 //-------------------------------------------------------------------------
896 __syntaxFix__: "syntax fix" 901 __syntaxFix__: "syntax fix"
897 902
898}); 903});
899 904
900 905
901Clipperz.PM.DataModel.User.exception = { 906Clipperz.PM.DataModel.User.exception = {
902 LoginFailed: new MochiKit.Base.NamedError("Clipperz.PM.DataModel.User.exception.LoginFailed") 907 LoginFailed: new MochiKit.Base.NamedError("Clipperz.PM.DataModel.User.exception.LoginFailed")
903}; 908};
904 909