summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
Unidiff
Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js48
1 files changed, 14 insertions, 34 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js b/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
index 01ba122..326022c 100644
--- a/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
+++ b/frontend/gamma/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js
@@ -1,30 +1,28 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26try { if (typeof(Clipperz.PM.Proxy.Offline) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.PM.Proxy.Offline) == 'undefined') { throw ""; }} catch (e) {
27 throw "Clipperz.PM.Proxy.Offline.DataStore depends on Clipperz.PM.Proxy.Offline!"; 25 throw "Clipperz.PM.Proxy.Offline.DataStore depends on Clipperz.PM.Proxy.Offline!";
28} 26}
29 27
30//============================================================================= 28//=============================================================================
@@ -102,32 +100,30 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
102 c = someData['users'].length; 100 c = someData['users'].length;
103 101
104 for (i=0; i<c; i++) { 102 for (i=0; i<c; i++) {
105 varnewConnection; 103 varnewConnection;
106 varrecordConfiguration; 104 varrecordConfiguration;
107 105
108 deferredResult.addMethod(this, 'userSerializedEncryptedData', someData['users'][i]); 106 deferredResult.addMethod(this, 'userSerializedEncryptedData', someData['users'][i]);
109 deferredResult.addCallback(MochiKit.Base.bind(function(aUserSerializationContext) { 107 deferredResult.addCallback(MochiKit.Base.bind(function(aUserSerializationContext) {
110//console.log("SERIALIZED USER", aUserSerializationContext);
111 resultData['users'][aUserSerializationContext['credentials']['C']] = { 108 resultData['users'][aUserSerializationContext['credentials']['C']] = {
112 's': aUserSerializationContext['credentials']['s'], 109 's': aUserSerializationContext['credentials']['s'],
113 'v': aUserSerializationContext['credentials']['v'], 110 'v': aUserSerializationContext['credentials']['v'],
114 'version': aUserSerializationContext['data']['connectionVersion'], 111 'version': aUserSerializationContext['data']['connectionVersion'],
115 'userDetails': aUserSerializationContext['encryptedData']['user']['header'], 112 'userDetails': aUserSerializationContext['encryptedData']['user']['header'],
116 'userDetailsVersion':aUserSerializationContext['encryptedData']['user']['version'], 113 'userDetailsVersion':aUserSerializationContext['encryptedData']['user']['version'],
117 'statistics': aUserSerializationContext['encryptedData']['user']['statistics'], 114 'statistics': aUserSerializationContext['encryptedData']['user']['statistics'],
118 'lock': aUserSerializationContext['encryptedData']['user']['lock'], 115 'lock': aUserSerializationContext['encryptedData']['user']['lock'],
119 'records': this.rearrangeRecordsData(aUserSerializationContext['encryptedData']['records']) 116 'records': this.rearrangeRecordsData(aUserSerializationContext['encryptedData']['records'])
120 } 117 }
121 }, this)); 118 }, this));
122 } 119 }
123 120
124 deferredResult.addCallback(MochiKit.Base.bind(function() { 121 deferredResult.addCallback(MochiKit.Base.bind(function() {
125//console.log("this._data", resultData);
126 this._data = resultData; 122 this._data = resultData;
127 }, this)); 123 }, this));
128 124
129 deferredResult.callback(); 125 deferredResult.callback();
130//Clipperz.log("<<< Proxy.Test.setupWithData"); 126//Clipperz.log("<<< Proxy.Test.setupWithData");
131 127
132 return deferredResult; 128 return deferredResult;
133 }, 129 },
@@ -390,17 +386,17 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
390 } catch (exception) { 386 } catch (exception) {
391 result = { 387 result = {
392 'data': Clipperz.PM.Crypto.randomKey(), 388 'data': Clipperz.PM.Crypto.randomKey(),
393 'version':Clipperz.PM.Connection.communicationProtocol.currentVersion 389 'version':Clipperz.PM.Connection.communicationProtocol.currentVersion
394 } 390 }
395 } 391 }
396 nextTollRequestType = 'CONNECT'; 392 nextTollRequestType = 'CONNECT';
397 } else { 393 } else {
398 MochiKit.Logging.logError("Clipperz.PM.Proxy.Test.handshake - unhandled message: " + someParameters.message); 394 Clipperz.logError("Clipperz.PM.Proxy.Test.handshake - unhandled message: " + someParameters.message);
399 } 395 }
400 396
401 result = { 397 result = {
402 result: result, 398 result: result,
403 toll: this.getTollForRequestType(nextTollRequestType) 399 toll: this.getTollForRequestType(nextTollRequestType)
404 } 400 }
405 401
406 return result; 402 return result;
@@ -520,19 +516,16 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
520 } else { 516 } else {
521 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly; 517 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly;
522 } 518 }
523 //===================================================================== 519 //=====================================================================
524 /* } else if (someParameters.message == 'updateData') { 520 /* } else if (someParameters.message == 'updateData') {
525 if (this.isReadOnly() == false) { 521 if (this.isReadOnly() == false) {
526 var i, c; 522 var i, c;
527 523
528//console.log("###===============================================================");
529//console.log("###>>>", Clipperz.Base.serializeJSON(someParameters));
530//console.log("###--- userData", Clipperz.Base.serializeJSON(this.userData()));
531 if (this.userData()['lock']!= someParameters['parameters']['user']['lock']) { 524 if (this.userData()['lock']!= someParameters['parameters']['user']['lock']) {
532 throw "the lock attribute is not processed correctly" 525 throw "the lock attribute is not processed correctly"
533 } 526 }
534 527
535 this.userData()['userDetails'] = someParameters['parameters']['user']['header']; 528 this.userData()['userDetails'] = someParameters['parameters']['user']['header'];
536 this.userData()['statistics'] = someParameters['parameters']['user']['statistics']; 529 this.userData()['statistics'] = someParameters['parameters']['user']['statistics'];
537 this.userData()['userDetailsVersions']= someParameters['parameters']['user']['version']; 530 this.userData()['userDetailsVersions']= someParameters['parameters']['user']['version'];
538 531
@@ -557,32 +550,24 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
557 'previousVersion': currentRecordData['currentRecordVersion']['previousVersion'], 550 'previousVersion': currentRecordData['currentRecordVersion']['previousVersion'],
558 'previousVersionKey':currentRecordData['currentRecordVersion']['previousVersionKey'] 551 'previousVersionKey':currentRecordData['currentRecordVersion']['previousVersionKey']
559 } 552 }
560 } 553 }
561 554
562 this.userData()['lock'] = Clipperz.PM.Crypto.randomKey(); 555 this.userData()['lock'] = Clipperz.PM.Crypto.randomKey();
563 result['lock'] = this.userData()['lock']; 556 result['lock'] = this.userData()['lock'];
564 result['result'] = 'done'; 557 result['result'] = 'done';
565//console.log("###<<< userData", Clipperz.Base.serializeJSON(this.userData()));
566 } else { 558 } else {
567 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly; 559 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly;
568 } 560 }
569 */ //===================================================================== 561 */ //=====================================================================
570 } else if (someParameters.message == 'saveChanges') { 562 } else if (someParameters.message == 'saveChanges') {
571 if (this.isReadOnly() == false) { 563 if (this.isReadOnly() == false) {
572 var i, c; 564 var i, c;
573 565
574//console.log("###===============================================================");
575//console.log("###>>>", someParameters);
576//console.log("###>>>", Clipperz.Base.serializeJSON(someParameters));
577//console.log("###--- userData", Clipperz.Base.serializeJSON(this.userData()));
578//console.log("###===============================================================");
579//console.log("--- userData.lock ", this.userData()['lock']);
580//console.log("--- parameters.lock", someParameters['parameters']['user']['lock']);
581 if (aConnection['userData']['lock']!= someParameters['parameters']['user']['lock']) { 566 if (aConnection['userData']['lock']!= someParameters['parameters']['user']['lock']) {
582 throw "the lock attribute is not processed correctly" 567 throw "the lock attribute is not processed correctly"
583 } 568 }
584 569
585 aConnection['userData']['userDetails'] = someParameters['parameters']['user']['header']; 570 aConnection['userData']['userDetails'] = someParameters['parameters']['user']['header'];
586 aConnection['userData']['statistics'] = someParameters['parameters']['user']['statistics']; 571 aConnection['userData']['statistics'] = someParameters['parameters']['user']['statistics'];
587 aConnection['userData']['userDetailsVersions']= someParameters['parameters']['user']['version']; 572 aConnection['userData']['userDetailsVersions']= someParameters['parameters']['user']['version'];
588 573
@@ -594,17 +579,16 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
594 currentRecordData = someParameters['parameters']['records']['updated'][i]; 579 currentRecordData = someParameters['parameters']['records']['updated'][i];
595 currentRecord = aConnection['userData']['records'][currentRecordData['record']['reference']]; 580 currentRecord = aConnection['userData']['records'][currentRecordData['record']['reference']];
596 581
597 if ( 582 if (
598 (typeof(aConnection['userData']['records'][currentRecordData['record']['reference']]) == 'undefined') 583 (typeof(aConnection['userData']['records'][currentRecordData['record']['reference']]) == 'undefined')
599 && 584 &&
600 (typeof(currentRecordData['currentRecordVersion']) == 'undefined') 585 (typeof(currentRecordData['currentRecordVersion']) == 'undefined')
601 ) { 586 ) {
602//console.log("######## SHIT HAPPENS");
603 throw "Record added without a recordVersion"; 587 throw "Record added without a recordVersion";
604 } 588 }
605 589
606 if (currentRecord == null) { 590 if (currentRecord == null) {
607 currentRecord = {}; 591 currentRecord = {};
608 currentRecord['versions'] = {}; 592 currentRecord['versions'] = {};
609 currentRecord['creationDate']= Clipperz.PM.Date.formatDateWithUTCFormat(new Date()); 593 currentRecord['creationDate']= Clipperz.PM.Date.formatDateWithUTCFormat(new Date());
610 currentRecord['accessDate'] = Clipperz.PM.Date.formatDateWithUTCFormat(new Date()); 594 currentRecord['accessDate'] = Clipperz.PM.Date.formatDateWithUTCFormat(new Date());
@@ -630,35 +614,33 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
630 } 614 }
631 } 615 }
632 616
633 c = someParameters['parameters']['records']['deleted'].length; 617 c = someParameters['parameters']['records']['deleted'].length;
634 for (i=0; i<c; i++) { 618 for (i=0; i<c; i++) {
635 var currentRecordReference; 619 var currentRecordReference;
636 620
637 currentRecordReference = someParameters['parameters']['records']['deleted'][i]; 621 currentRecordReference = someParameters['parameters']['records']['deleted'][i];
638//console.log("DELETING records", currentRecordReference);
639 delete aConnection['userData']['records'][currentRecordReference]; 622 delete aConnection['userData']['records'][currentRecordReference];
640 } 623 }
641 624
642 aConnection['userData']['lock'] = Clipperz.PM.Crypto.randomKey(); 625 aConnection['userData']['lock'] = Clipperz.PM.Crypto.randomKey();
643 result['lock'] = aConnection['userData']['lock']; 626 result['lock'] = aConnection['userData']['lock'];
644 result['result'] = 'done'; 627 result['result'] = 'done';
645//console.log("###<<< userData", Clipperz.Base.serializeJSON(this.userData()));
646 } else { 628 } else {
647 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly; 629 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly;
648 } 630 }
649 631
650 //===================================================================== 632 //=====================================================================
651 // 633 //
652 // U N H A N D L E D M e t h o d 634 // U N H A N D L E D M e t h o d
653 // 635 //
654 //===================================================================== 636 //=====================================================================
655 } else { 637 } else {
656 MochiKit.Logging.logError("Clipperz.PM.Proxy.Test.message - unhandled message: " + someParameters.message); 638 Clipperz.logError("Clipperz.PM.Proxy.Test.message - unhandled message: " + someParameters.message);
657 } 639 }
658 640
659 result = { 641 result = {
660 result: result, 642 result: result,
661 toll: this.getTollForRequestType('MESSAGE') 643 toll: this.getTollForRequestType('MESSAGE')
662 } 644 }
663 645
664 // return MochiKit.Async.succeed(result); 646 // return MochiKit.Async.succeed(result);
@@ -681,22 +663,22 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
681 663
682 'userDetails': function(aConnection) { 664 'userDetails': function(aConnection) {
683 var result; 665 var result;
684 666
685 if (this.isTestData(aConnection)) { 667 if (this.isTestData(aConnection)) {
686 var serializedHeader; 668 var serializedHeader;
687 var version; 669 var version;
688 670
689//MochiKit.Logging.logDebug("### test data"); 671//Clipperz.logDebug("### test data");
690 version = aConnection['userData']['userDetailsVersion']; 672 version = aConnection['userData']['userDetailsVersion'];
691 serializedHeader = Clipperz.Base.serializeJSON(aConnection['userData']['userDetails']); 673 serializedHeader = Clipperz.Base.serializeJSON(aConnection['userData']['userDetails']);
692 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(aConnection['userData']['__masterkey_test_value__'], serializedHeader); 674 result = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(aConnection['userData']['__masterkey_test_value__'], serializedHeader);
693 } else { 675 } else {
694//MochiKit.Logging.logDebug("### NOT test data"); 676//Clipperz.logDebug("### NOT test data");
695 result = aConnection['userData']['userDetails']; 677 result = aConnection['userData']['userDetails'];
696 } 678 }
697 679
698 return result; 680 return result;
699 }, 681 },
700 682
701 'statistics': function(aConnection) { 683 'statistics': function(aConnection) {
702 var result; 684 var result;
@@ -744,21 +726,19 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
744 726
745 connection = new Clipperz.PM.Connection.communicationProtocol.versions[aDeferredContext['data']['connectionVersion']]() 727 connection = new Clipperz.PM.Connection.communicationProtocol.versions[aDeferredContext['data']['connectionVersion']]()
746 aDeferredContext['credentials'] = connection.serverSideUserCredentials(aDeferredContext['user'].username(),aDeferredContext['user'].passphrase()); 728 aDeferredContext['credentials'] = connection.serverSideUserCredentials(aDeferredContext['user'].username(),aDeferredContext['user'].passphrase());
747 729
748 return aDeferredContext; 730 return aDeferredContext;
749 }); 731 });
750 732
751 // deferredResult.addCallback(function(aDeferredContext) { 733 // deferredResult.addCallback(function(aDeferredContext) {
752//console.log("#-#-#-#-#", aDeferredContext);
753 // return aDeferredContext['user'].serializedDataUsingVersion(MochiKit.Base.values(aDeferredContext['user'].records()), aDeferredContext['data']['version']); 734 // return aDeferredContext['user'].serializedDataUsingVersion(MochiKit.Base.values(aDeferredContext['user'].records()), aDeferredContext['data']['version']);
754 // }, deferredContext); 735 // }, deferredContext);
755 // deferredResult.addCallback(function(aUserSerializedData) { 736 // deferredResult.addCallback(function(aUserSerializedData) {
756//console.log("USER SERIALIZED DATA", aUserSerializedData);
757 // }); 737 // });
758// 738//
759 // deferredResult.addCallback(MochiKit.Async.succeed, deferredContext); 739 // deferredResult.addCallback(MochiKit.Async.succeed, deferredContext);
760 deferredResult.callback(deferredContext); 740 deferredResult.callback(deferredContext);
761 741
762 return deferredResult; 742 return deferredResult;
763 }, 743 },
764 744