summaryrefslogtreecommitdiff
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-23 17:36:57 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2011-10-23 17:36:57 (UTC)
commit67455b069c4c9ec493f9cef76017e172a430a7d4 (patch) (unidiff)
tree0b287debfeeb0819b3df9dd02860cd84103e25b3
parentb312e037ebba7c94abea9661bcf62c52b7d73fbf (diff)
downloadclipperz-67455b069c4c9ec493f9cef76017e172a430a7d4.zip
clipperz-67455b069c4c9ec493f9cef76017e172a430a7d4.tar.gz
clipperz-67455b069c4c9ec493f9cef76017e172a430a7d4.tar.bz2
Integration of PHP backend with /beta and /gamma front ends
Fixed PHP backend and /beta code to handle request and data format compatible with /gamma. At the moment adding/deleting/editing records seem to work fine.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--backend/php/src/configuration.php6
-rw-r--r--backend/php/src/index.php189
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/Record.js7
-rw-r--r--frontend/beta/js/Clipperz/PM/Proxy.js3
-rwxr-xr-xfrontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js262
-rw-r--r--frontend/gamma/html/index_template.html5
-rw-r--r--frontend/gamma/js/Clipperz/Async.js19
-rw-r--r--frontend/gamma/js/Clipperz/PM/Proxy.js2
8 files changed, 205 insertions, 288 deletions
diff --git a/backend/php/src/configuration.php b/backend/php/src/configuration.php
index 291e3a1..85f680e 100644
--- a/backend/php/src/configuration.php
+++ b/backend/php/src/configuration.php
@@ -1,36 +1,36 @@
1<?php 1<?php
2global $configuration; 2global $configuration;
3$configuration['soap'] = "http://www.phpobjectgenerator.com/services/soap.php?wsdl"; 3$configuration['soap'] = "http://www.phpobjectgenerator.com/services/soap.php?wsdl";
4$configuration['homepage'] = "http://www.phpobjectgenerator.com"; 4$configuration['homepage'] = "http://www.phpobjectgenerator.com";
5$configuration['revisionNumber'] = ""; 5$configuration['revisionNumber'] = "";
6$configuration['versionNumber'] = "3.0d"; 6$configuration['versionNumber'] = "3.0d";
7 7
8$configuration['setup_password'] = ''; 8$configuration['setup_password'] = '';
9 9
10 10
11// to enable automatic data encoding, run setup, go to the manage plugins tab and install the base64 plugin. 11// to enable automatic data encoding, run setup, go to the manage plugins tab and install the base64 plugin.
12// then set db_encoding = 1 below. 12// then set db_encoding = 1 below.
13// when enabled, db_encoding transparently encodes and decodes data to and from the database without any 13// when enabled, db_encoding transparently encodes and decodes data to and from the database without any
14// programmatic effort on your part. 14// programmatic effort on your part.
15$configuration['db_encoding'] = 0; 15$configuration['db_encoding'] = 0;
16 16
17// edit the information below to match your database settings 17// edit the information below to match your database settings
18 18
19 $configuration['db'] = 'clipperz'; //database name 19 $configuration['db'] = 'clipperz'; //database name
20 $configuration['host'] = 'localhost'; //database host 20 $configuration['host'] = 'localhost'; //database host
21 $configuration['user'] = 'root'; //database user 21 $configuration['user'] = 'clipperz'; //database user
22 $configuration['pass'] = 'pass'; //database password 22 $configuration['pass'] = 'clipperz'; //database password
23 $configuration['port'] = '3306'; //database port 23 $configuration['port'] = '3306'; //database port
24 24
25 25
26//proxy settings - if you are behnd a proxy, change the settings below 26//proxy settings - if you are behnd a proxy, change the settings below
27$configuration['proxy_host'] = false; 27$configuration['proxy_host'] = false;
28$configuration['proxy_port'] = false; 28$configuration['proxy_port'] = false;
29$configuration['proxy_username'] = false; 29$configuration['proxy_username'] = false;
30$configuration['proxy_password'] = false; 30$configuration['proxy_password'] = false;
31 31
32 32
33//plugin settings 33//plugin settings
34$configuration['plugins_path'] = dirname(__FILE__).'/plugins'; 34$configuration['plugins_path'] = dirname(__FILE__).'/plugins';
35 35
36?> \ No newline at end of file 36?> \ No newline at end of file
diff --git a/backend/php/src/index.php b/backend/php/src/index.php
index 214ac01..da7c60c 100644
--- a/backend/php/src/index.php
+++ b/backend/php/src/index.php
@@ -47,206 +47,210 @@ function dec2base($dec, $base, $digits=FALSE) {
47 $digits = digits($base); 47 $digits = digits($base);
48 } 48 }
49 49
50 while ($dec > $base-1) { 50 while ($dec > $base-1) {
51 $rest = bcmod($dec, $base); 51 $rest = bcmod($dec, $base);
52 $dec = bcdiv($dec, $base); 52 $dec = bcdiv($dec, $base);
53 $value = $digits[$rest].$value; 53 $value = $digits[$rest].$value;
54 } 54 }
55 55
56 $value=$digits[intval($dec)].$value; 56 $value=$digits[intval($dec)].$value;
57 57
58 return (string)$value; 58 return (string)$value;
59} 59}
60 60
61//............................................................................. 61//.............................................................................
62 62
63// convert another base value to its decimal value 63// convert another base value to its decimal value
64function base2dec($value, $base, $digits=FALSE) { 64function base2dec($value, $base, $digits=FALSE) {
65 if ($base<2 or $base>256) { 65 if ($base<2 or $base>256) {
66 die("Invalid Base: ".$base); 66 die("Invalid Base: ".$base);
67 } 67 }
68 68
69 bcscale(0); 69 bcscale(0);
70 if ($base<37) { 70 if ($base<37) {
71 $value=strtolower($value); 71 $value=strtolower($value);
72 } 72 }
73 73
74 if (!$digits) { 74 if (!$digits) {
75 $digits=digits($base); 75 $digits=digits($base);
76 } 76 }
77 77
78 $size = strlen($value); 78 $size = strlen($value);
79 $dec="0"; 79 $dec="0";
80 for ($loop=0; $loop<$size; $loop++) { 80 for ($loop=0; $loop<$size; $loop++) {
81 $element = strpos($digits, $value[$loop]); 81 $element = strpos($digits, $value[$loop]);
82 $power = bcpow($base, $size-$loop-1); 82 $power = bcpow($base, $size-$loop-1);
83 $dec = bcadd($dec, bcmul($element,$power)); 83 $dec = bcadd($dec, bcmul($element,$power));
84 } 84 }
85 85
86 return (string)$dec; 86 return (string)$dec;
87} 87}
88 88
89//............................................................................. 89//.............................................................................
90 90
91function digits($base) { 91function digits($base) {
92 if ($base>64) { 92 if ($base>64) {
93 $digits=""; 93 $digits="";
94 for ($loop=0; $loop<256; $loop++) { 94 for ($loop=0; $loop<256; $loop++) {
95 $digits.=chr($loop); 95 $digits.=chr($loop);
96 } 96 }
97 } else { 97 } else {
98 $digits ="0123456789abcdefghijklmnopqrstuvwxyz"; 98 $digits ="0123456789abcdefghijklmnopqrstuvwxyz";
99 $digits.="ABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; 99 $digits.="ABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
100 } 100 }
101 101
102 $digits=substr($digits,0,$base); 102 $digits=substr($digits,0,$base);
103 103
104 return (string)$digits; 104 return (string)$digits;
105} 105}
106 106
107//----------------------------------------------------------------------------- 107//-----------------------------------------------------------------------------
108 108
109function clipperz_hash($value) { 109function clipperz_hash($value) {
110 return hash("sha256", hash("sha256", $value, true)); 110 return hash("sha256", hash("sha256", $value, true));
111} 111}
112 112
113//----------------------------------------------------------------------------- 113//-----------------------------------------------------------------------------
114 114
115function clipperz_randomSeed() { 115function clipperz_randomSeed() {
116 $result; 116 $result;
117 117
118 srand((double) microtime()*1000000); 118 srand((double) microtime()*1000000);
119 $result = ""; 119 $result = "";
120 120
121 while(strlen($result) < 64) { 121 while(strlen($result) < 64) {
122 $result = $result.dec2base(rand(), 16); 122 $result = $result.dec2base(rand(), 16);
123 } 123 }
124 124
125 $result = substr($result, 0, 64); 125 $result = substr($result, 0, 64);
126 126
127 return $result; 127 return $result;
128} 128}
129 129
130//----------------------------------------------------------------------------- 130//-----------------------------------------------------------------------------
131 131
132function updateUserCredentials($parameters, &$user) { 132function updateUserCredentials($parameters, &$user) {
133 $user->username = $parameters["C"]; 133 $user->username = $parameters["C"];
134 $user->srp_s = $parameters["s"]; 134 $user->srp_s = $parameters["s"];
135 $user->srp_v = $parameters["v"]; 135 $user->srp_v = $parameters["v"];
136 $user->auth_version =$parameters["version"]; 136 $user->auth_version =$parameters["version"];
137} 137}
138 138
139function updateUserData($parameters, &$user) { 139function updateUserData($parameters, &$user) {
140 $user->header = $parameters["header"]; 140 $user->header = $parameters["header"];
141 $user->statistics =$parameters["statistics"]; 141 $user->statistics =$parameters["statistics"];
142 $user->version =$parameters["version"]; 142 $user->version =$parameters["version"];
143 $user->lock = $parameters["lock"]; 143 if (array_key_exists("lock", $parameters)) {
144 $user->lock = $parameters["lock"];
145 }
144} 146}
145 147
146function updateRecordData($parameters, &$record, &$recordVersion) { 148function updateRecordData($parameters, &$record, &$recordVersion) {
147 $recordData = $parameters["record"]; 149 $recordData = $parameters["record"];
148 $record->reference =$recordData["reference"]; 150 $record->reference =$recordData["reference"];
149 $record->data = $recordData["data"]; 151 $record->data = $recordData["data"];
150 $record->version = $recordData["version"]; 152 $record->version = $recordData["version"];
151 153
152 $recordVersionData = $parameters["currentRecordVersion"]; 154 $recordVersionData = $parameters["currentRecordVersion"];
153 $recordVersion->reference = $recordVersionData ["reference"]; 155 $recordVersion->reference = $recordVersionData ["reference"];
154 $recordVersion->data = $recordVersionData ["data"]; 156 $recordVersion->data = $recordVersionData ["data"];
155 $recordVersion->version = $recordVersionData ["version"]; 157 $recordVersion->version = $recordVersionData ["version"];
156 $recordVersion->previous_version_id =$recordVersionData ["previousVersion"]; 158 if (array_key_exists("previousVersion", $recordVersionData)) {
159 $recordVersion->previous_version_id =$recordVersionData ["previousVersion"];
160 }
157 $recordVersion->previous_version_key =$recordVersionData ["previousVersionKey"]; 161 $recordVersion->previous_version_key =$recordVersionData ["previousVersionKey"];
158} 162}
159 163
160//----------------------------------------------------------------------------- 164//-----------------------------------------------------------------------------
161 165
162function updateOTPStatus(&$otp, $status) { 166function updateOTPStatus(&$otp, $status) {
163 $otpStatus = new onetimepasswordstatus(); 167 $otpStatus = new onetimepasswordstatus();
164 $selectedStatuses = $otpStatus->GetList(array(array("code", "=", $status))); 168 $selectedStatuses = $otpStatus->GetList(array(array("code", "=", $status)));
165 $otpStatus = $selectedStatuses[0]; 169 $otpStatus = $selectedStatuses[0];
166 $otp->SetOnetimepasswordstatus($otpStatus); 170 $otp->SetOnetimepasswordstatus($otpStatus);
167} 171}
168 172
169function updateOTP($parameters, &$otp, $status) { 173function updateOTP($parameters, &$otp, $status) {
170 $otp->reference = $parameters["reference"]; 174 $otp->reference = $parameters["reference"];
171 $otp->key = $parameters["key"]; 175 $otp->key = $parameters["key"];
172 $otp->key_checksum= $parameters["keyChecksum"]; 176 $otp->key_checksum= $parameters["keyChecksum"];
173 $otp->data = $parameters["data"]; 177 $otp->data = $parameters["data"];
174 $otp->version = $parameters["version"]; 178 $otp->version = $parameters["version"];
175 179
176 updateOTPStatus($otp, $status); 180 updateOTPStatus($otp, $status);
177} 181}
178 182
179function resetOTP(&$otp, $status) { 183function resetOTP(&$otp, $status) {
180 $otp->data = ""; 184 $otp->data = "";
181 updateOTPStatus($otp, $status); 185 updateOTPStatus($otp, $status);
182 $otp->Save(); 186 $otp->Save();
183} 187}
184 188
185//----------------------------------------------------------------------------- 189//-----------------------------------------------------------------------------
186 190
187function fixOTPStatusTable() { 191function fixOTPStatusTable() {
188 $otpStatus = new onetimepasswordstatus(); 192 $otpStatus = new onetimepasswordstatus();
189 $otpStatusList = $otpStatus->GetList(); 193 $otpStatusList = $otpStatus->GetList();
190 if (count($otpStatusList) != 4) { 194 if (count($otpStatusList) != 4) {
191 $otpStatus->DeleteList(); 195 $otpStatus->DeleteList();
192 196
193 $otpStatus->code = "ACTIVE"; $otpStatus->name = "Active"; $otpStatus->description = "Active"; $otpStatus->SaveNew(); 197 $otpStatus->code = "ACTIVE"; $otpStatus->name = "Active"; $otpStatus->description = "Active"; $otpStatus->SaveNew();
194 $otpStatus->code = "REQUESTED"; $otpStatus->name = "Requested"; $otpStatus->description = "Requested";$otpStatus->SaveNew(); 198 $otpStatus->code = "REQUESTED"; $otpStatus->name = "Requested"; $otpStatus->description = "Requested";$otpStatus->SaveNew();
195 $otpStatus->code = "USED"; $otpStatus->name = "Used"; $otpStatus->description = "Used"; $otpStatus->SaveNew(); 199 $otpStatus->code = "USED"; $otpStatus->name = "Used"; $otpStatus->description = "Used"; $otpStatus->SaveNew();
196 $otpStatus->code = "DISABLED"; $otpStatus->name = "Disabled"; $otpStatus->description = "Disabled";$otpStatus->SaveNew(); 200 $otpStatus->code = "DISABLED"; $otpStatus->name = "Disabled"; $otpStatus->description = "Disabled";$otpStatus->SaveNew();
197 } 201 }
198} 202}
199 203
200//----------------------------------------------------------------------------- 204//-----------------------------------------------------------------------------
201 205
202function arrayContainsValue($array, $value) { 206function arrayContainsValue($array, $value) {
203 $object = NULL; 207 $object = NULL;
204 for ($i=0; $i<count($array); $i++) { 208 for ($i=0; $i<count($array); $i++) {
205 if ($array[$i] == $value) { 209 if ($array[$i] == $value) {
206 $object = $value; 210 $object = $value;
207 } 211 }
208 } 212 }
209 213
210 return !is_null($object); 214 return !is_null($object);
211} 215}
212 216
213//----------------------------------------------------------------------------- 217//-----------------------------------------------------------------------------
214 218
215 $result = Array(); 219 $result = Array();
216 220
217 session_start(); 221 session_start();
218 222
219 $method = $_POST['method']; 223 $method = $_POST['method'];
220 224
221 if (get_magic_quotes_gpc()) { 225 if (get_magic_quotes_gpc()) {
222 $parameters = json_decode(stripslashes($_POST['parameters']), true); 226 $parameters = json_decode(stripslashes($_POST['parameters']), true);
223 } else { 227 } else {
224 $parameters = json_decode($_POST['parameters'], true); 228 $parameters = json_decode($_POST['parameters'], true);
225 } 229 }
226 230
227 $parameters = $parameters["parameters"]; 231 $parameters = $parameters["parameters"];
228 232
229 switch($method) { 233 switch($method) {
230 case "registration": 234 case "registration":
231error_log("registration"); 235error_log("registration");
232 $message = $parameters["message"]; 236 $message = $parameters["message"];
233 237
234 if ($message == "completeRegistration") { 238 if ($message == "completeRegistration") {
235 $user = new user(); 239 $user = new user();
236 240
237 updateUserCredentials($parameters["credentials"], $user); 241 updateUserCredentials($parameters["credentials"], $user);
238 updateUserData($parameters["user"], $user); 242 updateUserData($parameters["user"], $user);
239 $user->Save(); 243 $user->Save();
240 244
241 $result["lock"] = $user->lock; 245 $result["lock"] = $user->lock;
242 $result["result"] = "done"; 246 $result["result"] = "done";
243 } 247 }
244 break; 248 break;
245 249
246 case "handshake": 250 case "handshake":
247error_log("handshake"); 251error_log("handshake");
248 $srp_g = "2"; 252 $srp_g = "2";
249 $srp_n = base2dec("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16); 253 $srp_n = base2dec("115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16);
250 254
251 $message = $parameters["message"]; 255 $message = $parameters["message"];
252 256
@@ -272,316 +276,472 @@ error_log("handshake");
272 } 276 }
273 277
274 resetOTP($otp, "USED"); 278 resetOTP($otp, "USED");
275 $result["oneTimePassword"] = $otp->reference; 279 $result["oneTimePassword"] = $otp->reference;
276 } 280 }
277 281
278 $_SESSION["s"] = $currentUser->srp_s; 282 $_SESSION["s"] = $currentUser->srp_s;
279 $_SESSION["v"] = $currentUser->srp_v; 283 $_SESSION["v"] = $currentUser->srp_v;
280 $_SESSION["userId"] = $currentUser->userId; 284 $_SESSION["userId"] = $currentUser->userId;
281 } else { 285 } else {
282 $_SESSION["s"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"; 286 $_SESSION["s"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00";
283 $_SESSION["v"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"; 287 $_SESSION["v"] = "112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00";
284 } 288 }
285 289
286 $_SESSION["b"] = clipperz_randomSeed(); 290 $_SESSION["b"] = clipperz_randomSeed();
287 // $_SESSION["b"] = "5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53"; 291 // $_SESSION["b"] = "5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53";
288 $_SESSION["B"] = dec2base(bcadd(base2dec($_SESSION["v"], 16), bcpowmod($srp_g, base2dec($_SESSION["b"], 16), $srp_n)), 16); 292 $_SESSION["B"] = dec2base(bcadd(base2dec($_SESSION["v"], 16), bcpowmod($srp_g, base2dec($_SESSION["b"], 16), $srp_n)), 16);
289 293
290 $result["s"] = $_SESSION["s"]; 294 $result["s"] = $_SESSION["s"];
291 $result["B"] = $_SESSION["B"]; 295 $result["B"] = $_SESSION["B"];
292 296
293 //============================================================= 297 //=============================================================
294 } else if ($message == "credentialCheck") { 298 } else if ($message == "credentialCheck") {
295error_log("credentialCheck"); 299error_log("credentialCheck");
296 $u = clipperz_hash(base2dec($_SESSION["B"],16)); 300 $u = clipperz_hash(base2dec($_SESSION["B"],16));
297 $A = base2dec($_SESSION["A"], 16); 301 $A = base2dec($_SESSION["A"], 16);
298 $S = bcpowmod(bcmul($A, bcpowmod(base2dec($_SESSION["v"], 16), base2dec($u, 16), $srp_n)), base2dec($_SESSION["b"], 16), $srp_n); 302 $S = bcpowmod(bcmul($A, bcpowmod(base2dec($_SESSION["v"], 16), base2dec($u, 16), $srp_n)), base2dec($_SESSION["b"], 16), $srp_n);
299 $K = clipperz_hash($S); 303 $K = clipperz_hash($S);
300 $M1 = clipperz_hash($A.base2dec($_SESSION["B"],16).$K); 304 $M1 = clipperz_hash($A.base2dec($_SESSION["B"],16).$K);
301 305
302//$result["B"] = $_SESSION["B"]; 306//$result["B"] = $_SESSION["B"];
303//$result["u"] = $u; 307//$result["u"] = $u;
304//$result["A"] = $A; 308//$result["A"] = $A;
305//$result["S"] = $S; 309//$result["S"] = $S;
306//$result["K"] = $K; 310//$result["K"] = $K;
307//$result["M1"] = $M1; 311//$result["M1"] = $M1;
308//$result["_M1"] = $parameters["parameters"]["M1"]; 312//$result["_M1"] = $parameters["parameters"]["M1"];
309 313
310 if ($M1 == $parameters["parameters"]["M1"]) { 314 if ($M1 == $parameters["parameters"]["M1"]) {
311 $_SESSION["K"] = $K; 315 $_SESSION["K"] = $K;
312 $M2 = clipperz_hash($A.$M1.$K); 316 $M2 = clipperz_hash($A.$M1.$K);
313 317
314 $result["M2"] = $M2; 318 $result["M2"] = $M2;
315 $result["connectionId"] = ""; 319 $result["connectionId"] = "";
316 $result["loginInfo"] = array(); 320 $result["loginInfo"] = array();
317 $result["loginInfo"]["latest"] = array(); 321 $result["loginInfo"]["latest"] = array();
318 $result["loginInfo"]["current"] = array(); 322 $result["loginInfo"]["current"] = array();
319 $result["offlineCopyNeeded"] = "false"; 323 $result["offlineCopyNeeded"] = "false";
320 $result["lock"] = "----"; 324 $result["lock"] = "----";
321 } else { 325 } else {
322 $result["error"] = "?"; 326 $result["error"] = "?";
323 } 327 }
324 //============================================================= 328 //=============================================================
325 } else if ($message == "oneTimePassword") { 329 } else if ($message == "oneTimePassword") {
326error_log("oneTimePassword"); 330error_log("oneTimePassword");
327//{ 331//{
328 //"message":"oneTimePassword", 332 //"message":"oneTimePassword",
329 //"version":"0.2", 333 //"version":"0.2",
330 //"parameters":{ 334 //"parameters":{
331 // "oneTimePasswordKey":"06dfa7f428081f8b2af98b0895e14e18af90b0ef2ff32828e55cc2ac6b24d29b", 335 // "oneTimePasswordKey":"06dfa7f428081f8b2af98b0895e14e18af90b0ef2ff32828e55cc2ac6b24d29b",
332 // "oneTimePasswordKeyChecksum":"60bcba3f72e56f6bb3f0ff88509b9a0e5ec730dfa71daa4c1e892dbd1b0c360d" 336 // "oneTimePasswordKeyChecksum":"60bcba3f72e56f6bb3f0ff88509b9a0e5ec730dfa71daa4c1e892dbd1b0c360d"
333 //} 337 //}
334//} 338//}
335 $otp = new onetimepassword(); 339 $otp = new onetimepassword();
336 $otpList = $otp->GetList(array(array("key", "=", $parameters["parameters"]["oneTimePasswordKey"]))); 340 $otpList = $otp->GetList(array(array("key", "=", $parameters["parameters"]["oneTimePasswordKey"])));
337 341
338 if (count($otpList) == 1) { 342 if (count($otpList) == 1) {
339 $currentOtp = $otpList[0]; 343 $currentOtp = $otpList[0];
340 344
341 if ($currentOtp->GetOnetimepasswordstatus()->code == "ACTIVE") { 345 if ($currentOtp->GetOnetimepasswordstatus()->code == "ACTIVE") {
342 if ($currentOtp->key_checksum == $parameters["parameters"]["oneTimePasswordKeyChecksum"]) { 346 if ($currentOtp->key_checksum == $parameters["parameters"]["oneTimePasswordKeyChecksum"]) {
343 $_SESSION["userId"] = $currentOtp->GetUser()->userId; 347 $_SESSION["userId"] = $currentOtp->GetUser()->userId;
344 $_SESSION["otpId"]= $currentOtp->onetimepasswordId; 348 $_SESSION["otpId"]= $currentOtp->onetimepasswordId;
345 349
346 $result["data"] = $currentOtp->data; 350 $result["data"] = $currentOtp->data;
347 $result["version"] = $currentOtp->version; 351 $result["version"] = $currentOtp->version;
348 352
349 resetOTP($currentOtp, "REQUESTED"); 353 resetOTP($currentOtp, "REQUESTED");
350 } else { 354 } else {
351 resetOTP($currentOtp, "DISABLED"); 355 resetOTP($currentOtp, "DISABLED");
352 throw new Exception("The requested One Time Password has been disabled, due to a wrong keyChecksum"); 356 throw new Exception("The requested One Time Password has been disabled, due to a wrong keyChecksum");
353 } 357 }
354 } else { 358 } else {
355 throw new Exception("The requested One Time Password was not active"); 359 throw new Exception("The requested One Time Password was not active");
356 } 360 }
357 } else { 361 } else {
358 throw new Exception("The requested One Time Password has not been found"); 362 throw new Exception("The requested One Time Password has not been found");
359 } 363 }
360 364
361 //============================================================= 365 //=============================================================
362 } 366 }
363 367
364 break; 368 break;
365 369
366 case "message": 370 case "message":
367error_log("message"); 371error_log("message");
372//error_log("message: ".json_encode($parameters));
368 if ($parameters["srpSharedSecret"] == $_SESSION["K"]) { 373 if ($parameters["srpSharedSecret"] == $_SESSION["K"]) {
369 $message = $parameters["message"]; 374 $message = $parameters["message"];
370 375
371 //============================================================= 376 //=============================================================
372 if ($message == "getUserDetails") { 377 if ($message == "getUserDetails") {
373//{"message":"getUserDetails", "srpSharedSecret":"f18e5cf7c3a83b67d4db9444af813ee48c13daf4f8f6635397d593e52ba89a08", "parameters":{}} 378//{"message":"getUserDetails", "srpSharedSecret":"f18e5cf7c3a83b67d4db9444af813ee48c13daf4f8f6635397d593e52ba89a08", "parameters":{}}
374 $user = new user(); 379 $user = new user();
375 $user = $user->Get($_SESSION["userId"]); 380 $user = $user->Get($_SESSION["userId"]);
376 381
377 $result["header"] = $user->header; 382 $result["header"] = $user->header;
378 383
379 $records = $user->GetRecordList(); 384 $records = $user->GetRecordList();
380 foreach ($records as $record) { 385 foreach ($records as $record) {
381 $recordStats["updateDate"] = $record->update_date; 386 $recordStats["updateDate"] = $record->update_date;
382 $recordsStats[$record->reference] = $recordStats; 387 $recordsStats[$record->reference] = $recordStats;
383 } 388 }
384 $result["recordsStats"] = $recordsStats; 389 $result["recordsStats"] = $recordsStats;
385 390
386 $result["statistics"] =$user->statistics; 391 $result["statistics"] =$user->statistics;
387 $result["version"] =$user->version; 392 $result["version"] =$user->version;
388 393
389 //============================================================= 394 //=============================================================
390 } else if ($message == "addNewRecords") { 395 } else if ($message == "addNewRecords") {
391/* 396/*
392//{ 397//{
393 //"message":"addNewRecords", 398 //"message":"addNewRecords",
394 //"srpSharedSecret":"b58fdf62acebbcb67f63d28c0437f166069f45690c648cd4376a792ae7a325f7", 399 //"srpSharedSecret":"b58fdf62acebbcb67f63d28c0437f166069f45690c648cd4376a792ae7a325f7",
395 //"parameters":{ 400 //"parameters":{
396 // "records":[ 401 // "records":[
397 // { 402 // {
398 // "record":{ 403 // "record":{
399 // "reference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610", 404 // "reference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610",
400 // "data":"OBSGtcb6blXq/xaYG.....4EqlQqgAvITN", 405 // "data":"OBSGtcb6blXq/xaYG.....4EqlQqgAvITN",
401 // "version":"0.3" 406 // "version":"0.3"
402 // }, 407 // },
403 // "currentRecordVersion":{ 408 // "currentRecordVersion":{
404 // "reference":"83ad301525c18f2afd72b6ac82c0a713382e1ef70ac69935ca7e2869dd4ff980", 409 // "reference":"83ad301525c18f2afd72b6ac82c0a713382e1ef70ac69935ca7e2869dd4ff980",
405 // "recordReference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610", 410 // "recordReference":"fda703707fee1fff42443124cd0e705f5bea0ac601758d81b2e832705339a610",
406 // "data":"NXJ5jiZhkd0CMiwwntAq....1TjjF+SGfE=", 411 // "data":"NXJ5jiZhkd0CMiwwntAq....1TjjF+SGfE=",
407 // "version":"0.3", 412 // "version":"0.3",
408 // "previousVersion":"3e174a86afc322271d8af28bc062b0f1bfd7344fad01212cd08b2757c4b199c4", 413 // "previousVersion":"3e174a86afc322271d8af28bc062b0f1bfd7344fad01212cd08b2757c4b199c4",
409 // "previousVersionKey":"kozaaGCzXWr71LbOKu6Z3nz520V..5U85tSBvb+u44twttv54Kw==" 414 // "previousVersionKey":"kozaaGCzXWr71LbOKu6Z3nz520V..5U85tSBvb+u44twttv54Kw=="
410 // } 415 // }
411 // } 416 // }
412 // ], 417 // ],
413 // "user":{ 418 // "user":{
414 // "header":"{\"reco...ersion\":\"0.1\"}", 419 // "header":"{\"reco...ersion\":\"0.1\"}",
415 // "statistics":"rKI6nR6iqggygQJ3SQ58bFUX", 420 // "statistics":"rKI6nR6iqggygQJ3SQ58bFUX",
416 // "version":"0.3", 421 // "version":"0.3",
417 // "lock":"----" 422 // "lock":"----"
418 // } 423 // }
419 //} 424 //}
420//} 425//}
421*/ 426*/
422 $user = new user(); 427 $user = new user();
423 $record = new record(); 428 $record = new record();
424 $recordVersion = new recordversion(); 429 $recordVersion = new recordversion();
425 430
426 $user = $user->Get($_SESSION["userId"]); 431 $user = $user->Get($_SESSION["userId"]);
427 updateUserData($parameters["parameters"]["user"], $user); 432 updateUserData($parameters["parameters"]["user"], $user);
428 433
429 $recordParameterList = $parameters["parameters"]["records"]; 434 $recordParameterList = $parameters["parameters"]["records"];
430 $c = count($recordParameterList); 435 $c = count($recordParameterList);
431 for ($i=0; $i<$c; $i++) { 436 for ($i=0; $i<$c; $i++) {
432 updateRecordData($recordParameterList[$i], $record, $recordVersion); 437 updateRecordData($recordParameterList[$i], $record, $recordVersion);
433 438
434 $record->SaveNew(); 439 $record->SaveNew();
435 $recordVersion->SaveNew(); 440 $recordVersion->SaveNew();
436 441
437 $record->AddRecordversion($recordVersion); 442 $record->AddRecordversion($recordVersion);
438 $user->AddRecord($record); 443 $user->AddRecord($record);
439 444
440 $record->Save(); 445 $record->Save();
441 $recordVersion->Save(); 446 $recordVersion->Save();
442 } 447 }
443 448
444 $user->Save(); 449 $user->Save();
445 450
446 $result["lock"] = $user->lock; 451 $result["lock"] = $user->lock;
447 $result["result"] = "done"; 452 $result["result"] = "done";
448 453
449 //============================================================= 454 //=============================================================
455 } else if ($message == "saveChanges") {
456
457//{
458// "message":"saveChanges",
459// "srpSharedSecret":"edc78508907c942173818f7247fa64869ba80672a7aa8d27b8fa6bfe524fb9c8",
460// "parameters":{
461// "records":{
462// "updated":[
463// {
464// "currentRecordVersion":{
465// "previousVersionKey":"####",
466// "reference":"08c8eb7ec528fbf987bbfb84fe2e960cf9ae937b19fbb5f05d8d90a7039fac6a",
467// "data":"WYQ16AjodjsmyZDXa4MKxOju0F…beD/zXlbVb0Zj0ZI/N55bZ",
468// "version":"0.3"
469// },
470// "record":{
471// "reference":"83de5304f60a808e48a815c6203d7d3f24874d3f40faba420bbc60b376fcc356",
472// "data":"B6uBuBE Aly0knvgrUppodDTGZQC…guizL9QvHCWyM bQQBGBVvHZ6LfA==",
473// "version":"0.3"
474// }
475// }
476// ],
477// "deleted":[
478//
479// ]
480// },
481// "user":{
482// "header":"{\"rec…sion\":\"0.1\"}",
483// "statistics":"e6iXVEM4i8ZatPZFCCads/9F",
484// "version":"0.3"
485// }
486// }
487//}
488 $user = new user();
489 $user = $user->Get($_SESSION["userId"]);
490 updateUserData($parameters["parameters"]["user"], $user);
491
492 $recordToUpdateParameterList = $parameters["parameters"]["records"]["updated"];
493 $c = count($recordToUpdateParameterList);
494 for ($i=0; $i<$c; $i++) {
495 $recordList = $user->GetRecordList(array(array("reference", "=", $recordToUpdateParameterList [$i]["record"]["reference"])));
496 if (count($recordList) == 0) {
497 $currentRecord = new record();
498 $currentVersion = new recordversion();
499 $isNewRecord = true;
500 } else {
501 $currentRecord = $recordList[0];
502 $currentRecordVersions = $currentRecord->GetRecordversionList();
503 $currentVersion = $currentRecordVersions[0];
504 $isNewRecord = false;
505 }
506
507 updateRecordData($recordToUpdateParameterList[$i], $currentRecord, $currentVersion);
508
509 if ($isNewRecord == true) {
510 $currentRecord->SaveNew();
511 $currentVersion->SaveNew();
512
513 $currentRecord->AddRecordversion($currentVersion);
514 $user->AddRecord($currentRecord);
515 }
516
517 $currentRecord->Save();
518 $currentVersion->Save();
519 }
520
521 $user->Save();
522
523 $recordToDeleteReferenceList = $parameters["parameters"]["records"]["deleted"];
524 $recordList = array();
525 $c = count($recordToDeleteReferenceList);
526 for ($i=0; $i<$c; $i++) {
527 array_push($recordList, array("reference", "=", $recordToDeleteReferenceList[$i]));
528 }
529
530 $record = new record();
531 $record->DeleteList($recordList, true);
532
533 $result["lock"] = $user->lock;
534 $result["result"] = "done";
535
536 //=============================================================
450 } else if ($message == "getRecordDetail") { 537 } else if ($message == "getRecordDetail") {
451//{ 538//{
452 //"message":"getRecordDetail", 539 //"message":"getRecordDetail",
453 //"srpSharedSecret":"4c00dcb66a9f2aea41a87e4707c526874e2eb29cc72d2c7086837e53d6bf2dfe", 540 //"srpSharedSecret":"4c00dcb66a9f2aea41a87e4707c526874e2eb29cc72d2c7086837e53d6bf2dfe",
454 //"parameters":{ 541 //"parameters":{
455 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50" 542 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50"
456 //} 543 //}
457//} 544//}
458// 545//
459 //result = { 546 //result = {
460 // currentVersion:{ 547 // currentVersion:{
461 // reference:"88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854", 548 // reference:"88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854",
462 // accessDate:"Wed, 13 February 2008 14:25:12 UTC", 549 // accessDate:"Wed, 13 February 2008 14:25:12 UTC",
463 // creationDate:"Tue, 17 April 2007 17:17:52 UTC", 550 // creationDate:"Tue, 17 April 2007 17:17:52 UTC",
464 // version:"0.2", 551 // version:"0.2",
465 // data:"xI3WXddQLFtL......EGyKnnAVik", 552 // data:"xI3WXddQLFtL......EGyKnnAVik",
466 // updateDate:"Tue, 17 April 2007 17:17:52 UTC", 553 // updateDate:"Tue, 17 April 2007 17:17:52 UTC",
467 // header:"####" 554 // header:"####"
468 // } 555 // }
469 // reference:"13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551", 556 // reference:"13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551",
470 // oldestUsedEncryptedVersion:"0.2", 557 // oldestUsedEncryptedVersion:"0.2",
471 // accessDate:"Wed, 13 February 2008 14:25:12 UTC", 558 // accessDate:"Wed, 13 February 2008 14:25:12 UTC",
472 // creationDate:"Wed, 14 March 2007 13:53:11 UTC", 559 // creationDate:"Wed, 14 March 2007 13:53:11 UTC",
473 // version:"0.2", 560 // version:"0.2",
474 // updatedDate:"Tue, 17 April 2007 17:17:52 UTC", 561 // updatedDate:"Tue, 17 April 2007 17:17:52 UTC",
475 // data:"0/BjzyY6jeh71h...pAw2++NEyylGhMC5C5f5m8pBApYziN84s4O3JQ3khW/1UttQl4=" 562 // data:"0/BjzyY6jeh71h...pAw2++NEyylGhMC5C5f5m8pBApYziN84s4O3JQ3khW/1UttQl4="
476 //} 563 //}
564
565
566 // #Actual result (causing error in /gamma)
567 //{
568 // "result" : {
569 // "currentVersion" : {
570 // "reference" : "cb05177f96a832062c6b936d24323cb74a64e2ef1d97ee026cd1003755af7495",
571 // "data" : "RAnoHmikp7RmiZ2WVyEMW+Ia",
572 // "header" : "",
573 // "version" : "0.3",
574 // "creationDate" : "0000-00-00 00:00:00",
575 // "updateDate" : "2011-10-09 19:49:11",
576 // "accessDate" : "2011-10-09 19:49:11"
577 // },
578 // "reference" : "b07e2afa2ba782b9f379649b36ded6de0452b43c27e6b887c7ce4f2a93f44346",
579 // "data" : "NtK1nkLUabbJQx5uO8ept...ZJ5dkJYYkyh3VQ==",
580 // "version" : "0.3",
581 // "creationDate" : "2011-10-09 19:49:11",
582 // "updateDate" : "Tue, 30 Nov 1999 00:00:00 +0000",
583 // "accessDate" : "0000-00-00 00:00:00",
584 // "oldestUsedEncryptedVersion" : "---"
585 // }
586 //}
587
588
589 // #Response from the online /gamma version
590 //{
591 // "result" : {
592 // "versions" : {
593 // "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de" : {
594 // "reference" : "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de",
595 // "data" : "s\/3ClggH4uCcf+BkIMqQ...+W0PVt\/MJ3t7s1g0g",
596 // "creationDate" : "Mon, 10 October 2011 14:42:42 UTC",
597 // "header" : "####",
598 // "updateDate" : "Mon, 10 October 2011 14:42:42 UTC",
599 // "previousVersion" : "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463",
600 // "version" : "0.3",
601 // "accessDate" : "Mon, 10 October 2011 14:42:42 UTC",
602 // "previousVersionKey" : "####"
603 // },
604 // [...]
605 // "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463" : {
606 // "reference" : "a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463",
607 // "accessDate" : "Mon, 10 October 2011 14:41:17 UTC",
608 // "creationDate" : "Mon, 27 October 2008 08:16:14 UTC",
609 // "version" : "0.3",
610 // "data" : "m3yhZu81UAjCY6U2Kn...IUCb9suV0fldGOg=",
611 // "updateDate" : "Mon, 27 October 2008 08:16:14 UTC",
612 // "header" : "####"
613 // }
614 // },
615 // "oldestUsedEncryptedVersion" : "0.2",
616 // "reference" : "36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113",
617 // "data" : "frlUkTbaOWD9j2ROat...ruWioCK0Mss27oHjPg==",
618 // "creationDate" : "Wed, 14 March 2007 17:39:35 UTC",
619 // "version" : "0.3",
620 // "accessDate" : "Mon, 10 October 2011 14:45:12 UTC",
621 // "currentVersion" : "e2c193f017ad4f6babf51de59f7550a40596afc0c27373b6a360e426b5bc06de",
622 // "updatedDate" : "Mon, 10 October 2011 14:45:12 UTC"
623 // },
624 // "toll" : {
625 // "requestType" : "MESSAGE",
626 // "targetValue" : "a516c942a3792cc620775a41f8870a6c7b51796d9a94da978a75da6a52eb1e10",
627 // "cost" : 2
628 // }
629 // }
630
477 $record = new record(); 631 $record = new record();
478 632
479 $recordList = $record->GetList(array(array("reference", "=", $parameters["parameters"]["reference"]))); 633 $recordList = $record->GetList(array(array("reference", "=", $parameters["parameters"]["reference"])));
480 $currentRecord = $recordList[0]; 634 $currentRecord = $recordList[0];
481 $currentRecordVersions = $currentRecord->GetRecordversionList(); 635 $currentRecordVersions = $currentRecord->GetRecordversionList();
482 $currentVersion = $currentRecordVersions[0]; 636 $currentVersion = $currentRecordVersions[0];
483 637
484 $result["currentVersion"] = array(); 638 $result["versions"] = array();
485 $result["currentVersion"]["reference"] =$currentVersion->reference; 639 // foreach ($currentRecordVersions as $currentVersion) {
486 $result["currentVersion"]["data"] = $currentVersion->data; 640 $result["versions"][$currentVersion->reference] = array();
487 $result["currentVersion"]["header"] = $currentVersion->header; 641 $result["versions"][$currentVersion->reference]["reference"]= $currentVersion->reference;
488 $result["currentVersion"]["version"] = $currentVersion->version; 642 $result["versions"][$currentVersion->reference]["data"] = $currentVersion->data;
489 $result["currentVersion"]["creationDate"] =$currentVersion->creation_date; 643 $result["versions"][$currentVersion->reference]["header"] = $currentVersion->header;
490 $result["currentVersion"]["updateDate"] =$currentVersion->update_date; 644 $result["versions"][$currentVersion->reference]["version"] = $currentVersion->version;
491 $result["currentVersion"]["accessDate"] =$currentVersion->access_date; 645 $result["versions"][$currentVersion->reference]["creationDate"]= $currentVersion->creation_date;
646 $result["versions"][$currentVersion->reference]["updateDate"]= $currentVersion->update_date;
647 $result["versions"][$currentVersion->reference]["accessDate"]= $currentVersion->access_date;
648
649 // }
650 $result["currentVersion"] = $currentVersion->reference;
651 // $result["currentVersion"] = $currentRecord->currentVersion; //????
492 652
493 $result["reference"] = $currentRecord->reference; 653 $result["reference"] = $currentRecord->reference;
494 $result["data"] = $currentRecord->data; 654 $result["data"] = $currentRecord->data;
495 $result["version"] = $currentRecord->version; 655 $result["version"] = $currentRecord->version;
496 $result["creationDate"] =$currentRecord->creation_date; 656 $result["creationDate"] =$currentRecord->creation_date;
497 $result["updateDate"] = $currentRecord->update_date; 657 $result["updateDate"] = $currentRecord->update_date;
498 $result["accessDate"] = $currentRecord->access_date; 658 $result["accessDate"] = $currentRecord->access_date;
499 $result["oldestUsedEncryptedVersion"] ="---"; 659 $result["oldestUsedEncryptedVersion"] ="---";
500 660
501 //============================================================= 661 //=============================================================
502 } else if ($message == "updateData") { 662 } else if ($message == "updateData") {
503//{ 663//{
504 //"message":"updateData", 664 //"message":"updateData",
505 //"srpSharedSecret":"4e4aadb1d64513ec4dd42f5e8d5b2d4363de75e4424b6bcf178c9d6a246356c5", 665 //"srpSharedSecret":"4e4aadb1d64513ec4dd42f5e8d5b2d4363de75e4424b6bcf178c9d6a246356c5",
506 //"parameters":{ 666 //"parameters":{
507 // "records":[ 667 // "records":[
508 // { 668 // {
509 // "record":{ 669 // "record":{
510 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50", 670 // "reference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50",
511 // "data":"8hgR0Z+JDrUa812polDJ....JnZUKXNEqKI", 671 // "data":"8hgR0Z+JDrUa812polDJ....JnZUKXNEqKI",
512 // "version":"0.3" 672 // "version":"0.3"
513 // }, 673 // },
514 // "currentRecordVersion":{ 674 // "currentRecordVersion":{
515 // "reference":"b1d82aeb9a0c4f6584bea68ba80839f43dd6ede79791549e29a1860554b144ee", 675 // "reference":"b1d82aeb9a0c4f6584bea68ba80839f43dd6ede79791549e29a1860554b144ee",
516 // "recordReference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50", 676 // "recordReference":"740009737139a189cfa2b1019a6271aaa39467b59e259706564b642ff3838d50",
517 // "data":"2d/UgKxxV+kBPV9GRUE.....VGonDoW0tqefxOJo=", 677 // "data":"2d/UgKxxV+kBPV9GRUE.....VGonDoW0tqefxOJo=",
518 // "version":"0.3", 678 // "version":"0.3",
519 // "previousVersion":"55904195249037394316d3be3f5e78f08073170103bf0e7ab49a911c159cb0be", 679 // "previousVersion":"55904195249037394316d3be3f5e78f08073170103bf0e7ab49a911c159cb0be",
520 // "previousVersionKey":"YWiaZeMIVHaIl96OWW+2e8....6d6nHbn6cr2NA/dbQRuC2w==" 680 // "previousVersionKey":"YWiaZeMIVHaIl96OWW+2e8....6d6nHbn6cr2NA/dbQRuC2w=="
521 // } 681 // }
522 // } 682 // }
523 // ], 683 // ],
524 // "user":{ 684 // "user":{
525 // "header":"{\"rec.....sion\":\"0.1\"}", 685 // "header":"{\"rec.....sion\":\"0.1\"}",
526 // "statistics":"tt3uU9hWBy8rNnMckgCnxMJh", 686 // "statistics":"tt3uU9hWBy8rNnMckgCnxMJh",
527 // "version":"0.3", 687 // "version":"0.3",
528 // "lock":"----" 688 // "lock":"----"
529 // } 689 // }
530 //} 690 //}
531//} 691//}
532 692
533 $user = new user(); 693 $user = new user();
534 $user = $user->Get($_SESSION["userId"]); 694 $user = $user->Get($_SESSION["userId"]);
535 updateUserData($parameters["parameters"]["user"], $user); 695 updateUserData($parameters["parameters"]["user"], $user);
536 $user->Save(); 696 $user->Save();
537 697
538 $recordParameterList = $parameters["parameters"]["records"]; 698 $recordParameterList = $parameters["parameters"]["records"];
539 $c = count($recordParameterList); 699 $c = count($recordParameterList);
540 for ($i=0; $i<$c; $i++) { 700 for ($i=0; $i<$c; $i++) {
541 $recordList = $user->GetRecordList(array(array("reference", "=", $recordParameterList[$i]["record"]["reference"]))); 701 $recordList = $user->GetRecordList(array(array("reference", "=", $recordParameterList[$i]["record"]["reference"])));
542 $currentRecord = $recordList[0]; 702 $currentRecord = $recordList[0];
543 $currentRecordVersions = $currentRecord->GetRecordversionList(); 703 $currentRecordVersions = $currentRecord->GetRecordversionList();
544 $currentVersion = $currentRecordVersions[0]; 704 $currentVersion = $currentRecordVersions[0];
545 705
546 updateRecordData($recordParameterList[$i], $currentRecord, $currentVersion); 706 updateRecordData($recordParameterList[$i], $currentRecord, $currentVersion);
547 707
548 708
549 $currentRecord->Save(); 709 $currentRecord->Save();
550 $currentVersion->Save(); 710 $currentVersion->Save();
551 } 711 }
552 712
553 713
554 $result["lock"] = $user->lock; 714 $result["lock"] = $user->lock;
555 $result["result"] = "done"; 715 $result["result"] = "done";
556 716
557 //============================================================= 717 //=============================================================
558 } else if ($message == "deleteRecords") { 718 } else if ($message == "deleteRecords") {
559//{ 719//{
560 //"message":"deleteRecords", 720 //"message":"deleteRecords",
561 //"srpSharedSecret":"4a64982f7ee366954ec50b9efea62a902a097ef111410c2aa7c4d5343bd1cdd1", 721 //"srpSharedSecret":"4a64982f7ee366954ec50b9efea62a902a097ef111410c2aa7c4d5343bd1cdd1",
562 //"parameters":{ 722 //"parameters":{
563 // "recordReferences":["46494c81d10b80ab190d41e6806ef63869cfcc7a0ab8fe98cc3f93de4729bb9a"], 723 // "recordReferences":["46494c81d10b80ab190d41e6806ef63869cfcc7a0ab8fe98cc3f93de4729bb9a"],
564 // "user":{ 724 // "user":{
565 // "header":"{\"rec...rsion\":\"0.1\"}", 725 // "header":"{\"rec...rsion\":\"0.1\"}",
566 // "statistics":"44kOOda0xYZjbcugJBdagBQx", 726 // "statistics":"44kOOda0xYZjbcugJBdagBQx",
567 // "version":"0.3", 727 // "version":"0.3",
568 // "lock":"----" 728 // "lock":"----"
569 // } 729 // }
570 //} 730 //}
571//} 731//}
572 $user = new user(); 732 $user = new user();
573 $user = $user->Get($_SESSION["userId"]); 733 $user = $user->Get($_SESSION["userId"]);
574 734
575 $recordReferenceList = $parameters["parameters"]["recordReferences"]; 735 $recordReferenceList = $parameters["parameters"]["recordReferences"];
576 $recordList = array(); 736 $recordList = array();
577 $c = count($recordReferenceList); 737 $c = count($recordReferenceList);
578 for ($i=0; $i<$c; $i++) { 738 for ($i=0; $i<$c; $i++) {
579 array_push($recordList, array("reference", "=", $recordReferenceList[$i])); 739 array_push($recordList, array("reference", "=", $recordReferenceList[$i]));
580 } 740 }
581 741
582 $record = new record(); 742 $record = new record();
583 $record->DeleteList($recordList, true); 743 $record->DeleteList($recordList, true);
584 744
585 updateUserData($parameters["parameters"]["user"], $user); 745 updateUserData($parameters["parameters"]["user"], $user);
586 $user->Save(); 746 $user->Save();
587 747
@@ -656,100 +816,103 @@ error_log("message");
656 816
657 $validOtpReferences = $parameters["parameters"]["oneTimePasswords"]; 817 $validOtpReferences = $parameters["parameters"]["oneTimePasswords"];
658 818
659 $otpList = $user->GetOnetimepasswordList(); 819 $otpList = $user->GetOnetimepasswordList();
660 $c = count($otpList); 820 $c = count($otpList);
661 for ($i=0; $i<$c; $i++) { 821 for ($i=0; $i<$c; $i++) {
662 $currentOtp = $otpList[$i]; 822 $currentOtp = $otpList[$i];
663 if (arrayContainsValue($validOtpReferences, $currentOtp->reference) == false) { 823 if (arrayContainsValue($validOtpReferences, $currentOtp->reference) == false) {
664 $currentOtp->Delete(); 824 $currentOtp->Delete();
665 } 825 }
666 } 826 }
667 827
668 updateUserData($parameters["parameters"]["user"], $user); 828 updateUserData($parameters["parameters"]["user"], $user);
669 $user->Save(); 829 $user->Save();
670 830
671 $result["result"] = $user->lock; 831 $result["result"] = $user->lock;
672 832
673 //============================================================= 833 //=============================================================
674 } else if ($message == "getOneTimePasswordsDetails") { 834 } else if ($message == "getOneTimePasswordsDetails") {
675 835
676 //============================================================= 836 //=============================================================
677 } else if ($message == "getLoginHistory") { 837 } else if ($message == "getLoginHistory") {
678 $result["result"] = array(); 838 $result["result"] = array();
679 839
680 //============================================================= 840 //=============================================================
681 } else if ($message == "upgradeUserCredentials") { 841 } else if ($message == "upgradeUserCredentials") {
682//{ 842//{
683 //"message":"upgradeUserCredentials", 843 //"message":"upgradeUserCredentials",
684 //"srpSharedSecret":"f1c25322e1478c8fb26063e9eef2f6fc25e0460065a31cb718f80bcff8f8a735", 844 //"srpSharedSecret":"f1c25322e1478c8fb26063e9eef2f6fc25e0460065a31cb718f80bcff8f8a735",
685 //"parameters":{ 845 //"parameters":{
686 // "user":{ 846 // "user":{
687 // "header":"{\"reco...sion\":\"0.1\"}", 847 // "header":"{\"reco...sion\":\"0.1\"}",
688 // "statistics":"s72Xva+w7CLgH+ihwqwXUbyu", 848 // "statistics":"s72Xva+w7CLgH+ihwqwXUbyu",
689 // "version":"0.3", 849 // "version":"0.3",
690 // "lock":"----" 850 // "lock":"----"
691 // }, 851 // },
692 // "credentials":{ 852 // "credentials":{
693 // "C":"57d15a8afbc1ae08103bd991d387ddfd8d26824276476fe709d754f098b6c26d", 853 // "C":"57d15a8afbc1ae08103bd991d387ddfd8d26824276476fe709d754f098b6c26d",
694 // "s":"d6735fc0486f391c4f3c947928f9e61a2418e7bed2bc9b25bb43f93acc52f636", 854 // "s":"d6735fc0486f391c4f3c947928f9e61a2418e7bed2bc9b25bb43f93acc52f636",
695 // "v":"540c2ebbf941a481b6b2c9026c07fb46e8202e4408ed96864a696deb622baece", 855 // "v":"540c2ebbf941a481b6b2c9026c07fb46e8202e4408ed96864a696deb622baece",
696 // "version":"0.2" 856 // "version":"0.2"
697 // }, 857 // },
698 // "oneTimePasswords":{ 858 // "oneTimePasswords":{
699 // "923cdc61c4b877b263236124c44d69b459d240453a461cce8ddf7518b423ca94": "1HD6Ta0xsifEDhDwE....9WDK6tvrS6w==", 859 // "923cdc61c4b877b263236124c44d69b459d240453a461cce8ddf7518b423ca94": "1HD6Ta0xsifEDhDwE....9WDK6tvrS6w==",
700 // "fb1573cb9497652a81688a099a524fb116e604c6fbc191cf33406eb8438efa5f": "CocN0cSxLmMRdgNF9....o3xhGUEY68Q==" 860 // "fb1573cb9497652a81688a099a524fb116e604c6fbc191cf33406eb8438efa5f": "CocN0cSxLmMRdgNF9....o3xhGUEY68Q=="
701 // } 861 // }
702 //} 862 //}
703//} 863//}
704 864
705 $user = new user(); 865 $user = new user();
706 $user->Get($_SESSION["userId"]); 866 $user->Get($_SESSION["userId"]);
707 867
708 $otp = new onetimepassword(); 868 $otp = new onetimepassword();
709 869
710 updateUserCredentials($parameters["parameters"]["credentials"], $user); 870 updateUserCredentials($parameters["parameters"]["credentials"], $user);
711 updateUserData($parameters["parameters"]["user"], $user); 871 updateUserData($parameters["parameters"]["user"], $user);
712 872
713 $otpList = $parameters["parameters"]["oneTimePasswords"]; 873 $otpList = $parameters["parameters"]["oneTimePasswords"];
714 foreach($otpList as $otpReference=>$otpData) { 874 foreach($otpList as $otpReference=>$otpData) {
715 $otpList = $otp->GetList(array(array("reference", "=", $otpReference))); 875 $otpList = $otp->GetList(array(array("reference", "=", $otpReference)));
716 $currentOtp = $otpList[0]; 876 $currentOtp = $otpList[0];
717 $currentOtp->data = $otpData; 877 $currentOtp->data = $otpData;
718 $currentOtp->Save(); 878 $currentOtp->Save();
719 } 879 }
720 880
721 $user->Save(); 881 $user->Save();
722 882
723 $result["lock"] = $user->lock; 883 $result["lock"] = $user->lock;
724 $result["result"] = "done"; 884 $result["result"] = "done";
725 885
726 //============================================================= 886 //=============================================================
727 } else if ($message == "echo") { 887 } else if ($message == "echo") {
728 $result["result"] = $parameters; 888 $result["result"] = $parameters;
729 } 889 }
730 890
731 //============================================================= 891 //=============================================================
732 } else if (isset($_SESSION['K'])) { 892 } else if (isset($_SESSION['K'])) {
733 $result["error"] = "Wrong shared secret!"; 893 $result["error"] = "Wrong shared secret!";
734 } else { 894 } else {
735 $result["result"] = "EXCEPTION"; 895 $result["result"] = "EXCEPTION";
736 $result["message"] = "Trying to communicate without an active connection"; 896 $result["message"] = "Trying to communicate without an active connection";
737 } 897 }
738 break; 898 break;
739 899
740 case "logout": 900 case "logout":
741error_log("logout"); 901error_log("logout");
742 session_destroy(); 902 session_destroy();
743 break; 903 break;
744 904
745 default: 905 default:
746error_log("default"); 906error_log("default");
747 $result["result"] = $parameters; 907 $result["result"] = $parameters;
748 break; 908 break;
749 } 909 }
750 910
751 session_write_close(); 911 session_write_close();
912
913 $finalResult = Array();
914 $finalResult["result"] = $result;
752 915
753 echo(json_encode($result)); 916 echo(json_encode($finalResult));
754error_log("result: ".json_encode($result)); 917error_log("result: ".json_encode($finalResult));
755?> 918?>
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/Record.js b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
index 270f2ae..ffb45de 100644
--- a/frontend/beta/js/Clipperz/PM/DataModel/Record.js
+++ b/frontend/beta/js/Clipperz/PM/DataModel/Record.js
@@ -186,204 +186,209 @@ Clipperz.PM.DataModel.Record.prototype = MochiKit.Base.update(null, {
186 return Clipperz.Base.serializeJSON(result); 186 return Clipperz.Base.serializeJSON(result);
187 }, 187 },
188 188
189 //------------------------------------------------------------------------- 189 //-------------------------------------------------------------------------
190 190
191 'shouldLoadData': function() { 191 'shouldLoadData': function() {
192 return this._shouldLoadData; 192 return this._shouldLoadData;
193 }, 193 },
194 194
195 'setShouldLoadData': function(aValue) { 195 'setShouldLoadData': function(aValue) {
196 this._shouldLoadData = aValue; 196 this._shouldLoadData = aValue;
197 }, 197 },
198 198
199 //------------------------------------------------------------------------- 199 //-------------------------------------------------------------------------
200 200
201 'shouldDecryptData': function() { 201 'shouldDecryptData': function() {
202 return this._shouldDecryptData; 202 return this._shouldDecryptData;
203 }, 203 },
204 204
205 'setShouldDecryptData': function(aValue) { 205 'setShouldDecryptData': function(aValue) {
206 this._shouldDecryptData = aValue; 206 this._shouldDecryptData = aValue;
207 }, 207 },
208 208
209 //------------------------------------------------------------------------- 209 //-------------------------------------------------------------------------
210 210
211 'shouldProcessData': function() { 211 'shouldProcessData': function() {
212 return this._shouldProcessData; 212 return this._shouldProcessData;
213 }, 213 },
214 214
215 'setShouldProcessData': function(aValue) { 215 'setShouldProcessData': function(aValue) {
216 this._shouldProcessData = aValue; 216 this._shouldProcessData = aValue;
217 }, 217 },
218 218
219 //------------------------------------------------------------------------- 219 //-------------------------------------------------------------------------
220 220
221 'loadData': function() { 221 'loadData': function() {
222 var result; 222 var result;
223 223
224//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.loadData - this: " + this); 224//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.loadData - this: " + this);
225 if (this.shouldLoadData()) { 225 if (this.shouldLoadData()) {
226 var deferredResult; 226 var deferredResult;
227 227
228 deferredResult = new MochiKit.Async.Deferred(); 228 deferredResult = new MochiKit.Async.Deferred();
229 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'loadingRecordData'); 229 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'loadingRecordData');
230 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getRecordDetail', {reference: this.reference()}); 230 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getRecordDetail', {reference: this.reference()});
231 deferredResult.addCallback(MochiKit.Base.method(this,'setServerData')); 231 deferredResult.addCallback(MochiKit.Base.method(this,'setServerData'));
232 deferredResult.callback(); 232 deferredResult.callback();
233 result = deferredResult; 233 result = deferredResult;
234 } else { 234 } else {
235 result = MochiKit.Async.succeed(this.serverData()); 235 result = MochiKit.Async.succeed(this.serverData());
236 } 236 }
237//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.loadData"); 237//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.loadData");
238 238
239 return result; 239 return result;
240 }, 240 },
241 241
242 //------------------------------------------------------------------------- 242 //-------------------------------------------------------------------------
243 243
244 'decryptData': function(anEncryptedData) { 244 'decryptData': function(anEncryptedData) {
245 var result; 245 var result;
246 246
247//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.decryptData - this: " + this + " (" + anEncryptedData + ")"); 247//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.decryptData - this: " + this + " (" + anEncryptedData + ")");
248 if (this.shouldDecryptData()) { 248 if (this.shouldDecryptData()) {
249 var deferredResult; 249 var deferredResult;
250 250
251 deferredResult = new MochiKit.Async.Deferred(); 251 deferredResult = new MochiKit.Async.Deferred();
252 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'decryptingRecordData'); 252 deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'decryptingRecordData');
253 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.key(), anEncryptedData['data'], anEncryptedData['version']); 253 deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.key(), anEncryptedData['data'], anEncryptedData['version']);
254 deferredResult.addCallback(function(anEncryptedData, someDecryptedValues) { 254 deferredResult.addCallback(function(anEncryptedData, someDecryptedValues) {
255 varresult; 255 varresult;
256 256
257 result = anEncryptedData; 257 result = anEncryptedData;
258 result['data'] = someDecryptedValues; 258 result['data'] = someDecryptedValues;
259 259
260 return result; 260 return result;
261 }, anEncryptedData); 261 }, anEncryptedData);
262 deferredResult.addCallback(MochiKit.Base.method(this, 'setDecryptedData')); 262 deferredResult.addCallback(MochiKit.Base.method(this, 'setDecryptedData'));
263 deferredResult.callback(); 263 deferredResult.callback();
264 264
265 result = deferredResult; 265 result = deferredResult;
266 } else { 266 } else {
267 result = MochiKit.Async.succeed(this.decryptedData()); 267 result = MochiKit.Async.succeed(this.decryptedData());
268 } 268 }
269//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.decryptData"); 269//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.decryptData");
270 270
271 return result; 271 return result;
272 }, 272 },
273 273
274 //------------------------------------------------------------------------- 274 //-------------------------------------------------------------------------
275 275
276 'processData': function(someValues) { 276 'processData': function(someValues) {
277//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.processData"); 277//MochiKit.Logging.logDebug(">>> [" + (new Date()).valueOf() + "] Record.processData");
278//MochiKit.Logging.logDebug("--- Record.processData: " + Clipperz.Base.serializeJSON(someValues)); 278//MochiKit.Logging.logDebug("--- Record.processData: " + Clipperz.Base.serializeJSON(someValues));
279 if (this.shouldProcessData()) { 279 if (this.shouldProcessData()) {
280 var currentVersionParameters; 280 var currentVersionParameters;
281 281
282console.log("Record.processData", someValues);
282 this.processDataToExtractLegacyValues(someValues['data']); 283 this.processDataToExtractLegacyValues(someValues['data']);
283 284
284 if (typeof(someValues['data']['notes']) != 'undefined') { 285 if (typeof(someValues['data']['notes']) != 'undefined') {
285 this.setNotes(someValues['data']['notes']); 286 this.setNotes(someValues['data']['notes']);
286 } 287 }
288
287 if (someValues['data']['currentVersionKey'] != null) { 289 if (someValues['data']['currentVersionKey'] != null) {
288 this.setCurrentVersionKey(someValues['data']['currentVersionKey']); 290 this.setCurrentVersionKey(someValues['data']['currentVersionKey']);
289 } else { 291 } else {
290 this.setCurrentVersionKey(this.key()); 292 this.setCurrentVersionKey(this.key());
291 } 293 }
292 294
293 currentVersionParameters = someValues['currentVersion']; 295 // currentVersionParameters = someValues['currentVersion'];
296 currentVersionParameters = someValues['versions'][someValues['currentVersion']];
297console.log("Record.processData - this.currentVersionKey()", this.currentVersionKey());
298console.log("Record.processData - currentVersionParameters", currentVersionParameters);
294 currentVersionParameters['key'] = this.currentVersionKey(); 299 currentVersionParameters['key'] = this.currentVersionKey();
295 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters)); 300 this.setCurrentVersion(new Clipperz.PM.DataModel.RecordVersion(this, currentVersionParameters));
296 301
297 if (someValues['data']['directLogins'] != null) { 302 if (someValues['data']['directLogins'] != null) {
298 vardirectLoginReference; 303 vardirectLoginReference;
299 304
300 for (directLoginReference in someValues['data']['directLogins']) { 305 for (directLoginReference in someValues['data']['directLogins']) {
301 var directLogin; 306 var directLogin;
302 var directLoginParameters; 307 var directLoginParameters;
303 308
304 directLoginParameters = someValues['data']['directLogins'][directLoginReference]; 309 directLoginParameters = someValues['data']['directLogins'][directLoginReference];
305 directLoginParameters.record = this; 310 directLoginParameters.record = this;
306 directLoginParameters.reference = directLoginReference; 311 directLoginParameters.reference = directLoginReference;
307 312
308 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters); 313 directLogin = new Clipperz.PM.DataModel.DirectLogin(directLoginParameters);
309 this.addDirectLogin(directLogin, true); 314 this.addDirectLogin(directLogin, true);
310 } 315 }
311 } 316 }
312 this.setShouldProcessData(false); 317 this.setShouldProcessData(false);
313 } 318 }
314 319
315 Clipperz.NotificationCenter.notify(this, 'recordDataReady'); 320 Clipperz.NotificationCenter.notify(this, 'recordDataReady');
316//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData"); 321//MochiKit.Logging.logDebug("<<< [" + (new Date()).valueOf() + "] Record.processData");
317//MochiKit.Logging.logDebug("<<< Record.processData"); 322//MochiKit.Logging.logDebug("<<< Record.processData");
318 323
319 return this; 324 return this;
320 }, 325 },
321 326
322 //------------------------------------------------------------------------- 327 //-------------------------------------------------------------------------
323 328
324 'processDataToExtractLegacyValues': function(someValues) { 329 'processDataToExtractLegacyValues': function(someValues) {
325//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues"); 330//MochiKit.Logging.logDebug(">>> Record.processDataToExtractLegacyValues");
326 if (someValues['data'] != null) { 331 if (someValues['data'] != null) {
327 this.setNotes(someValues['data']); 332 this.setNotes(someValues['data']);
328 } 333 }
329 334
330 if ( 335 if (
331 (typeof(someValues['loginFormData']) != "undefined") 336 (typeof(someValues['loginFormData']) != "undefined")
332 &&(typeof(someValues['loginBindings'] != "undefined")) 337 &&(typeof(someValues['loginBindings'] != "undefined"))
333 &&(someValues['loginFormData'] != "") 338 &&(someValues['loginFormData'] != "")
334 &&(someValues['loginBindings'] != "") 339 &&(someValues['loginBindings'] != "")
335 ) { 340 ) {
336 vardirectLogin; 341 vardirectLogin;
337 342
338 directLogin = new Clipperz.PM.DataModel.DirectLogin({ 343 directLogin = new Clipperz.PM.DataModel.DirectLogin({
339 record:this, 344 record:this,
340 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'], 345 label:this.label() + Clipperz.PM.Strings['newDirectLoginLabelSuffix'],
341 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() + 346 reference:Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(this.label() +
342 someValues['loginFormData'] + 347 someValues['loginFormData'] +
343 someValues['loginBindings'])).toHexString().substring(2), 348 someValues['loginBindings'])).toHexString().substring(2),
344 formData:Clipperz.Base.evalJSON(someValues['loginFormData']), 349 formData:Clipperz.Base.evalJSON(someValues['loginFormData']),
345 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']), 350 legacyBindingData:Clipperz.Base.evalJSON(someValues['loginBindings']),
346 bookmarkletVersion:'0.1' 351 bookmarkletVersion:'0.1'
347 }); 352 });
348 this.addDirectLogin(directLogin, true); 353 this.addDirectLogin(directLogin, true);
349 } 354 }
350//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues"); 355//MochiKit.Logging.logDebug("<<< Record.processDataToExtractLegacyValues");
351 }, 356 },
352 357
353 //------------------------------------------------------------------------- 358 //-------------------------------------------------------------------------
354 359
355 'getReadyBeforeUpdatingVersionValues': function() { 360 'getReadyBeforeUpdatingVersionValues': function() {
356 }, 361 },
357 362
358 //------------------------------------------------------------------------- 363 //-------------------------------------------------------------------------
359 364
360 'addNewField': function() { 365 'addNewField': function() {
361 varnewField; 366 varnewField;
362 367
363//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this); 368//MochiKit.Logging.logDebug(">>> Record.addNewField - " + this);
364 this.getReadyBeforeUpdatingVersionValues(); 369 this.getReadyBeforeUpdatingVersionValues();
365 newField = this.currentVersion().addNewField(); 370 newField = this.currentVersion().addNewField();
366 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 371 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
367//MochiKit.Logging.logDebug("<<< Record.addNewField"); 372//MochiKit.Logging.logDebug("<<< Record.addNewField");
368 373
369 return newField; 374 return newField;
370 }, 375 },
371 376
372 //------------------------------------------------------------------------- 377 //-------------------------------------------------------------------------
373 378
374 'removeField': function(aField) { 379 'removeField': function(aField) {
375 this.getReadyBeforeUpdatingVersionValues(); 380 this.getReadyBeforeUpdatingVersionValues();
376 this.currentVersion().removeField(aField); 381 this.currentVersion().removeField(aField);
377 Clipperz.NotificationCenter.notify(this, 'recordUpdated'); 382 Clipperz.NotificationCenter.notify(this, 'recordUpdated');
378 }, 383 },
379 384
380 'removeEmptyFields': function() { 385 'removeEmptyFields': function() {
381 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) { 386 MochiKit.Iter.forEach(MochiKit.Base.values(this.currentVersion().fields()), MochiKit.Base.bind(function(aField) {
382 if (aField.isEmpty()) { 387 if (aField.isEmpty()) {
383 this.removeField(aField); 388 this.removeField(aField);
384 // this.currentVersion().removeField(aField); 389 // this.currentVersion().removeField(aField);
385 } 390 }
386 }, this)); 391 }, this));
387 }, 392 },
388 393
389 //------------------------------------------------------------------------- 394 //-------------------------------------------------------------------------
diff --git a/frontend/beta/js/Clipperz/PM/Proxy.js b/frontend/beta/js/Clipperz/PM/Proxy.js
index f476196..bec9195 100644
--- a/frontend/beta/js/Clipperz/PM/Proxy.js
+++ b/frontend/beta/js/Clipperz/PM/Proxy.js
@@ -23,148 +23,147 @@ refer to http://www.clipperz.com.
23 23
24*/ 24*/
25 25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28 28
29//============================================================================= 29//=============================================================================
30 30
31Clipperz.PM.Proxy = function(args) { 31Clipperz.PM.Proxy = function(args) {
32 args = args || {}; 32 args = args || {};
33 33
34 this._shouldPayTolls = args.shouldPayTolls || false; 34 this._shouldPayTolls = args.shouldPayTolls || false;
35 35
36 this._tolls = { 36 this._tolls = {
37 'CONNECT':[], 37 'CONNECT':[],
38 'REGISTER':[], 38 'REGISTER':[],
39 'MESSAGE':[] 39 'MESSAGE':[]
40 }; 40 };
41 41
42 if (args.isDefault === true) { 42 if (args.isDefault === true) {
43 Clipperz.PM.Proxy.defaultProxy = this; 43 Clipperz.PM.Proxy.defaultProxy = this;
44 } 44 }
45 45
46 return this; 46 return this;
47} 47}
48 48
49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { 49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
50 50
51 'toString': function() { 51 'toString': function() {
52 return "Clipperz.PM.Proxy"; 52 return "Clipperz.PM.Proxy";
53 }, 53 },
54 54
55 //========================================================================= 55 //=========================================================================
56 56
57 'shouldPayTolls': function() { 57 'shouldPayTolls': function() {
58 return this._shouldPayTolls; 58 return this._shouldPayTolls;
59 }, 59 },
60 60
61 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
62 62
63 'tolls': function() { 63 'tolls': function() {
64 return this._tolls; 64 return this._tolls;
65 }, 65 },
66 66
67 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
68 68
69 'payToll': function(aRequestType, someParameters) { 69 'payToll': function(aRequestType, someParameters) {
70 vardeferredResult; 70 vardeferredResult;
71 71
72//console.log(">>> Proxy.payToll", aRequestType, someParameters); 72//console.log(">>> Proxy.payToll", aRequestType, someParameters);
73 if (this.shouldPayTolls()) { 73 if (this.shouldPayTolls()) {
74 deferredResult = new MochiKit.Async.Deferred(); 74 deferredResult = new MochiKit.Async.Deferred();
75 75
76 if (this.tolls()[aRequestType].length == 0) { 76 if (this.tolls()[aRequestType].length == 0) {
77 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType})); 77 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', 'knock', {requestType:aRequestType}));
78 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 78 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
79 } 79 }
80 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop')); 80 deferredResult.addCallback(MochiKit.Base.method(this.tolls()[aRequestType], 'pop'));
81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); 81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay'));
82 deferredResult.addCallback(function(aToll) { 82 deferredResult.addCallback(function(aToll) {
83 var result; 83 var result;
84 84
85 result = { 85 result = {
86 parameters: someParameters, 86 parameters: someParameters,
87 toll: aToll 87 toll: aToll
88 } 88 }
89 89
90 return result; 90 return result;
91 }); 91 });
92 92
93 deferredResult.callback(); 93 deferredResult.callback();
94 } else { 94 } else {
95 deferredResult = MochiKit.Async.succeed({parameters:someParameters}); 95 deferredResult = MochiKit.Async.succeed({parameters:someParameters});
96 } 96 }
97//console.log("<<< Proxy.payToll"); 97//console.log("<<< Proxy.payToll");
98 98
99 return deferredResult; 99 return deferredResult;
100 }, 100 },
101 101
102 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
103 103
104 'addToll': function(aToll) { 104 'addToll': function(aToll) {
105//console.log(">>> Proxy.addToll", aToll); 105//console.log(">>> Proxy.addToll", aToll);
106 this.tolls()[aToll.requestType()].push(aToll); 106 this.tolls()[aToll.requestType()].push(aToll);
107//console.log("<<< Proxy.addToll"); 107//console.log("<<< Proxy.addToll");
108 }, 108 },
109 109
110 //========================================================================= 110 //=========================================================================
111 111
112 'setTollCallback': function(someParameters) { 112 'setTollCallback': function(someParameters) {
113//console.log(">>> Proxy.setTollCallback", someParameters); 113//console.log(">>> Proxy.setTollCallback", someParameters);
114 if (typeof(someParameters['toll']) != 'undefined') { 114 if (typeof(someParameters['toll']) != 'undefined') {
115//console.log("added a new toll", someParameters['toll']); 115//console.log("added a new toll", someParameters['toll']);
116 this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); 116 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
117 } 117 }
118//console.log("<<< Proxy.setTallCallback", someParameters['result']); 118//console.log("<<< Proxy.setTallCallback", someParameters['result']);
119 //return someParameters['result']; 119 return someParameters['result'];
120 return someParameters;
121 }, 120 },
122 121
123 //========================================================================= 122 //=========================================================================
124 123
125 'registration': function (someParameters) { 124 'registration': function (someParameters) {
126 return this.processMessage('registration', someParameters, 'REGISTER'); 125 return this.processMessage('registration', someParameters, 'REGISTER');
127 }, 126 },
128 127
129 'handshake': function (someParameters) { 128 'handshake': function (someParameters) {
130 return this.processMessage('handshake', someParameters, 'CONNECT'); 129 return this.processMessage('handshake', someParameters, 'CONNECT');
131 }, 130 },
132 131
133 'message': function (someParameters) { 132 'message': function (someParameters) {
134 return this.processMessage('message', someParameters, 'MESSAGE'); 133 return this.processMessage('message', someParameters, 'MESSAGE');
135 }, 134 },
136 135
137 'logout': function (someParameters) { 136 'logout': function (someParameters) {
138 return this.processMessage('logout', someParameters, 'MESSAGE'); 137 return this.processMessage('logout', someParameters, 'MESSAGE');
139 }, 138 },
140 139
141 //========================================================================= 140 //=========================================================================
142 141
143 'processMessage': function (aFunctionName, someParameters, aRequestType) { 142 'processMessage': function (aFunctionName, someParameters, aRequestType) {
144 vardeferredResult; 143 vardeferredResult;
145 144
146 deferredResult = new MochiKit.Async.Deferred(); 145 deferredResult = new MochiKit.Async.Deferred();
147 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType)); 146 deferredResult.addCallback(MochiKit.Base.method(this, 'payToll', aRequestType));
148 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName)); 147 deferredResult.addCallback(MochiKit.Base.method(this, 'sendMessage', aFunctionName));
149 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback')); 148 deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
150 deferredResult.callback(someParameters); 149 deferredResult.callback(someParameters);
151 150
152 return deferredResult; 151 return deferredResult;
153 }, 152 },
154 153
155 //========================================================================= 154 //=========================================================================
156 155
157 'sendMessage': function () { 156 'sendMessage': function () {
158 throw Clipperz.Base.exception.AbstractMethod; 157 throw Clipperz.Base.exception.AbstractMethod;
159 }, 158 },
160 159
161 //========================================================================= 160 //=========================================================================
162 161
163 'isReadOnly': function () { 162 'isReadOnly': function () {
164 return false; 163 return false;
165 }, 164 },
166 165
167 //========================================================================= 166 //=========================================================================
168 __syntaxFix__: "syntax fix" 167 __syntaxFix__: "syntax fix"
169 168
170}); 169});
diff --git a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js b/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js
deleted file mode 100755
index 34a10c2..0000000
--- a/frontend/beta/js/Clipperz/PM/Proxy/Proxy.PHP.js
+++ b/dev/null
@@ -1,262 +0,0 @@
1/*
2
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please
8refer to http://www.clipperz.com.
9
10* Clipperz Community Edition is free software: you can redistribute
11 it and/or modify it under the terms of the GNU Affero General Public
12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version.
14
15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details.
19
20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>.
23
24*/
25
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28
29//=============================================================================
30
31Clipperz.PM.Proxy.PHP = function(args) {
32 Clipperz.PM.Proxy.PHP.superclass.constructor.call(this, args);
33/*
34 this._tolls = {
35 'CONNECT':[],
36 'REGISTER':[],
37 'MESSAGE':[]
38 };
39 */
40 return this;
41}
42
43YAHOO.extendX(Clipperz.PM.Proxy.PHP, Clipperz.PM.Proxy, {
44
45 'toString': function() {
46 return "Clipperz.PM.Proxy.PHP - " + this.args();
47 },
48
49 //=========================================================================
50/*
51 'tolls': function() {
52 return this._tolls;
53 },
54*/
55 //-------------------------------------------------------------------------
56/*
57 'payToll': function(aRequestType, someParameters) {
58 vardeferredResult;
59
60//MochiKit.Logging.logDebug(">>> Proxy.DWR.payToll: " + aRequestType);
61 if (this.tolls()[aRequestType].length > 0) {
62 deferredResult = MochiKit.Async.succeed(this.tolls()[aRequestType].pop());
63 } else {
64//MochiKit.Logging.logDebug("### " + aRequestType + " toll NOT immediately available; request queued.");
65 deferredResult = new MochiKit.Async.Deferred();
66 deferredResult.addCallback(function(someParameters) {
67 return new Clipperz.PM.Toll(someParameters['toll']);
68 })
69 com_clipperz_pm_Proxy.knock(Clipperz.Base.serializeJSON({requestType:aRequestType}), {
70 callback:MochiKit.Base.method(deferredResult, 'callback'),
71 errorHandler:MochiKit.Base.method(deferredResult, 'errback')
72 });
73 }
74
75 deferredResult.addCallback(function(aToll) {
76 return aToll.deferredPay();
77 });
78 deferredResult.addCallback(function(someParameters, aToll) {
79 var result;
80
81 result = {
82 parameters: someParameters,
83 toll: aToll
84 }
85
86 return result;
87 }, someParameters);
88
89 return deferredResult;
90 },
91*/
92 //-------------------------------------------------------------------------
93/*
94 'addToll': function(aToll) {
95 this.tolls()[aToll.requestType()].push(aToll);
96 },
97*/
98 //=========================================================================
99/*
100 'setTollCallback': function(someParameters) {
101//MochiKit.Logging.logDebug(">>> Proxy.DWR.setTollCallback");
102//MochiKit.Logging.logDebug("--- Proxy.DWR.setTollCallback - " + Clipperz.Base.serializeJSON(someParameters));
103 if (typeof(someParameters['toll']) != 'undefined') {
104 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
105 }
106 return someParameters['result'];
107 },
108*/
109 //=========================================================================
110
111 'registration': function(someParameters) {
112 return this.sendMessage('registration', someParameters, 'REGISTER');
113 },
114
115 //-------------------------------------------------------------------------
116
117 'handshake': function(someParameters) {
118/*
119 _s = "e8a2162f29aeaabb729f5625e9740edbf0cd80ac77c6b19ab951ed6c88443b8c";
120 _v = new Clipperz.Crypto.BigInt("955e2db0f7844aca372f5799e5f7e51b5866718493096908bd66abcf1d068108", 16);
121 _b = new Clipperz.Crypto.BigInt("5761e6c84d22ea3c5649de01702d60f674ccfe79238540eb34c61cd020230c53", 16);
122
123 _B = _v.add(Clipperz.Crypto.SRP.g().powerModule(_b, Clipperz.Crypto.SRP.n()));
124 _u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_B.asString(10))).toHexString(), 16);
125 _A = new Clipperz.Crypto.BigInt("3b3567ec33d73673552e960872eb154d091a2488915941038aef759236a27e64", 16);
126 _S = (_A.multiply(_v.powerModule(_u, Clipperz.Crypto.SRP.n()))).powerModule(_b, Clipperz.Crypto.SRP.n());
127 _K = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_S.asString(10))).toHexString().slice(2);
128 _M1 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_A.asString(10) + _B.asString(10) + _K)).toHexString().slice(2);
129 _M2 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(_A.asString(10) + _M1 + _K)).toHexString().slice(2);
130
131 // MochiKit.Logging.logDebug("b = " + _b.asString(16));
132 // MochiKit.Logging.logDebug("v = " + _v.asString(16));
133 MochiKit.Logging.logDebug("B = " + _B.asString(16));
134 MochiKit.Logging.logDebug("u = " + _u.asString(16));
135 MochiKit.Logging.logDebug("S = " + _S.asString(16));
136 MochiKit.Logging.logDebug("K = " + _K);
137 MochiKit.Logging.logDebug("M1 = " + _M1);
138 MochiKit.Logging.logDebug("M2 = " + _M2);
139 // MochiKit.Logging.logDebug("someParameters.version: " + someParameters.version);
140 */
141 return this.sendMessage('handshake', someParameters, 'CONNECT');
142 },
143
144 //-------------------------------------------------------------------------
145
146 'message': function(someParameters) {
147 return this.sendMessage('message', someParameters, 'MESSAGE');
148 },
149
150 //-------------------------------------------------------------------------
151
152 'logout': function(someParameters) {
153//MochiKit.Logging.logDebug("=== Proxy.DWR.logout");
154 return this.sendMessage('logout', someParameters, 'MESSAGE');
155 },
156
157 //=========================================================================
158
159 'sendMessage': function(aFunctionName, someParameters, aRequestType) {
160/*
161 vardeferredResult;
162 var proxy;
163
164//MochiKit.Logging.logDebug(">>> Proxy.DWR.sendMessage - " + aFunctionName + " - " + aRequestType);
165 proxy = this;
166
167 deferredResult = new MochiKit.Async.Deferred();
168//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.1 Proxy.DWR.sendMessage - 1: " + res); return res;});
169 deferredResult.addCallback(MochiKit.Base.method(proxy, 'payToll'), aRequestType);
170//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.2 Proxy.DWR.sendMessage - 2: " + Clipperz.Base.serializeJSON(res)); return res;});
171 deferredResult.addCallback(MochiKit.Base.method(proxy, 'sendRemoteMessage'), aFunctionName);
172//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.DWR.sendMessage - 3: " + res); return res;});
173//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.DWR.sendMessage - 3: " + Clipperz.Base.serializeJSON(res)); return res;});
174 deferredResult.callback(someParameters);
175
176//MochiKit.Logging.logDebug("<<< Proxy.DWR.sendMessage");
177 return deferredResult;
178*/
179
180 // return this.sendRemoteMessage(aFunctionName, someParameters);
181
182
183 vardeferredResult;
184 var proxy;
185
186 proxy = this;
187
188 deferredResult = new MochiKit.Async.Deferred();
189 deferredResult.addCallback(MochiKit.Base.method(proxy, 'sendRemoteMessage'), aFunctionName);
190//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.PHP.sendMessage - 3: " + res); return res;});
191//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("x.3 Proxy.PHP.sendMessage - 3.1: " + Clipperz.Base.serializeJSON(res)); return res;});
192
193 deferredResult.callback(someParameters);
194
195 return deferredResult;
196 },
197
198 //=========================================================================
199
200 'sendRemoteMessage': function(aFunctionName, someParameters) {
201/*
202 vardeferredResult;
203
204//MochiKit.Logging.logDebug(">>> Proxy.DWR.sendRemoteMessage('" + aFunctionName + "', " + Clipperz.Base.serializeJSON(someParameters) + ") - " + this);
205 deferredResult = new MochiKit.Async.Deferred();
206//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Proxy.DWR.sendRemoteMessage - 1: " + res); return res;});
207 // deferredResult.addCallback(MochiKit.Base.method(this, 'setTollCallback'));
208//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("Proxy.DWR.sendRemoteMessage - 2: " + res); return res;});
209
210 com_clipperz_pm_Proxy[aFunctionName](Clipperz.Base.serializeJSON(someParameters), {
211 callback:MochiKit.Base.method(deferredResult, 'callback'),
212 errorHandler:MochiKit.Base.method(deferredResult, 'errback')
213 });
214//MochiKit.Logging.logDebug("<<< Proxy.PHP.sendRemoteMessage - result: " + deferredResult);
215
216 return deferredResult;
217*/
218
219 vardeferredResult;
220 var parameters;
221
222//MochiKit.Logging.logDebug(">>> Proxy.PHP.sendRemoteMessage('" + aFunctionName + "', " + Clipperz.Base.serializeJSON(someParameters) + ") - " + this);
223 parameters = {};
224 parameters['method'] = aFunctionName;
225 // parameters['version'] = someParameters['version'];
226 // parameters['message'] = someParameters['message'];
227 parameters['parameters'] = Clipperz.Base.serializeJSON(someParameters);
228//MochiKit.Logging.logDebug("--- Proxy.PHP.sendRemoteMessage('" + Clipperz.Base.serializeJSON(parameters) + ") - " + this);
229 deferredResult = new MochiKit.Async.Deferred();
230 deferredResult.addCallback(MochiKit.Async.doXHR, "./php/index.php", {
231 method:'POST',
232 sendContent:MochiKit.Base.queryString(parameters),
233 headers:{"Content-Type":"application/x-www-form-urlencoded"}
234 });
235//deferredResult.addCallback(function(res) {MochiKit.Logging.logDebug("Proxy.PHP.response - 2: " + res.responseText); return res;});
236//deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("Proxy.PHP.response - ERROR: " + res); return res;});
237 deferredResult.addCallback(MochiKit.Async.evalJSONRequest);
238 deferredResult.addCallback(function (someValues) {
239 if (someValues['result'] == 'EXCEPTION') {
240 throw someValues['message'];
241 }
242 return someValues;
243 })
244 deferredResult.callback();
245
246 return deferredResult;
247 },
248
249 //=========================================================================
250
251 'isReadOnly': function() {
252 return false;
253 },
254
255 //=========================================================================
256 __syntaxFix__: "syntax fix"
257
258});
259
260//=============================================================================
261
262//Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.PHP("Proxy.PHP - async test");
diff --git a/frontend/gamma/html/index_template.html b/frontend/gamma/html/index_template.html
index 8cf838c..bedb243 100644
--- a/frontend/gamma/html/index_template.html
+++ b/frontend/gamma/html/index_template.html
@@ -1,62 +1,67 @@
1<html> 1<html>
2<head> 2<head>
3 <title>@page.title@</title> 3 <title>@page.title@</title>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5<!-- 5<!--
6@copyright@ 6@copyright@
7--> 7-->
8 8
9@css@ 9@css@
10 10
11 <link rel="shortcut icon" href="./clipperz.ico" /> 11 <link rel="shortcut icon" href="./clipperz.ico" />
12 12
13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." /> 13 <meta name="description" content="Login to your web accounts with just one click. Never type a password again! Use multiple complex passwords and forget them. A password manager that enhances your online security." />
14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" /> 14 <meta name="keywords" content="password manager,gestor de contraseñas,gerenciador de senhas,Kennwortmanager,passwords,security,privacy,cryptography" />
15<script> 15<script>
16 Clipperz_IEisBroken = false; 16 Clipperz_IEisBroken = false;
17 Clipperz_normalizedNewLine = '\n'; 17 Clipperz_normalizedNewLine = '\n';
18 Clipperz_dumpUrl = "/dump/"; 18 Clipperz_dumpUrl = "/dump/";
19</script> 19</script>
20 20
21<!--[if IE]><script> 21<!--[if IE]><script>
22Clipperz_IEisBroken = true; 22Clipperz_IEisBroken = true;
23Clipperz_normalizedNewLine = '\x0d\x0a'; 23Clipperz_normalizedNewLine = '\x0d\x0a';
24</script><![endif]--> 24</script><![endif]-->
25 25
26@js_DEBUG@ 26@js_DEBUG@
27 27
28</head> 28</head>
29<body> 29<body>
30<div id="mainDiv"> 30<div id="mainDiv">
31 <div id="loading"> 31 <div id="loading">
32 <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a> 32 <a href="http://www.clipperz.com" target="_blank"><div id="logo"></div></a>
33 <h5 class="clipperzPayoff">keep it to yourself!</h5> 33 <h5 class="clipperzPayoff">keep it to yourself!</h5>
34 <h2>loading ...</h2> 34 <h2>loading ...</h2>
35 </div> 35 </div>
36 36
37@js_INSTALL@ 37@js_INSTALL@
38 38
39</div> 39</div>
40<div id="applicationVersionType" class="@application.version.type@"></div> 40<div id="applicationVersionType" class="@application.version.type@"></div>
41 41
42<script>
43 Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.JSON({'url':'@request.path@', 'shouldPayTolls':@should.pay.toll@});
44 /*offline_data_placeholder*/
45</script>
46
42<!-- --> 47<!-- -->
43<div id="javaScriptAlert"> 48<div id="javaScriptAlert">
44 <div class="mask"></div> 49 <div class="mask"></div>
45 <div class="message"> 50 <div class="message">
46 <div class="header"></div> 51 <div class="header"></div>
47 <div class="body"> 52 <div class="body">
48 <div class="alertLogo"></div> 53 <div class="alertLogo"></div>
49 <div class="alert"> 54 <div class="alert">
50 <h1>Attention!</h1> 55 <h1>Attention!</h1>
51 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p> 56 <p>If you can read this message, the chances are that your browser does not properly support JavaScript? or you have disabled this functionality yourself.</p>
52 <h3>Javascript is required to access Clipperz.</h3> 57 <h3>Javascript is required to access Clipperz.</h3>
53 <h5>Please enable scripting or upgrade your browser.</h5> 58 <h5>Please enable scripting or upgrade your browser.</h5>
54 </div> 59 </div>
55 </div> 60 </div>
56 <div class="footer"></div> 61 <div class="footer"></div>
57 </div> 62 </div>
58</div> 63</div>
59<!-- --> 64<!-- -->
60 65
61</body> 66</body>
62</html> 67</html>
diff --git a/frontend/gamma/js/Clipperz/Async.js b/frontend/gamma/js/Clipperz/Async.js
index 7c9d783..97d8ecf 100644
--- a/frontend/gamma/js/Clipperz/Async.js
+++ b/frontend/gamma/js/Clipperz/Async.js
@@ -1,216 +1,222 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz Community Edition.
6Clipperz Community Edition is an online password manager. 6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 7For further information about its features and functionalities please
8refer to http://www.clipperz.com. 8refer to http://www.clipperz.com.
9 9
10* Clipperz Community Edition is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
11 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
12 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
13 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
14 14
15* Clipperz Community Edition is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
19 19
20* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
23 23
24*/ 24*/
25 25
26//Clipperz.Async = MochiKit.Async; 26//Clipperz.Async = MochiKit.Async;
27 27
28 28
29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
30if (typeof(Clipperz.Async) == 'undefined') { Clipperz.Async = {}; } 30if (typeof(Clipperz.Async) == 'undefined') { Clipperz.Async = {}; }
31 31
32Clipperz.Async.VERSION = "0.1"; 32Clipperz.Async.VERSION = "0.1";
33Clipperz.Async.NAME = "Clipperz.Async"; 33Clipperz.Async.NAME = "Clipperz.Async";
34 34
35Clipperz.Async.Deferred = function(aName, args) { 35Clipperz.Async.Deferred = function(aName, args) {
36 args = args || {}; 36 args = args || {};
37 37
38 Clipperz.Async.Deferred.superclass.constructor.call(this, args.canceller); 38 Clipperz.Async.Deferred.superclass.constructor.call(this, args.canceller);
39 39
40 this._args = args; 40 this._args = args;
41 this._name = aName || "Anonymous deferred"; 41 this._name = aName || "Anonymous deferred";
42 this._count = 0; 42 this._count = 0;
43 this._shouldTrace = ((CLIPPERZ_DEFERRED_TRACING_ENABLED === true) || (args.trace === true)); 43 this._shouldTrace = ((CLIPPERZ_DEFERRED_TRACING_ENABLED === true) || (args.trace === true));
44 this._vars = null; 44 this._vars = null;
45 45
46 return this; 46 return this;
47} 47}
48 48
49//============================================================================= 49//=============================================================================
50 50
51Clipperz.Base.extend(Clipperz.Async.Deferred, MochiKit.Async.Deferred, { 51Clipperz.Base.extend(Clipperz.Async.Deferred, MochiKit.Async.Deferred, {
52 52
53 'name': function () { 53 'name': function () {
54 return this._name; 54 return this._name;
55 }, 55 },
56 56
57 'args': function () { 57 'args': function () {
58 return this._args; 58 return this._args;
59 }, 59 },
60 60
61 //----------------------------------------------------------------------------- 61 //-----------------------------------------------------------------------------
62 62
63 'callback': function (aValue) { 63 'callback': function (aValue) {
64 if (this._shouldTrace) { 64 if (this._shouldTrace) {
65 Clipperz.log("CALLBACK " + this._name, aValue); 65 //Clipperz.log("CALLBACK " + this._name, aValue);
66 console.log("CALLBACK " + this._name, aValue);
66 } 67 }
67 68
68 if (this.chained == false) { 69 if (this.chained == false) {
69 var message; 70 var message;
70 71
71 message = "ERROR [" + this._name + "]"; 72 message = "ERROR [" + this._name + "]";
72 this.addErrback(function(aResult) { 73 this.addErrback(function(aResult) {
73 if (! (aResult instanceof MochiKit.Async.CancelledError)) { 74 if (! (aResult instanceof MochiKit.Async.CancelledError)) {
74 Clipperz.log(message, aResult); 75 Clipperz.log(message, aResult);
75 } 76 }
76 return aResult; 77 return aResult;
77 }); 78 });
78 79
79 if (this._shouldTrace) { 80 if (this._shouldTrace) {
80 var resultMessage; 81 var resultMessage;
81 82
82 resultMessage = "RESULT " + this._name + " <=="; 83 resultMessage = "RESULT " + this._name + " <==";
83 // this.addCallback(function(aResult) { 84 // this.addCallback(function(aResult) {
84 Clipperz.Async.Deferred.superclass.addCallback.call(this, function(aResult) { 85 Clipperz.Async.Deferred.superclass.addCallback.call(this, function(aResult) {
85 Clipperz.log(resultMessage, aResult); 86 //Clipperz.log(resultMessage, aResult);
87 console.log(resultMessage, aResult);
86 88
87 return aResult; 89 return aResult;
88 }); 90 });
89 } 91 }
90 } 92 }
91 93
92 if (CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED === true) { 94 if (CLIPPERZ_DEFERRED_CALL_LOGGING_ENABLED === true) {
93 Clipperz.log("callback " + this._name, this); 95 Clipperz.log("callback " + this._name, this);
94 } 96 }
95 97
96 return Clipperz.Async.Deferred.superclass.callback.apply(this, arguments); 98 return Clipperz.Async.Deferred.superclass.callback.apply(this, arguments);
97 }, 99 },
98 100
99 //----------------------------------------------------------------------------- 101 //-----------------------------------------------------------------------------
100 102
101 'addCallback': function () { 103 'addCallback': function () {
102 var message; 104 var message;
103 105
104 if (this._shouldTrace) { 106 if (this._shouldTrace) {
105 this._count ++; 107 this._count ++;
106 message = "[" + this._count + "] " + this._name + " "; 108 message = "[" + this._count + "] " + this._name + " ";
107 // this.addBoth(function(aResult) {Clipperz.log(message + "-->", aResult); return aResult;}); 109 // this.addBoth(function(aResult) {Clipperz.log(message + "-->", aResult); return aResult;});
108 this.addCallbacks( 110 this.addCallbacks(
109 function(aResult) {Clipperz.log("-OK- " + message + "-->"/*, aResult*/); return aResult;}, 111 //function(aResult) {Clipperz.log("-OK- " + message + "-->"/*, aResult*/); return aResult;},
110 function(aResult) {Clipperz.log("FAIL " + message + "-->"/*, aResult*/); return aResult;} 112 function(aResult) {console.log("-OK- " + message + "-->"/*, aResult*/); return aResult;},
113 //function(aResult) {Clipperz.log("FAIL " + message + "-->"/*, aResult*/); return aResult;}
114 function(aResult) {console.log("FAIL " + message + "-->"/*, aResult*/); return aResult;}
111 ); 115 );
112 } 116 }
113 117
114 Clipperz.Async.Deferred.superclass.addCallback.apply(this, arguments); 118 Clipperz.Async.Deferred.superclass.addCallback.apply(this, arguments);
115 119
116 if (this._shouldTrace) { 120 if (this._shouldTrace) {
117 // this.addBoth(function(aResult) {Clipperz.log(message + "<--", aResult); return aResult;}); 121 // this.addBoth(function(aResult) {Clipperz.log(message + "<--", aResult); return aResult;});
118 this.addCallbacks( 122 this.addCallbacks(
119 function(aResult) {Clipperz.log("-OK- " + message + "<--", aResult); return aResult;}, 123 //function(aResult) {Clipperz.log("-OK- " + message + "<--", aResult); return aResult;},
120 function(aResult) {Clipperz.log("FAIL " + message + "<--", aResult); return aResult;} 124 function(aResult) {console.log("-OK- " + message + "<--", aResult); return aResult;},
125 //function(aResult) {Clipperz.log("FAIL " + message + "<--", aResult); return aResult;}
126 function(aResult) {console.log("FAIL " + message + "<--", aResult); return aResult;}
121 ); 127 );
122 } 128 }
123 }, 129 },
124 130
125 //============================================================================= 131 //=============================================================================
126 132
127 'addCallbackPass': function() { 133 'addCallbackPass': function() {
128 var passFunction; 134 var passFunction;
129 135
130 passFunction = MochiKit.Base.partial.apply(null, arguments); 136 passFunction = MochiKit.Base.partial.apply(null, arguments);
131 137
132 this.addCallback(function() { 138 this.addCallback(function() {
133 var result; 139 var result;
134 140
135 result = arguments[arguments.length -1]; 141 result = arguments[arguments.length -1];
136 passFunction(); 142 passFunction();
137 143
138 return result; 144 return result;
139 }); 145 });
140 }, 146 },
141 147
142 //----------------------------------------------------------------------------- 148 //-----------------------------------------------------------------------------
143 149
144 'addErrbackPass': function() { 150 'addErrbackPass': function() {
145 var passFunction; 151 var passFunction;
146 152
147 passFunction = MochiKit.Base.partial.apply(null, arguments); 153 passFunction = MochiKit.Base.partial.apply(null, arguments);
148 154
149 this.addErrback(function() { 155 this.addErrback(function() {
150 var result; 156 var result;
151 157
152 result = arguments[arguments.length -1]; 158 result = arguments[arguments.length -1];
153 passFunction(); 159 passFunction();
154 160
155 return result; 161 return result;
156 }); 162 });
157 }, 163 },
158 164
159 //----------------------------------------------------------------------------- 165 //-----------------------------------------------------------------------------
160 166
161 'addBothPass': function() { 167 'addBothPass': function() {
162 var passFunction; 168 var passFunction;
163 169
164 passFunction = MochiKit.Base.partial.apply(null, arguments); 170 passFunction = MochiKit.Base.partial.apply(null, arguments);
165 171
166 this.addBoth(function() { 172 this.addBoth(function() {
167 var result; 173 var result;
168 174
169 result = arguments[arguments.length -1]; 175 result = arguments[arguments.length -1];
170 passFunction(); 176 passFunction();
171 177
172 return result; 178 return result;
173 }); 179 });
174 }, 180 },
175 181
176 //----------------------------------------------------------------------------- 182 //-----------------------------------------------------------------------------
177 183
178 'addIf': function (aThenBlock, anElseBlock) { 184 'addIf': function (aThenBlock, anElseBlock) {
179 this.addCallback(MochiKit.Base.bind(function (aValue) { 185 this.addCallback(MochiKit.Base.bind(function (aValue) {
180 var deferredResult; 186 var deferredResult;
181 187
182 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) { 188 if (!MochiKit.Base.isUndefinedOrNull(aValue) && aValue) {
183 deferredResult = Clipperz.Async.callbacks(this._name + " <then>", aThenBlock, null, aValue); 189 deferredResult = Clipperz.Async.callbacks(this._name + " <then>", aThenBlock, null, aValue);
184 } else { 190 } else {
185 deferredResult = Clipperz.Async.callbacks(this._name + " <else>", anElseBlock, null, aValue); 191 deferredResult = Clipperz.Async.callbacks(this._name + " <else>", anElseBlock, null, aValue);
186 } 192 }
187 193
188 return deferredResult; 194 return deferredResult;
189 })) 195 }))
190 }, 196 },
191 197
192 //----------------------------------------------------------------------------- 198 //-----------------------------------------------------------------------------
193 199
194 'addMethod': function () { 200 'addMethod': function () {
195 this.addCallback(MochiKit.Base.method.apply(this, arguments)); 201 this.addCallback(MochiKit.Base.method.apply(this, arguments));
196 }, 202 },
197 203
198 //----------------------------------------------------------------------------- 204 //-----------------------------------------------------------------------------
199 205
200 'addMethodcaller': function () { 206 'addMethodcaller': function () {
201 this.addCallback(MochiKit.Base.methodcaller.apply(this, arguments)); 207 this.addCallback(MochiKit.Base.methodcaller.apply(this, arguments));
202 }, 208 },
203 209
204 //============================================================================= 210 //=============================================================================
205 211
206 'addLog': function (aLog) { 212 'addLog': function (aLog) {
207 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) { 213 if (CLIPPERZ_DEFERRED_LOGGING_ENABLED) {
208 this.addBothPass(function(res) {Clipperz.log(aLog + " ", res);}); 214 this.addBothPass(function(res) {Clipperz.log(aLog + " ", res);});
209 // this.addBothPass(function(res) {console.log(aLog + " ", res);}); 215 // this.addBothPass(function(res) {console.log(aLog + " ", res);});
210 } 216 }
211 }, 217 },
212 218
213 //============================================================================= 219 //=============================================================================
214 220
215 'acquireLock': function (aLock) { 221 'acquireLock': function (aLock) {
216 // this.addCallback(function (aResult) { 222 // this.addCallback(function (aResult) {
@@ -313,192 +319,193 @@ Clipperz.Async.DeferredSynchronizer = function(aName, someMethods) {
313 result = MochiKit.Async.fail(someResults); 319 result = MochiKit.Async.fail(someResults);
314 } 320 }
315 } else { 321 } else {
316 result = MochiKit.Async.fail(cancels[0]); 322 result = MochiKit.Async.fail(cancels[0]);
317 } 323 }
318 324
319 return result; 325 return result;
320 }/*, this._methodResults */); 326 }/*, this._methodResults */);
321 327
322 return this; 328 return this;
323} 329}
324 330
325MochiKit.Base.update(Clipperz.Async.DeferredSynchronizer.prototype, { 331MochiKit.Base.update(Clipperz.Async.DeferredSynchronizer.prototype, {
326 332
327 //----------------------------------------------------------------------------- 333 //-----------------------------------------------------------------------------
328 334
329 'name': function() { 335 'name': function() {
330 return this._name; 336 return this._name;
331 }, 337 },
332 338
333 //----------------------------------------------------------------------------- 339 //-----------------------------------------------------------------------------
334 340
335 'methods': function() { 341 'methods': function() {
336 return this._methods; 342 return this._methods;
337 }, 343 },
338 344
339 'methodResults': function() { 345 'methodResults': function() {
340 return this._methodResults; 346 return this._methodResults;
341 }, 347 },
342 348
343 //----------------------------------------------------------------------------- 349 //-----------------------------------------------------------------------------
344 350
345 'result': function() { 351 'result': function() {
346 return this._result; 352 return this._result;
347 }, 353 },
348 354
349 //----------------------------------------------------------------------------- 355 //-----------------------------------------------------------------------------
350 356
351 'numberOfMethodsDone':function() { 357 'numberOfMethodsDone':function() {
352 return this._numberOfMethodsDone; 358 return this._numberOfMethodsDone;
353 }, 359 },
354 360
355 'incrementNumberOfMethodsDone': function() { 361 'incrementNumberOfMethodsDone': function() {
356 this._numberOfMethodsDone ++; 362 this._numberOfMethodsDone ++;
357 }, 363 },
358 364
359 //----------------------------------------------------------------------------- 365 //-----------------------------------------------------------------------------
360 366
361 'run': function(args, aValue) { 367 'run': function(args, aValue) {
362 var deferredResults; 368 var deferredResults;
363 var i, c; 369 var i, c;
364 370
365 deferredResults = []; 371 deferredResults = [];
366 args = args || {}; 372 args = args || {};
367 373
368 c = this.methods().length; 374 c = this.methods().length;
369 for (i=0; i<c; i++) { 375 for (i=0; i<c; i++) {
370 var deferredResult; 376 var deferredResult;
371 varmethodCalls; 377 varmethodCalls;
372 var ii, cc; 378 var ii, cc;
373 379
374//console.log("TYPEOF", typeof(this.methods()[i])); 380//console.log("TYPEOF", typeof(this.methods()[i]));
375 if (typeof(this.methods()[i]) == 'function') { 381 if (typeof(this.methods()[i]) == 'function') {
376 methodCalls = [ this.methods()[i] ]; 382 methodCalls = [ this.methods()[i] ];
377 } else { 383 } else {
378 methodCalls = this.methods()[i]; 384 methodCalls = this.methods()[i];
379 } 385 }
380 386
381 cc = methodCalls.length; 387 cc = methodCalls.length;
382 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer.run => " + this.name() + "[" + i + "]", args); 388 deferredResult = new Clipperz.Async.Deferred("Clipperz.Async.DeferredSynchronizer.run => " + this.name() + "[" + i + "]", args);
383 for (ii=0; ii<cc; ii++) { 389 for (ii=0; ii<cc; ii++) {
384 deferredResult.addCallback(methodCalls[ii]); 390 deferredResult.addCallback(methodCalls[ii]);
385 } 391 }
386 deferredResult.addBoth(MochiKit.Base.method(this, 'handleMethodCallDone', i)); 392 deferredResult.addBoth(MochiKit.Base.method(this, 'handleMethodCallDone', i));
387 393
388 deferredResults.push(deferredResult); 394 deferredResults.push(deferredResult);
389 } 395 }
390 396
391 for (i=0; i<c; i++) { 397 for (i=0; i<c; i++) {
392 deferredResults[i].callback(aValue); 398 deferredResults[i].callback(aValue);
393 } 399 }
394 400
395 return this.result(); 401 return this.result();
396 }, 402 },
397 403
398 //----------------------------------------------------------------------------- 404 //-----------------------------------------------------------------------------
399 405
400 'handleMethodCallDone': function(anIndexValue, aResult) { 406 'handleMethodCallDone': function(anIndexValue, aResult) {
401 this.incrementNumberOfMethodsDone(); 407 this.incrementNumberOfMethodsDone();
402 this.methodResults()[anIndexValue] = aResult; 408 this.methodResults()[anIndexValue] = aResult;
403 409
404 if (this.numberOfMethodsDone() < this.methods().length) { 410 if (this.numberOfMethodsDone() < this.methods().length) {
405 //nothing to do here other than possibly log something 411 //nothing to do here other than possibly log something
406 } else if (this.numberOfMethodsDone() == this.methods().length) { 412 } else if (this.numberOfMethodsDone() == this.methods().length) {
407 this.result().callback(); 413 this.result().callback();
408 } else if (this.numberOfMethodsDone() > this.methods().length) { 414 } else if (this.numberOfMethodsDone() > this.methods().length) {
415 alert("Clipperz.Async.Deferred.handleMethodCallDone -> WTF!");
409 //WTF!!! :( 416 //WTF!!! :(
410 } 417 }
411 418
412 }, 419 },
413 420
414 //----------------------------------------------------------------------------- 421 //-----------------------------------------------------------------------------
415 422
416 __syntaxFix__: "syntax fix" 423 __syntaxFix__: "syntax fix"
417}); 424});
418 425
419//############################################################################# 426//#############################################################################
420 427
421MochiKit.Base.update(Clipperz.Async, { 428MochiKit.Base.update(Clipperz.Async, {
422 429
423 'callbacks': function (aName, someFunctions, someArguments, aCallbackValue) { 430 'callbacks': function (aName, someFunctions, someArguments, aCallbackValue) {
424 var deferredResult; 431 var deferredResult;
425 var i, c; 432 var i, c;
426 433
427 deferredResult = new Clipperz.Async.Deferred(aName, someArguments); 434 deferredResult = new Clipperz.Async.Deferred(aName, someArguments);
428 c = someFunctions.length; 435 c = someFunctions.length;
429 for (i=0; i<c; i++) { 436 for (i=0; i<c; i++) {
430 deferredResult.addCallback(someFunctions[i]); 437 deferredResult.addCallback(someFunctions[i]);
431 } 438 }
432 deferredResult.callback(aCallbackValue); 439 deferredResult.callback(aCallbackValue);
433 440
434 return deferredResult; 441 return deferredResult;
435 }, 442 },
436 443
437 //------------------------------------------------------------------------- 444 //-------------------------------------------------------------------------
438 445
439 'forkAndJoin': function (aName, someMethods, args) { 446 'forkAndJoin': function (aName, someMethods, args) {
440 return MochiKit.Base.partial(function (aName, someMethods, args, aValue) { 447 return MochiKit.Base.partial(function (aName, someMethods, args, aValue) {
441 var synchronizer; 448 var synchronizer;
442 varresult; 449 varresult;
443 450
444 args = args || {}; 451 args = args || {};
445 synchronizer = new Clipperz.Async.DeferredSynchronizer(aName, someMethods); 452 synchronizer = new Clipperz.Async.DeferredSynchronizer(aName, someMethods);
446 result = synchronizer.run(args, aValue); 453 result = synchronizer.run(args, aValue);
447 454
448 return result; 455 return result;
449 }, aName, someMethods, args); 456 }, aName, someMethods, args);
450 }, 457 },
451 458
452 //------------------------------------------------------------------------- 459 //-------------------------------------------------------------------------
453 460
454 'collectResults': function(aName, someRequests, args) { 461 'collectResults': function(aName, someRequests, args) {
455 return MochiKit.Base.partial(function(aName, someRequests, args, aValue) { 462 return MochiKit.Base.partial(function(aName, someRequests, args, aValue) {
456 var deferredResult; 463 var deferredResult;
457 var requestKeys; 464 var requestKeys;
458 var methods; 465 var methods;
459 466
460 requestKeys = MochiKit.Base.keys(someRequests); 467 requestKeys = MochiKit.Base.keys(someRequests);
461 methods = MochiKit.Base.values(someRequests); 468 methods = MochiKit.Base.values(someRequests);
462 469
463 deferredResult = new Clipperz.Async.Deferred(aName, args); 470 deferredResult = new Clipperz.Async.Deferred(aName, args);
464 deferredResult.addCallback(Clipperz.Async.forkAndJoin(aName + " [inner forkAndJoin]", methods, args)); 471 deferredResult.addCallback(Clipperz.Async.forkAndJoin(aName + " [inner forkAndJoin]", methods, args));
465 deferredResult.addBoth(function(someResults) { 472 deferredResult.addBoth(function(someResults) {
466 var returnFunction; 473 var returnFunction;
467 var results; 474 var results;
468 var i,c; 475 var i,c;
469 var result; 476 var result;
470 477
471 if (someResults instanceof MochiKit.Async.CancelledError) { 478 if (someResults instanceof MochiKit.Async.CancelledError) {
472 returnFunction = MochiKit.Async.fail; 479 returnFunction = MochiKit.Async.fail;
473 result = someResults; 480 result = someResults;
474 } else { 481 } else {
475 if (someResults instanceof Error) { 482 if (someResults instanceof Error) {
476 returnFunction = MochiKit.Async.fail; 483 returnFunction = MochiKit.Async.fail;
477 results = someResults['message']; 484 results = someResults['message'];
478 } else { 485 } else {
479 returnFunction = MochiKit.Async.succeed; 486 returnFunction = MochiKit.Async.succeed;
480 results = someResults; 487 results = someResults;
481 } 488 }
482 489
483 result = {}; 490 result = {};
484 491
485 c = requestKeys.length; 492 c = requestKeys.length;
486 for (i=0; i<c; i++) { 493 for (i=0; i<c; i++) {
487 result[requestKeys[i]] = results[i]; 494 result[requestKeys[i]] = results[i];
488 } 495 }
489 } 496 }
490 497
491 return returnFunction.call(null, result); 498 return returnFunction.call(null, result);
492 }); 499 });
493 deferredResult.callback(aValue); 500 deferredResult.callback(aValue);
494 501
495 return deferredResult; 502 return deferredResult;
496 }, aName, someRequests, args); 503 }, aName, someRequests, args);
497 }, 504 },
498 505
499 //------------------------------------------------------------------------- 506 //-------------------------------------------------------------------------
500 507
501 'collectAll': function (someDeferredObjects) { 508 'collectAll': function (someDeferredObjects) {
502 var deferredResult; 509 var deferredResult;
503 510
504 deferredResult = new MochiKit.Async.DeferredList(someDeferredObjects, false, false, false); 511 deferredResult = new MochiKit.Async.DeferredList(someDeferredObjects, false, false, false);
diff --git a/frontend/gamma/js/Clipperz/PM/Proxy.js b/frontend/gamma/js/Clipperz/PM/Proxy.js
index 190bffd..9817eac 100644
--- a/frontend/gamma/js/Clipperz/PM/Proxy.js
+++ b/frontend/gamma/js/Clipperz/PM/Proxy.js
@@ -49,121 +49,121 @@ Clipperz.PM.Proxy = function(args) {
49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { 49Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, {
50 50
51 'toString': function() { 51 'toString': function() {
52 return "Clipperz.PM.Proxy"; 52 return "Clipperz.PM.Proxy";
53 }, 53 },
54 54
55 //========================================================================= 55 //=========================================================================
56 56
57 'shouldPayTolls': function() { 57 'shouldPayTolls': function() {
58 return this._shouldPayTolls; 58 return this._shouldPayTolls;
59 }, 59 },
60 60
61 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
62 62
63 'tolls': function() { 63 'tolls': function() {
64 return this._tolls; 64 return this._tolls;
65 }, 65 },
66 66
67 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
68 68
69 'payToll': function(aRequestType, someParameters) { 69 'payToll': function(aRequestType, someParameters) {
70 vardeferredResult; 70 vardeferredResult;
71 71
72//console.log(">>> Proxy.payToll", aRequestType, someParameters); 72//console.log(">>> Proxy.payToll", aRequestType, someParameters);
73 if (this.shouldPayTolls()) { 73 if (this.shouldPayTolls()) {
74 deferredResult = new Clipperz.Async.Deferred("Proxy.payToll", {trace:false}); 74 deferredResult = new Clipperz.Async.Deferred("Proxy.payToll", {trace:false});
75 75
76 if (this.tolls()[aRequestType].length == 0) { 76 if (this.tolls()[aRequestType].length == 0) {
77 deferredResult.addMethod(this, 'sendMessage', 'knock', {requestType:aRequestType}); 77 deferredResult.addMethod(this, 'sendMessage', 'knock', {requestType:aRequestType});
78 deferredResult.addMethod(this, 'setTollCallback'); 78 deferredResult.addMethod(this, 'setTollCallback');
79 } 79 }
80 deferredResult.addMethod(this.tolls()[aRequestType], 'pop'); 80 deferredResult.addMethod(this.tolls()[aRequestType], 'pop');
81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); 81 deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay'));
82 deferredResult.addCallback(function(aToll) { 82 deferredResult.addCallback(function(aToll) {
83 var result; 83 var result;
84 84
85 result = { 85 result = {
86 parameters: someParameters, 86 parameters: someParameters,
87 toll: aToll 87 toll: aToll
88 } 88 }
89 89
90 return result; 90 return result;
91 }); 91 });
92 92
93 deferredResult.callback(); 93 deferredResult.callback();
94 } else { 94 } else {
95 deferredResult = MochiKit.Async.succeed({parameters:someParameters}); 95 deferredResult = MochiKit.Async.succeed({parameters:someParameters});
96 } 96 }
97//console.log("<<< Proxy.payToll"); 97//console.log("<<< Proxy.payToll");
98 98
99 return deferredResult; 99 return deferredResult;
100 }, 100 },
101 101
102 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
103 103
104 'addToll': function(aToll) { 104 'addToll': function(aToll) {
105//console.log(">>> Proxy.addToll", aToll); 105//console.log(">>> Proxy.addToll", aToll);
106 this.tolls()[aToll.requestType()].push(aToll); 106 this.tolls()[aToll.requestType()].push(aToll);
107//console.log("<<< Proxy.addToll"); 107//console.log("<<< Proxy.addToll");
108 }, 108 },
109 109
110 //========================================================================= 110 //=========================================================================
111 111
112 'setTollCallback': function(someParameters) { 112 'setTollCallback': function(someParameters) {
113//console.log(">>> Proxy.setTollCallback", someParameters); 113//console.log(">>> Proxy.setTollCallback", someParameters);
114 if (typeof(someParameters['toll']) != 'undefined') { 114 if (typeof(someParameters['toll']) != 'undefined') {
115//console.log("added a new toll", someParameters['toll']); 115//console.log("added a new toll", someParameters['toll']);
116 this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); 116 this.addToll(new Clipperz.PM.Toll(someParameters['toll']));
117 } 117 }
118//console.log("<<< Proxy.setTallCallback", someParameters['result']); 118//console.log("<<< Proxy.setTallCallback", someParameters['result']);
119 return someParameters['result']; 119 return someParameters['result'];
120 }, 120 },
121 121
122 //========================================================================= 122 //=========================================================================
123 123
124 'registration': function (someParameters) { 124 'registration': function (someParameters) {
125 return this.processMessage('registration', someParameters, 'REGISTER'); 125 return this.processMessage('registration', someParameters, 'REGISTER');
126 }, 126 },
127 127
128 'handshake': function (someParameters) { 128 'handshake': function (someParameters) {
129 return this.processMessage('handshake', someParameters, 'CONNECT'); 129 return this.processMessage('handshake', someParameters, 'CONNECT');
130 }, 130 },
131 131
132 'message': function (someParameters) { 132 'message': function (someParameters) {
133 return this.processMessage('message', someParameters, 'MESSAGE'); 133 return this.processMessage('message', someParameters, 'MESSAGE');
134 }, 134 },
135 135
136 'logout': function (someParameters) { 136 'logout': function (someParameters) {
137 return this.processMessage('logout', someParameters, 'MESSAGE'); 137 return this.processMessage('logout', someParameters, 'MESSAGE');
138 }, 138 },
139 139
140 //========================================================================= 140 //=========================================================================
141 141
142 'processMessage': function (aFunctionName, someParameters, aRequestType) { 142 'processMessage': function (aFunctionName, someParameters, aRequestType) {
143 vardeferredResult; 143 vardeferredResult;
144 144
145 deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:false}); 145 deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:true});
146 deferredResult.addMethod(this, 'payToll', aRequestType); 146 deferredResult.addMethod(this, 'payToll', aRequestType);
147 deferredResult.addMethod(this, 'sendMessage', aFunctionName); 147 deferredResult.addMethod(this, 'sendMessage', aFunctionName);
148 deferredResult.addMethod(this, 'setTollCallback'); 148 deferredResult.addMethod(this, 'setTollCallback');
149 deferredResult.callback(someParameters); 149 deferredResult.callback(someParameters);
150 150
151 return deferredResult; 151 return deferredResult;
152 }, 152 },
153 153
154 //========================================================================= 154 //=========================================================================
155 155
156 'sendMessage': function () { 156 'sendMessage': function () {
157 throw Clipperz.Base.exception.AbstractMethod; 157 throw Clipperz.Base.exception.AbstractMethod;
158 }, 158 },
159 159
160 //========================================================================= 160 //=========================================================================
161 161
162 'isReadOnly': function () { 162 'isReadOnly': function () {
163 return false; 163 return false;
164 }, 164 },
165 165
166 //========================================================================= 166 //=========================================================================
167 __syntaxFix__: "syntax fix" 167 __syntaxFix__: "syntax fix"
168 168
169}); 169});