summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/Connection.js9
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js12
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/User.js17
3 files changed, 24 insertions, 14 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Connection.js b/frontend/beta/js/Clipperz/PM/Connection.js
index 85aea21..e81c7a6 100644
--- a/frontend/beta/js/Clipperz/PM/Connection.js
+++ b/frontend/beta/js/Clipperz/PM/Connection.js
@@ -203,197 +203,201 @@ Clipperz.PM.Connection.SRP['1.0'].prototype = MochiKit.Base.update(new Clipperz.
203 args.message = "completeRegistration"; 203 args.message = "completeRegistration";
204 204
205 return args; 205 return args;
206 }, parameters, this.user()); 206 }, parameters, this.user());
207//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 6: " + res); return res;}); 207//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 6: " + res); return res;});
208 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'registration')); 208 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'registration'));
209//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 7: " + Clipperz.Base.serializeJSON(res)); return res;}); 209//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.register - 7: " + Clipperz.Base.serializeJSON(res)); return res;});
210 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 210 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
211 this.user().setLock(res['lock']); 211 this.user().setLock(res['lock']);
212 212
213 return res; 213 return res;
214 }, this)); 214 }, this));
215 deferredResult.callback(anInvitationCode); 215 deferredResult.callback(anInvitationCode);
216//MochiKit.Logging.logError("<<< Connection.register"); 216//MochiKit.Logging.logError("<<< Connection.register");
217 217
218 return deferredResult; 218 return deferredResult;
219 }, 219 },
220 220
221 //========================================================================= 221 //=========================================================================
222 222
223 'login': function(isReconnecting) { 223 'login': function(isReconnecting) {
224 vardeferredResult; 224 vardeferredResult;
225 225
226//MochiKit.Logging.logDebug(">>> Connection.login: "/* + this*/); 226//MochiKit.Logging.logDebug(">>> Connection.login: "/* + this*/);
227//MochiKit.Logging.logDebug("--- Connection.login - isReconnecting: " + (isReconnecting == true)); 227//MochiKit.Logging.logDebug("--- Connection.login - isReconnecting: " + (isReconnecting == true));
228 deferredResult = new MochiKit.Async.Deferred(); 228 deferredResult = new MochiKit.Async.Deferred();
229//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.1 - Connection.login - 1: "/* + res*/); return res;}); 229//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.1 - Connection.login - 1: "/* + res*/); return res;});
230//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 230//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
231 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_sendingCredentials'); 231 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_sendingCredentials');
232//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.2 - Connection.login - 2: "/* + res*/); return res;}); 232//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.2 - Connection.login - 2: "/* + res*/); return res;});
233//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 233//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
234 deferredResult.addCallback(function(aConnection) { 234 deferredResult.addCallback(function(aConnection) {
235 var args; 235 var args;
236 236
237 args = {}; 237 args = {};
238 args.message = 'connect'; 238 args.message = 'connect';
239 args.version = aConnection.clipperz_pm_crypto_version(); 239 args.version = aConnection.clipperz_pm_crypto_version();
240 args.parameters = {}; 240 args.parameters = {};
241//MochiKit.Logging.logDebug("=== Connection.login - username: " + aConnection.srpConnection().C()); 241//MochiKit.Logging.logDebug("=== Connection.login - username: " + aConnection.srpConnection().C());
242 args.parameters['C'] = aConnection.srpConnection().C(); 242 args.parameters['C'] = aConnection.srpConnection().C();
243 args.parameters['A'] = aConnection.srpConnection().A().asString(16); 243 args.parameters['A'] = aConnection.srpConnection().A().asString(16);
244 244
245 if (isReconnecting == true) { 245 if (isReconnecting == true) {
246//MochiKit.Logging.logDebug("--- Connection.login - reconnecting"); 246//MochiKit.Logging.logDebug("--- Connection.login - reconnecting");
247 //# args.parameters['reconnecting'] = "yes"; 247 //# args.parameters['reconnecting'] = "yes";
248 args.parameters['reconnecting'] = aConnection.connectionId(); 248 args.parameters['reconnecting'] = aConnection.connectionId();
249 } 249 }
250//MochiKit.Logging.logDebug("--- Connection.login - args: " + Clipperz.Base.serializeJSON(args)); 250//MochiKit.Logging.logDebug("--- Connection.login - args: " + Clipperz.Base.serializeJSON(args));
251//MochiKit.Logging.logDebug("--- Connection.login - srp.a: " + aConnection.srpConnection().a().asString(16)); 251//MochiKit.Logging.logDebug("--- Connection.login - srp.a: " + aConnection.srpConnection().a().asString(16));
252 252
253 return args; 253 return args;
254 }); 254 });
255//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.3 - Connection.login - 3: "/* + res*/); return res;}); 255//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.3 - Connection.login - 3: "/* + res*/); return res;});
256//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 256//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
257 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake')); 257 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake'));
258//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.4 - Connection.login - 4: "/* + res*/); return res;}); 258//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.4 - Connection.login - 4: "/* + res*/); return res;});
259//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 259//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
260 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_credentialVerification'); 260 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_credentialVerification');
261//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.5 - Connection.login - 5: "/* + res*/); return res;}); 261//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.5 - Connection.login - 5: "/* + res*/); return res;});
262//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 262//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
263deferredResult.addErrback(MochiKit.Base.bind(function(res) {MochiKit.Logging.logDebug("ERROR - c: " + this.srpConnection().C() + " # version: " + this.clipperz_pm_crypto_version()); return res;}, this)); 263deferredResult.addErrback(MochiKit.Base.bind(function(res) {MochiKit.Logging.logDebug("ERROR - c: " + this.srpConnection().C() + " # version: " + this.clipperz_pm_crypto_version()); return res;}, this));
264 deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) { 264 deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) {
265 var args; 265 var args;
266 266
267 this.srpConnection().set_s(new Clipperz.Crypto.BigInt(someParameters['s'], 16)); 267 this.srpConnection().set_s(new Clipperz.Crypto.BigInt(someParameters['s'], 16));
268 this.srpConnection().set_B(new Clipperz.Crypto.BigInt(someParameters['B'], 16)); 268 this.srpConnection().set_B(new Clipperz.Crypto.BigInt(someParameters['B'], 16));
269 269
270 if (typeof(someParameters['oneTimePassword']) != 'undefined') { 270 if (typeof(someParameters['oneTimePassword']) != 'undefined') {
271 this.setOneTimePassword(someParameters['oneTimePassword']); 271 this.setOneTimePassword(someParameters['oneTimePassword']);
272 } 272 }
273 273
274 args = {}; 274 args = {};
275 args.message = 'credentialCheck'; 275 args.message = 'credentialCheck';
276 args.version = this.clipperz_pm_crypto_version(); 276 args.version = this.clipperz_pm_crypto_version();
277 args.parameters = {}; 277 args.parameters = {};
278 args.parameters['M1'] = this.srpConnection().M1(); 278 args.parameters['M1'] = this.srpConnection().M1();
279 279
280 return args; 280 return args;
281 }, this)); 281 }, this));
282//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.6 - Connection.login - 6: "/* + res*/); return res;}); 282//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.6 - Connection.login - 6: "/* + res*/); return res;});
283//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 283//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
284 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake')); 284 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake'));
285//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.7 - Connection.login - 7: "/* + res*/); return res;}); 285//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.7 - Connection.login - 7: "/* + res*/); return res;});
286//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 286//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
287 //# deferredResult.addCallback(MochiKit.Base.method(this, 'loginDone')); 287 //# deferredResult.addCallback(MochiKit.Base.method(this, 'loginDone'));
288 deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) { 288 deferredResult.addCallback(MochiKit.Base.bind(function(someParameters) {
289 var result; 289 var result;
290 290
291//MochiKit.Logging.logDebug(">>> Connection.loginDone: " + this + " (M2: " + this.srpConnection().M2() + ")"); 291//MochiKit.Logging.logDebug(">>> Connection.loginDone: " + this + " (M2: " + this.srpConnection().M2() + ")");
292 if (someParameters['M2'] == this.srpConnection().M2()) { 292 if (someParameters['M2'] == this.srpConnection().M2()) {
293 result = new MochiKit.Async.Deferred(); 293 result = new MochiKit.Async.Deferred();
294 294
295//MochiKit.Logging.logDebug("--- Connection.loginDone - someParameters: " + Clipperz.Base.serializeJSON(someParameters)); 295//MochiKit.Logging.logDebug("--- Connection.loginDone - someParameters: " + Clipperz.Base.serializeJSON(someParameters));
296 this.setConnectionId(someParameters['connectionId']); 296 this.setConnectionId(someParameters['connectionId']);
297 this.user().setLoginInfo(someParameters['loginInfo']); 297 this.user().setLoginInfo(someParameters['loginInfo']);
298 this.user().setShouldDownloadOfflineCopy(someParameters['offlineCopyNeeded']); 298 this.user().setShouldDownloadOfflineCopy(someParameters['offlineCopyNeeded']);
299 this.user().setLock(someParameters['lock']); 299
300 if ((isReconnecting == true) && (this.user().lock() != someParameters['lock'])) {
301 throw Clipperz.PM.Connection.exception.StaleData;
302 }
300 303
301 if (this.oneTimePassword() != null) { 304 if (this.oneTimePassword() != null) {
302 result.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'archiveOneTimePassword', this.oneTimePassword())); 305 result.addCallback(MochiKit.Base.method(this.user().oneTimePasswordManager(), 'archiveOneTimePassword', this.oneTimePassword()));
303 } 306 }
307
304 result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_loggedIn'); 308 result.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_loggedIn');
305 result.addCallback(MochiKit.Async.succeed, someParameters); 309 result.addCallback(MochiKit.Async.succeed, someParameters);
306 310
307 result.callback(); 311 result.callback();
308//MochiKit.Logging.logDebug("--- Connection.loginDone - 1 - result: "/* + Clipperz.Base.serializeJSON(result)*/); 312//MochiKit.Logging.logDebug("--- Connection.loginDone - 1 - result: "/* + Clipperz.Base.serializeJSON(result)*/);
309 } else { 313 } else {
310//MochiKit.Logging.logDebug("--- Connection.loginDone - 2 - ERROR"); 314//MochiKit.Logging.logDebug("--- Connection.loginDone - 2 - ERROR");
311//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 315//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
312 result = MochiKit.Async.fail(Clipperz.PM.Connection.exception.WrongChecksum); 316 result = MochiKit.Async.fail(Clipperz.PM.Connection.exception.WrongChecksum);
313 } 317 }
314//MochiKit.Logging.logDebug("<<< Connection.loginDone - result: " + Clipperz.Base.serializeJSON(result)); 318//MochiKit.Logging.logDebug("<<< Connection.loginDone - result: " + Clipperz.Base.serializeJSON(result));
315 319
316 return result; 320 return result;
317 }, this)); 321 }, this));
318 322
319//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.8 - Connection.login - 8: "/* + res*/); return res;}); 323//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.3.8 - Connection.login - 8: "/* + res*/); return res;});
320//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;}); 324//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
321 deferredResult.callback(this); 325 deferredResult.callback(this);
322//MochiKit.Logging.logDebug("<<< Connection.login"); 326//MochiKit.Logging.logDebug("<<< Connection.login");
323 327
324 return deferredResult; 328 return deferredResult;
325 }, 329 },
326 330
327 //========================================================================= 331 //=========================================================================
328 332
329 'logout': function() { 333 'logout': function() {
330 var deferredResult; 334 var deferredResult;
331 335
332//MochiKit.Logging.logDebug(">>> Connection.logout: " + this); 336//MochiKit.Logging.logDebug(">>> Connection.logout: " + this);
333 deferredResult = new MochiKit.Async.Deferred(); 337 deferredResult = new MochiKit.Async.Deferred();
334//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 1: " + res); return res;}); 338//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 1: " + res); return res;});
335 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'logout'), {}); 339 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'logout'), {});
336//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 2: " + res); return res;}); 340//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 2: " + res); return res;});
337 deferredResult.addCallback(MochiKit.Base.method(this, 'resetSrpConnection')); 341 deferredResult.addCallback(MochiKit.Base.method(this, 'resetSrpConnection'));
338//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 3: " + res); return res;}); 342//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.logout - 3: " + res); return res;});
339 deferredResult.callback(); 343 deferredResult.callback();
340//MochiKit.Logging.logDebug("<<< Connection.logout"); 344//MochiKit.Logging.logDebug("<<< Connection.logout");
341 345
342 return deferredResult; 346 return deferredResult;
343 }, 347 },
344 348
345 //========================================================================= 349 //=========================================================================
346 350
347 'message': function(aMessageName, someParameters) { 351 'message': function(aMessageName, someParameters) {
348 var args; 352 var args;
349 var deferredResult; 353 var deferredResult;
350 354
351//MochiKit.Logging.logDebug(">>> Connection.message: " + this); 355//MochiKit.Logging.logDebug(">>> Connection.message: " + this);
352 args = {} 356 args = {}
353 args['message'] = aMessageName; 357 args['message'] = aMessageName;
354 args['srpSharedSecret'] = this.srpConnection().K(); 358 args['srpSharedSecret'] = this.srpConnection().K();
355 // args['lock'] = this.user().lock(); 359 // args['lock'] = this.user().lock();
356 360
357 if (someParameters != null) { 361 if (someParameters != null) {
358 args['parameters'] = someParameters; 362 args['parameters'] = someParameters;
359 } else { 363 } else {
360 args['parameters'] = {}; 364 args['parameters'] = {};
361 } 365 }
362//MochiKit.Logging.logDebug("--- Connection.message - args: " + Clipperz.Base.serializeJSON(args)); 366//MochiKit.Logging.logDebug("--- Connection.message - args: " + Clipperz.Base.serializeJSON(args));
363 367
364 // deferredResult = new MochiKit.Async.Deferred(); //### ????????????? 368 // deferredResult = new MochiKit.Async.Deferred(); //### ?????????????
365 369
366 return this.sendMessage(args); 370 return this.sendMessage(args);
367 }, 371 },
368 372
369 //------------------------------------------------------------------------- 373 //-------------------------------------------------------------------------
370 374
371 'sendMessage': function(someArguments) { 375 'sendMessage': function(someArguments) {
372 vardeferredResult; 376 vardeferredResult;
373 377
374//MochiKit.Logging.logDebug(">>> Connection.sendMessage: " + this); 378//MochiKit.Logging.logDebug(">>> Connection.sendMessage: " + this);
375 deferredResult = new MochiKit.Async.Deferred(); 379 deferredResult = new MochiKit.Async.Deferred();
376//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 1: " + res); return res;}); 380//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 1: " + res); return res;});
377 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'message'), someArguments); 381 deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'message'), someArguments);
378//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 2: " + res); return res;}); 382//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 2: " + res); return res;});
379 383
380 deferredResult.addCallback(MochiKit.Base.bind(function(res) { 384 deferredResult.addCallback(MochiKit.Base.bind(function(res) {
381 if (typeof(res['lock']) != 'undefined') { 385 if (typeof(res['lock']) != 'undefined') {
382 this.user().setLock(res['lock']); 386 this.user().setLock(res['lock']);
383 } 387 }
384 return res; 388 return res;
385 }, this)); 389 }, this));
386 390
387 deferredResult.addErrback(MochiKit.Base.method(this, 'messageExceptionHandler'), someArguments); 391 deferredResult.addErrback(MochiKit.Base.method(this, 'messageExceptionHandler'), someArguments);
388//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + res); return res;}); 392//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + res); return res;});
389//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + Clipperz.Base.serializeJSON(res)); return res;}); 393//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Connection.sendMessage - 3: " + Clipperz.Base.serializeJSON(res)); return res;});
390 deferredResult.callback(); 394 deferredResult.callback();
391//MochiKit.Logging.logDebug("<<< Connection.sendMessage"); 395//MochiKit.Logging.logDebug("<<< Connection.sendMessage");
392 396
393 return deferredResult 397 return deferredResult
394 }, 398 },
395 399
396 //------------------------------------------------------------------------- 400 //-------------------------------------------------------------------------
397 401
398 'messageExceptionHandler': function(anOriginalMessageArguments, anError) { 402 'messageExceptionHandler': function(anOriginalMessageArguments, anError) {
399 var result; 403 var result;
@@ -484,98 +488,99 @@ deferredResult.addErrback(MochiKit.Base.bind(function(res) {MochiKit.Logging.log
484 this._C = this.hash()(new Clipperz.ByteArray(this.user().username())).toHexString().substring(2); 488 this._C = this.hash()(new Clipperz.ByteArray(this.user().username())).toHexString().substring(2);
485 } 489 }
486 490
487 return this._C; 491 return this._C;
488 }, 492 },
489 493
490 //----------------------------------------------------------------------------- 494 //-----------------------------------------------------------------------------
491 495
492 'P': function() { 496 'P': function() {
493 if (this._P == null) { 497 if (this._P == null) {
494 this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2); 498 this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2);
495 } 499 }
496 500
497 return this._P; 501 return this._P;
498 }, 502 },
499 503
500 //----------------------------------------------------------------------------- 504 //-----------------------------------------------------------------------------
501 505
502 'hash': function() { 506 'hash': function() {
503 return Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash; 507 return Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash;
504 }, 508 },
505 509
506 //----------------------------------------------------------------------------- 510 //-----------------------------------------------------------------------------
507 511
508 'srpConnection': function() { 512 'srpConnection': function() {
509 if (this._srpConnection == null) { 513 if (this._srpConnection == null) {
510 this._srpConnection = new Clipperz.Crypto.SRP.Connection({ C:this.C(), P:this.P(), hash:this.hash() }); 514 this._srpConnection = new Clipperz.Crypto.SRP.Connection({ C:this.C(), P:this.P(), hash:this.hash() });
511 } 515 }
512 516
513 return this._srpConnection; 517 return this._srpConnection;
514 }, 518 },
515 519
516 'resetSrpConnection': function() { 520 'resetSrpConnection': function() {
517 this._C = null; 521 this._C = null;
518 this._P = null; 522 this._P = null;
519 this._srpConnection = null; 523 this._srpConnection = null;
520 }, 524 },
521 525
522 //----------------------------------------------------------------------------- 526 //-----------------------------------------------------------------------------
523 __syntaxFix__: "syntax fix" 527 __syntaxFix__: "syntax fix"
524 528
525}); 529});
526 530
527 531
528 532
529//----------------------------------------------------------------------------- 533//-----------------------------------------------------------------------------
530// 534//
531 // S R P [ 1 . 1 ] C O N N E C T I O N class 535 // S R P [ 1 . 1 ] C O N N E C T I O N class
532// 536//
533//----------------------------------------------------------------------------- 537//-----------------------------------------------------------------------------
534 538
535Clipperz.PM.Connection.SRP['1.1'] = function (args) { 539Clipperz.PM.Connection.SRP['1.1'] = function (args) {
536 args = args || {}; 540 args = args || {};
537 Clipperz.PM.Connection.SRP['1.0'].call(this, args); 541 Clipperz.PM.Connection.SRP['1.0'].call(this, args);
538 542
539 return this; 543 return this;
540} 544}
541 545
542Clipperz.PM.Connection.SRP['1.1'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection.SRP['1.0'](), { 546Clipperz.PM.Connection.SRP['1.1'].prototype = MochiKit.Base.update(new Clipperz.PM.Connection.SRP['1.0'](), {
543 547
544 'version': function() { 548 'version': function() {
545 return '1.1'; 549 return '1.1';
546 }, 550 },
547 551
548 //----------------------------------------------------------------------------- 552 //-----------------------------------------------------------------------------
549 553
550 'C': function() { 554 'C': function() {
551 if (this._C == null) { 555 if (this._C == null) {
552 this._C = this.hash()(new Clipperz.ByteArray(this.user().username() + this.user().passphrase())).toHexString().substring(2); 556 this._C = this.hash()(new Clipperz.ByteArray(this.user().username() + this.user().passphrase())).toHexString().substring(2);
553 } 557 }
554 558
555 return this._C; 559 return this._C;
556 }, 560 },
557 561
558 //----------------------------------------------------------------------------- 562 //-----------------------------------------------------------------------------
559 563
560 'P': function() { 564 'P': function() {
561 if (this._P == null) { 565 if (this._P == null) {
562 this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2); 566 this._P = this.hash()(new Clipperz.ByteArray(this.user().passphrase() + this.user().username())).toHexString().substring(2);
563 } 567 }
564 568
565 return this._P; 569 return this._P;
566 }, 570 },
567 571
568 //----------------------------------------------------------------------------- 572 //-----------------------------------------------------------------------------
569 573
570 'hash': function() { 574 'hash': function() {
571 return Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash; 575 return Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash;
572 }, 576 },
573 577
574 //----------------------------------------------------------------------------- 578 //-----------------------------------------------------------------------------
575 __syntaxFix__: "syntax fix" 579 __syntaxFix__: "syntax fix"
576 580
577}); 581});
578 582
579Clipperz.PM.Connection.exception = { 583Clipperz.PM.Connection.exception = {
580 WrongChecksum: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.InvalidValue") 584 WrongChecksum: new MochiKit.Base.NamedError("Clipperz.ByteArray.exception.InvalidValue"),
585 StaleData: new MochiKit.Base.NamedError("Stale data")
581}; 586};
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index ffb45de..ecb6c37 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -546,197 +546,199 @@ console.log("Record.processData - currentVersionParameters", currentVersionParam
546 546
547 //------------------------------------------------------------------------- 547 //-------------------------------------------------------------------------
548 548
549 'headerData': function() { 549 'headerData': function() {
550 var result; 550 var result;
551 551
552 result = { 552 result = {
553 'label': this.label(), 553 'label': this.label(),
554 'key': this.key() 554 'key': this.key()
555 }; 555 };
556 556
557 if (this.headerNotes() != null) { 557 if (this.headerNotes() != null) {
558 result['headerNotes'] = this.headerNotes(); 558 result['headerNotes'] = this.headerNotes();
559 } 559 }
560 560
561 return result; 561 return result;
562 }, 562 },
563 563
564 //------------------------------------------------------------------------- 564 //-------------------------------------------------------------------------
565 565
566 'serializedData': function() { 566 'serializedData': function() {
567 var result; 567 var result;
568 var directLoginReference; 568 var directLoginReference;
569 569
570 result = {}; 570 result = {};
571 result['currentVersionKey'] = this.currentVersion().key(); 571 result['currentVersionKey'] = this.currentVersion().key();
572 572
573 result['directLogins'] = {}; 573 result['directLogins'] = {};
574 for (directLoginReference in this.directLogins()) { 574 for (directLoginReference in this.directLogins()) {
575 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData(); 575 result['directLogins'][directLoginReference] = this.directLogins()[directLoginReference].serializedData();
576 } 576 }
577 result['notes'] = this.notes(); 577 result['notes'] = this.notes();
578 578
579 return result; 579 return result;
580 }, 580 },
581 581
582 //------------------------------------------------------------------------- 582 //-------------------------------------------------------------------------
583 583
584 'encryptedData': function() { 584 'encryptedData': function() {
585 var deferredResult; 585 var deferredResult;
586 varresult; 586 varresult;
587 587
588//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData"); 588//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.encryptedData");
589 result = {} 589 result = {}
590//MochiKit.Logging.logDebug("--- Record.encryptedData - 1"); 590//MochiKit.Logging.logDebug("--- Record.encryptedData - 1");
591 deferredResult = new MochiKit.Async.Deferred(); 591 deferredResult = new MochiKit.Async.Deferred();
592//MochiKit.Logging.logDebug("--- Record.encryptedData - 2"); 592//MochiKit.Logging.logDebug("--- Record.encryptedData - 2");
593//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;}); 593//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 1: " + res); return res;});
594 deferredResult.addCallback(function(aResult, aRecord) { 594 deferredResult.addCallback(function(aResult, aRecord) {
595 aResult['reference'] = aRecord.reference(); 595 aResult['reference'] = aRecord.reference();
596 return aResult; 596 return aResult;
597 }, result, this); 597 }, result, this);
598//MochiKit.Logging.logDebug("--- Record.encryptedData - 3"); 598//MochiKit.Logging.logDebug("--- Record.encryptedData - 3");
599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;}); 599//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 2: " + res); return res;});
600 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); 600 deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData());
601//MochiKit.Logging.logDebug("--- Record.encryptedData - 4"); 601//MochiKit.Logging.logDebug("--- Record.encryptedData - 4");
602//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;}); 602//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 3: " + res); return res;});
603 deferredResult.addCallback(function(aResult, res) { 603 deferredResult.addCallback(function(aResult, res) {
604 aResult['data'] = res; 604 aResult['data'] = res;
605 return aResult; 605 return aResult;
606 }, result); 606 }, result);
607//MochiKit.Logging.logDebug("--- Record.encryptedData - 5"); 607//MochiKit.Logging.logDebug("--- Record.encryptedData - 5");
608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;}); 608//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 4: " + res); return res;});
609 deferredResult.addCallback(function(aResult) { 609 deferredResult.addCallback(function(aResult) {
610 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 610 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
611 return aResult; 611 return aResult;
612 }, result); 612 }, result);
613//MochiKit.Logging.logDebug("--- Record.encryptedData - 6"); 613//MochiKit.Logging.logDebug("--- Record.encryptedData - 6");
614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;}); 614//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Record.encryptedData - 5: " + res); return res;});
615 deferredResult.callback(); 615 deferredResult.callback();
616//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData"); 616//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.encryptedData");
617 617
618 return deferredResult; 618 return deferredResult;
619 }, 619 },
620 620
621 //------------------------------------------------------------------------- 621 //-------------------------------------------------------------------------
622 622
623 'syncDirectLoginReferenceValues': function() { 623 'syncDirectLoginReferenceValues': function() {
624//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues"); 624//MochiKit.Logging.logDebug(">>> Record.syncDirectLoginReferenceValues");
625 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) { 625 MochiKit.Iter.forEach(MochiKit.Base.values(this.directLogins()), function(aDirectLogin) {
626 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin); 626 aDirectLogin.record().user().synchronizeDirectLogin(aDirectLogin);
627 }); 627 });
628 628
629 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) { 629 MochiKit.Iter.forEach(this.removedDirectLogins(), function(aDirectLogin) {
630 aDirectLogin.record().user().removeDirectLogin(aDirectLogin); 630 aDirectLogin.record().user().removeDirectLogin(aDirectLogin);
631 }); 631 });
632 632
633 this.resetRemovedDirectLogins(); 633 this.resetRemovedDirectLogins();
634//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues"); 634//MochiKit.Logging.logDebug("<<< Record.syncDirectLoginReferenceValues");
635 }, 635 },
636 636
637 //------------------------------------------------------------------------- 637 //-------------------------------------------------------------------------
638 638
639 'saveChanges': function() { 639 'saveChanges': function() {
640 var result; 640 var result;
641 641
642 if (this.isBrandNew() == false) { 642 // if (this.isBrandNew() == false) {
643 result = this.user().saveRecords([this], 'updateData'); 643 // result = this.user().saveRecords([this], 'updateData');
644 } else { 644 // } else {
645 result = this.user().saveRecords([this], 'addNewRecords'); 645 // result = this.user().saveRecords([this], 'addNewRecords');
646 } 646 // }
647
648 result = this.user().saveRecords([this]);
647 649
648 return result; 650 return result;
649 }, 651 },
650 652
651/* 653/*
652 'saveChanges': function() { 654 'saveChanges': function() {
653 var deferredResult; 655 var deferredResult;
654 varresult; 656 varresult;
655 657
656 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true); 658 Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'records', true);
657//MochiKit.Logging.logDebug(">>> Record.saveChanges"); 659//MochiKit.Logging.logDebug(">>> Record.saveChanges");
658//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges"); 660//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.saveChanges");
659 if (this.headerNotes() != null) { 661 if (this.headerNotes() != null) {
660 this.setNotes(this.headerNotes()); 662 this.setNotes(this.headerNotes());
661 } 663 }
662 this.syncDirectLoginReferenceValues(); 664 this.syncDirectLoginReferenceValues();
663 this.currentVersion().createNewVersion(); 665 this.currentVersion().createNewVersion();
664 666
665 result = {'records': [{}]}; 667 result = {'records': [{}]};
666 668
667 deferredResult = new MochiKit.Async.Deferred(); 669 deferredResult = new MochiKit.Async.Deferred();
668 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 670 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
669 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey')); 671 deferredResult.addCallback(MochiKit.Base.method(this, 'updateKey'));
670 672
671 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 673 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
672 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData')); 674 deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData'));
673 deferredResult.addCallback(function(aResult, res) { 675 deferredResult.addCallback(function(aResult, res) {
674 aResult['user'] = res; 676 aResult['user'] = res;
675 return aResult; 677 return aResult;
676 }, result); 678 }, result);
677 679
678 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 680 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
679 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 681 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
680 deferredResult.addCallback(function(aResult, res) { 682 deferredResult.addCallback(function(aResult, res) {
681 //# aResult['record'] = res; 683 //# aResult['record'] = res;
682 aResult['records'][0]['record'] = res; 684 aResult['records'][0]['record'] = res;
683 return aResult; 685 return aResult;
684 }, result); 686 }, result);
685 687
686 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions'); 688 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordVersions');
687 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData')); 689 deferredResult.addCallback(MochiKit.Base.method(this.currentVersion(), 'encryptedData'));
688 deferredResult.addCallback(function(aResult, res) { 690 deferredResult.addCallback(function(aResult, res) {
689 // aResult['currentRecordVersion'] = res; 691 // aResult['currentRecordVersion'] = res;
690 aResult['records'][0]['currentRecordVersion'] = res; 692 aResult['records'][0]['currentRecordVersion'] = res;
691 return aResult; 693 return aResult;
692 }, result); 694 }, result);
693 695
694 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); 696 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData');
695 if (this.isBrandNew() == false) { 697 if (this.isBrandNew() == false) {
696 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData'); 698 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateData');
697 } else { 699 } else {
698 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord'); 700 //# deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecord');
699 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords'); 701 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'addNewRecords');
700 } 702 }
701 703
702 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData')); 704 deferredResult.addCallback(MochiKit.Base.method(this, 'takeSnapshotOfCurrentData'));
703 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface'); 705 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_updatingInterface');
704 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false); 706 deferredResult.addCallback(MochiKit.Base.method(this, 'setIsBrandNew'), false);
705 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); 707 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated');
706 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); 708 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated');
707 deferredResult.callback(); 709 deferredResult.callback();
708 710
709 return deferredResult; 711 return deferredResult;
710 }, 712 },
711 */ 713 */
712 //------------------------------------------------------------------------- 714 //-------------------------------------------------------------------------
713 715
714 'cancelChanges': function() { 716 'cancelChanges': function() {
715//MochiKit.Logging.logDebug(">>> Record.cancelChanges"); 717//MochiKit.Logging.logDebug(">>> Record.cancelChanges");
716//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData())); 718//MochiKit.Logging.logDebug("--- Record.cancelChanges - cachedData: " + Clipperz.Base.serializeJSON(this.cachedData()));
717 if (this.isBrandNew()) { 719 if (this.isBrandNew()) {
718 this.user().removeRecord(this); 720 this.user().removeRecord(this);
719 } else { 721 } else {
720 this.restoreValuesFromSnapshot(this.cachedData()); 722 this.restoreValuesFromSnapshot(this.cachedData());
721 } 723 }
722//MochiKit.Logging.logDebug("<<< Record.cancelChanges"); 724//MochiKit.Logging.logDebug("<<< Record.cancelChanges");
723 }, 725 },
724 726
725 //------------------------------------------------------------------------- 727 //-------------------------------------------------------------------------
726 728
727 'restoreValuesFromSnapshot': function(someSnapshotData) { 729 'restoreValuesFromSnapshot': function(someSnapshotData) {
728 varsnapshotData; 730 varsnapshotData;
729 731
730//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot"); 732//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.restoreValuesFromSnapshot");
731 snapshotData = Clipperz.Base.evalJSON(someSnapshotData); 733 snapshotData = Clipperz.Base.evalJSON(someSnapshotData);
732//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData)); 734//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - someSnapshotData (1): " + Clipperz.Base.serializeJSON(someSnapshotData));
733 this.setLabel(snapshotData['label']); 735 this.setLabel(snapshotData['label']);
734 this.resetDirectLogins(); 736 this.resetDirectLogins();
735 this.setShouldProcessData(true); 737 this.setShouldProcessData(true);
736 this.processData(snapshotData); 738 this.processData(snapshotData);
737//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData)); 739//MochiKit.Logging.logDebug("--- Record.restoreValuesFromSnapshot - snapshotData: (2)" + Clipperz.Base.serializeJSON(snapshotData));
738 740
739 this.resetRemovedDirectLogins(); 741 this.resetRemovedDirectLogins();
740 742
741 { 743 {
742 var currentSnapshot; 744 var currentSnapshot;
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/User.js b/frontend/beta/js/Clipperz/PM/DataModel/User.js
index dbbe9a0..b065557 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/User.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/User.js
@@ -192,356 +192,359 @@ MochiKit.Logging.logError("- User.errorHandler: " + anErrorString + " (" + anExc
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 = {'records': []};
314 314
315 deferredResult = new MochiKit.Async.Deferred(); 315 deferredResult = new MochiKit.Async.Deferred();
316 c = someRecords.length; 316 c = someRecords.length;
317 for (i=0; i<c; i++) { 317 for (i=0; i<c; i++) {
318 deferredResult.addCallback(function(aRecord) { 318 deferredResult.addCallback(function(aRecord) {
319 if (aRecord.headerNotes() != null) { 319 if (aRecord.headerNotes() != null) {
320 aRecord.setNotes(aRecord.headerNotes()); 320 aRecord.setNotes(aRecord.headerNotes());
321 } 321 }
322 aRecord.syncDirectLoginReferenceValues(); 322 aRecord.syncDirectLoginReferenceValues();
323 aRecord.currentVersion().createNewVersion(); 323 aRecord.currentVersion().createNewVersion();
324 aRecord.updateKey(); 324 aRecord.updateKey();
325 }, someRecords[i]); 325 }, someRecords[i]);
326 deferredResult.addCallback(MochiKit.Async.wait, 0.1); 326 deferredResult.addCallback(MochiKit.Async.wait, 0.1);
327 } 327 }
328//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 1 " + res); return res;}); 328//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 1 " + res); return res;});
329 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo'); 329 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_collectRecordInfo');
330//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 2 " + res); return res;}); 330//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 2 " + res); return res;});
331 331
332 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData'); 332 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptUserData');
333//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 3 " + res); return res;}); 333//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 3 " + res); return res;});
334 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 334 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
335//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 4 " + res); return res;}); 335//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 4 " + res); return res;});
336 deferredResult.addCallback(function(aResult, res) { 336 deferredResult.addCallback(function(aResult, res) {
337 aResult['user'] = res; 337 aResult['user'] = res;
338 return aResult; 338 return aResult;
339 }, result); 339 }, result);
340//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 5 " + res); return res;}); 340//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 5 " + res); return res;});
341 341
342 c = someRecords.length; 342 c = someRecords.length;
343 for (i=0; i<c; i++) { 343 for (i=0; i<c; i++) {
344 var recordData; 344 var recordData;
345 345
346 recordData = {}; 346 recordData = {};
347 347
348//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.1 " + res); return res;}); 348//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.1 " + res); return res;});
349 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData'); 349 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_encryptRecordData');
350//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.2 " + res); return res;}); 350//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.2 " + res); return res;});
351 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'encryptedData')); 351 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'encryptedData'));
352//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.3 " + res); return res;}); 352//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.3 " + res); return res;});
353 deferredResult.addCallback(function(aResult, res) { 353 deferredResult.addCallback(function(aResult, res) {
354 aResult['record'] = res; 354 aResult['record'] = res;
355 return aResult; 355 return aResult;
356 }, recordData); 356 }, recordData);
357//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.4 " + res); return res;}); 357//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.4 " + res); return res;});
358 358
359 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', {} /*'saveCard_encryptRecordVersions'*/); 359 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', {} /*'saveCard_encryptRecordVersions'*/);
360//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.5 " + res); return res;}); 360//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.5 " + res); return res;});
361 deferredResult.addCallback(MochiKit.Base.method(someRecords[i].currentVersion(), 'encryptedData')); 361 deferredResult.addCallback(MochiKit.Base.method(someRecords[i].currentVersion(), 'encryptedData'));
362//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.6 " + res); return res;}); 362//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.6 " + res); return res;});
363 deferredResult.addCallback(function(aResult, res) { 363 deferredResult.addCallback(function(aResult, res) {
364 aResult['currentRecordVersion'] = res; 364 aResult['currentRecordVersion'] = res;
365 return aResult; 365 return aResult;
366 }, recordData); 366 }, recordData);
367//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.7 " + res); return res;}); 367//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.7 " + res); return res;});
368 368
369 deferredResult.addCallback(function(aResult, res) { 369 deferredResult.addCallback(function(aResult, res) {
370 aResult['records'].push(res); 370 aResult['records'] = { 'updated': [res] };
371 return aResult; 371 return aResult;
372 }, result); 372 }, result);
373//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.8 " + res); return res;}); 373//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 6.8 " + res); return res;});
374 } 374 }
375 375
376//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 7 " + res); return res;}); 376//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 7 " + res); return res;});
377 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData'); 377 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveCard_sendingData');
378//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 8 " + res); return res;}); 378//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 8 " + res); return res;});
379 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName); 379 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), methodName);
380 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges');
380//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9 " + res); return res;}); 381//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9 " + res); return res;});
381 382
382 for (i=0; i<c; i++) { 383 for (i=0; i<c; i++) {
383//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.1 " + res); return res;}); 384//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.1 " + res); return res;});
384 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'takeSnapshotOfCurrentData')); 385 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'takeSnapshotOfCurrentData'));
385//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.2 " + res); return res;}); 386//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.2 " + res); return res;});
386 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'setIsBrandNew'), false); 387 deferredResult.addCallback(MochiKit.Base.method(someRecords[i], 'setIsBrandNew'), false);
387//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.3 " + res); return res;}); 388//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 9.3 " + res); return res;});
388 } 389 }
389 390
390//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 10 " + res); return res;}); 391//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 10 " + res); return res;});
391 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated'); 392 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'recordUpdated');
392//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 11 " + res); return res;}); 393//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 11 " + res); return res;});
393 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated'); 394 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'directLoginUpdated');
394//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 12 " + res); return res;}); 395//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.saveRecords - 12 " + res); return res;});
395 deferredResult.callback(); 396 deferredResult.callback();
396 397
397 return deferredResult; 398 return deferredResult;
398 }, 399 },
399 400
400 //------------------------------------------------------------------------- 401 //-------------------------------------------------------------------------
401 402
402 'removeRecord': function(aRecord) { 403 'removeRecord': function(aRecord) {
403//MochiKit.Logging.logDebug(">>> User.removeRecord"); 404//MochiKit.Logging.logDebug(">>> User.removeRecord");
404 delete this.records()[aRecord.reference()]; 405 delete this.records()[aRecord.reference()];
405//MochiKit.Logging.logDebug("--- User.removeRecord - 1"); 406//MochiKit.Logging.logDebug("--- User.removeRecord - 1");
406 Clipperz.NotificationCenter.notify(aRecord, 'recordRemoved', null, false); 407 Clipperz.NotificationCenter.notify(aRecord, 'recordRemoved', null, false);
407 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true); 408 Clipperz.NotificationCenter.notify(this, 'updatedSection', 'records', true);
408//MochiKit.Logging.logDebug("<<< User.removeRecord"); 409//MochiKit.Logging.logDebug("<<< User.removeRecord");
409 }, 410 },
410 411
411 //------------------------------------------------------------------------- 412 //-------------------------------------------------------------------------
412 413
413 'deleteRecordsAction': function(someRecords) { 414 'deleteRecordsAction': function(someRecords) {
414 vardeferredResult; 415 vardeferredResult;
415 var parameters; 416 var parameters;
416 417
417//MochiKit.Logging.logDebug(">>> User.deleteRecordsAction - someRecords.length: " + someRecords.length); 418//MochiKit.Logging.logDebug(">>> User.deleteRecordsAction - someRecords.length: " + someRecords.length);
418 parameters = {}; 419 parameters = {};
419 deferredResult = new MochiKit.Async.Deferred(); 420 deferredResult = new MochiKit.Async.Deferred();
420//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 1 " + res); return res;}); 421//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 1 " + res); return res;});
421 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_collectData'); 422 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_collectData');
422//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 2 " + res); return res;}); 423//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 2 " + res); return res;});
423 deferredResult.addCallback(function(someParameters, someRecords) { 424 deferredResult.addCallback(function(someParameters, someRecords) {
424 var recordReferences; 425 var recordReferences;
425 426
426 recordReferences = MochiKit.Base.map(function(aRecord) { 427 recordReferences = MochiKit.Base.map(function(aRecord) {
427 var result; 428 var result;
428 429
429 result = aRecord.reference(); 430 result = aRecord.reference();
430 aRecord.remove(); 431 aRecord.remove();
431 432
432 return result; 433 return result;
433 }, someRecords); 434 }, someRecords);
434 someParameters.recordReferences = recordReferences; 435 // someParameters.recordReferences = recordReferences;
436 someParameters['records'] = { 'deleted': recordReferences};
435 437
436 return someParameters; 438 return someParameters;
437 }, parameters); 439 }, parameters);
438//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 3 " + res); return res;}); 440//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 3 " + res); return res;});
439 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_encryptData'); 441 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_encryptData');
440//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 4 " + res); return res;}); 442//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 4 " + res); return res;});
441 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData')); 443 deferredResult.addCallback(MochiKit.Base.method(this, 'encryptedData'));
442//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 5 " + res); return res;}); 444//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 5 " + res); return res;});
443 deferredResult.addCallback(function(someParameters, anUserEncryptedData) { 445 deferredResult.addCallback(function(someParameters, anUserEncryptedData) {
444 someParameters.user = anUserEncryptedData; 446 someParameters.user = anUserEncryptedData;
445 return someParameters; 447 return someParameters;
446 }, parameters); 448 }, parameters);
447//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 6 " + res); return res;}); 449//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 6 " + res); return res;});
448 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_sendingData'); 450 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_sendingData');
449//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecords parameters: " + Clipperz.Base.serializeJSON(res)); return res;}); 451//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecords parameters: " + Clipperz.Base.serializeJSON(res)); return res;});
450//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 7 " + res); return res;}); 452//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 7 " + res); return res;});
451 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords'); 453 // deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteRecords');
454 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'saveChanges');
452//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 8 " + res); return res;}); 455//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 8 " + res); return res;});
453 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_updatingInterface'); 456 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'deleteRecord_updatingInterface');
454//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 9 " + res); return res;}); 457//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.deleteRecordsAction - 9 " + res); return res;});
455 deferredResult.callback(someRecords); 458 deferredResult.callback(someRecords);
456//MochiKit.Logging.logDebug("<<< User.deleteRecordsAction"); 459//MochiKit.Logging.logDebug("<<< User.deleteRecordsAction");
457 460
458 return deferredResult; 461 return deferredResult;
459 }, 462 },
460 463
461 //------------------------------------------------------------------------- 464 //-------------------------------------------------------------------------
462 465
463 'resetAllLocalData': function() { 466 'resetAllLocalData': function() {
464 this.resetConnection(); 467 this.resetConnection();
465 468
466 this.setUsername(""); 469 this.setUsername("");
467 this.setPassphrase(""); 470 this.setPassphrase("");
468 471
469 this._header = null; 472 this._header = null;
470 this._statistics = null; 473 this._statistics = null;
471 this._preferences = null; 474 this._preferences = null;
472 this._records = {}; 475 this._records = {};
473 this._directLoginReferences = {}; 476 this._directLoginReferences = {};
474 }, 477 },
475 478
476 //------------------------------------------------------------------------- 479 //-------------------------------------------------------------------------
477 480
478 'deleteAccountAction': function() { 481 'deleteAccountAction': function() {
479 var deferredResult; 482 var deferredResult;
480 483
481//MochiKit.Logging.logDebug(">>> user.deleteAccountAction - " + this); 484//MochiKit.Logging.logDebug(">>> user.deleteAccountAction - " + this);
482 deferredResult = new MochiKit.Async.Deferred(); 485 deferredResult = new MochiKit.Async.Deferred();
483 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser'); 486 deferredResult.addCallback(MochiKit.Base.method(this.connection(), 'message'), 'deleteUser');
484 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData')); 487 deferredResult.addCallback(MochiKit.Base.method(this, 'resetAllLocalData'));
485 deferredResult.callback(); 488 deferredResult.callback();
486//MochiKit.Logging.logDebug("<<< user.deleteAccountAction - " + this); 489//MochiKit.Logging.logDebug("<<< user.deleteAccountAction - " + this);
487 490
488 return deferredResult; 491 return deferredResult;
489 }, 492 },
490 493
491 //------------------------------------------------------------------------- 494 //-------------------------------------------------------------------------
492 495
493 'encryptedData': function() { 496 'encryptedData': function() {
494 var deferredResult; 497 var deferredResult;
495 varresult; 498 varresult;
496 499
497 result = {}; 500 result = {};
498 501
499 deferredResult = new MochiKit.Async.Deferred(); 502 deferredResult = new MochiKit.Async.Deferred();
500 503
501//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 0: " + res); return res;}); 504//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 0: " + res); return res;});
502 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'encryptedData')); 505 deferredResult.addCallback(MochiKit.Base.method(this.header(), 'encryptedData'));
503//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 1: " + res); return res;}); 506//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 1: " + res); return res;});
504 deferredResult.addCallback(function(aResult, aValue) { 507 deferredResult.addCallback(function(aResult, aValue) {
505 aResult['header'] = aValue; 508 aResult['header'] = aValue;
506 }, result); 509 }, result);
507//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 2: " + res); return res;}); 510//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 2: " + res); return res;});
508 511
509 deferredResult.addCallback(MochiKit.Base.method(this.statistics(), 'encryptedData')); 512 deferredResult.addCallback(MochiKit.Base.method(this.statistics(), 'encryptedData'));
510//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 3: " + res); return res;}); 513//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 3: " + res); return res;});
511 deferredResult.addCallback(function(aResult, aValue) { 514 deferredResult.addCallback(function(aResult, aValue) {
512 aResult['statistics'] = aValue; 515 aResult['statistics'] = aValue;
513 }, result); 516 }, result);
514//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 4: " + res); return res;}); 517//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 4: " + res); return res;});
515 518
516 deferredResult.addCallback(MochiKit.Base.bind(function(aResult, aValue) { 519 deferredResult.addCallback(MochiKit.Base.bind(function(aResult, aValue) {
517 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; 520 aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
518 aResult['lock'] = this.lock(); 521 aResult['lock'] = this.lock();
519 522
520 return aResult; 523 return aResult;
521 }, this), result); 524 }, this), result);
522//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 5: " + res); return res;}); 525//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("User.encryptedData - 5: " + res); return res;});
523 deferredResult.callback(); 526 deferredResult.callback();
524 527
525 return deferredResult; 528 return deferredResult;
526 }, 529 },
527 530
528 //------------------------------------------------------------------------- 531 //-------------------------------------------------------------------------
529 532
530 'preferences': function() { 533 'preferences': function() {
531 if (this._preferences == null) { 534 if (this._preferences == null) {
532 this._preferences = new Clipperz.PM.DataModel.UserPreferences({user:this}); 535 this._preferences = new Clipperz.PM.DataModel.UserPreferences({user:this});
533 } 536 }
534 537
535 return this._preferences; 538 return this._preferences;
536 }, 539 },
537/* 540/*
538 'setPreferences': function(aValue) { 541 'setPreferences': function(aValue) {
539 this._preferences = aValue; 542 this._preferences = aValue;
540 543
541 if (this._preferences.preferredLanguage() != null) { 544 if (this._preferences.preferredLanguage() != null) {
542 Clipperz.PM.Strings.Languages.setSelectedLanguage(this._preferences.preferredLanguage()); 545 Clipperz.PM.Strings.Languages.setSelectedLanguage(this._preferences.preferredLanguage());
543 } else { 546 } else {
544//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage); 547//MochiKit.Logging.logDebug("### keepping the browser selected language: " + Clipperz.PM.Strings.selectedLanguage);
545 } 548 }
546 }, 549 },
547*/ 550*/