summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
Side-by-side diff
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js280
1 files changed, 280 insertions, 0 deletions
diff --git a/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
new file mode 100644
index 0000000..d90100a
--- a/dev/null
+++ b/frontend/beta/js/Clipperz/PM/DataModel/OneTimePasswordManager.js
@@ -0,0 +1,280 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library is distributed in the hope that it will
+ be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
+if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
+if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; }
+
+
+//#############################################################################
+
+Clipperz.PM.DataModel.OneTimePasswordManager = function(anUser, args) {
+ args = args || {};
+
+ this._user = anUser;
+ this._oneTimePasswords = {};
+
+ this.updateWithData(args);
+
+ Clipperz.NotificationCenter.notify(null, 'oneTimePasswordAdded', null, true);
+
+ return this;
+}
+
+Clipperz.PM.DataModel.OneTimePasswordManager.prototype = MochiKit.Base.update(null, {
+
+ 'toString': function() {
+ return "Clipperz.PM.DataModel.OneTimePasswordManager";
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'updateWithData': function(someValues) {
+ var otpReference;
+
+//console.log("OneTimePasswordManager.updateWithData", someValues);
+//MochiKit.Logging.logDebug("OneTimePasswordManager.updateWithData: " + Clipperz.Base.serializeJSON(someValues));
+ for (otpReference in someValues) {
+ var otp;
+ var otpConfiguration;
+
+ otpConfiguration = someValues[otpReference];
+ otpConfiguration['user'] = this.user();
+ otpConfiguration['reference'] = otpReference;
+ otp = new Clipperz.PM.DataModel.OneTimePassword(otpConfiguration);
+ this._oneTimePasswords[otpReference] = otp;
+ }
+
+ return this;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'updateWithServerData': function(someValues) {
+ var deferredResult;
+ var oneTimePasswordReference;
+ var wereChangesApplied;
+
+//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.updateWithServerData");
+ deferredResult = new MochiKit.Async.Deferred();
+ wereChangesApplied = false;
+
+ for (oneTimePasswordReference in someValues) {
+ var oneTimePassword;
+
+ oneTimePassword = this.oneTimePasswordWithReference(oneTimePasswordReference);
+ if (oneTimePassword != null) {
+ var oneTimePasswordHasBeenUpdated;
+
+ oneTimePasswordHasBeenUpdated = oneTimePassword.updateStatusWithValues(someValues[oneTimePasswordReference]);
+ wereChangesApplied = oneTimePasswordHasBeenUpdated || wereChangesApplied;
+ } else {
+
+ }
+ }
+
+ if (wereChangesApplied == true) {
+ this.user().header().markSectionAsUpdated('oneTimePasswords');
+ }
+
+ for (oneTimePasswordReference in this.oneTimePasswords()) {
+ if (typeof(someValues[oneTimePasswordReference]) == 'undefind') {
+ deferredResult.addCallback(MochiKit.Base.method(this.oneTimePasswordWithReference(oneTimePasswordReference), 'saveChanges'));
+ }
+ }
+
+ deferredResult.addCallback(MochiKit.Async.succeed, this);
+
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< OneTimePasswordManager.updateWithServerData");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'user': function() {
+ return this._user;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addOneTimePassword': function(aOneTimePassword, isBatchUpdate) {
+ this.oneTimePasswords()[aOneTimePassword.reference()] = aOneTimePassword;
+
+ if (isBatchUpdate != true) {
+ Clipperz.NotificationCenter.notify(aOneTimePassword, 'oneTimePasswordAdded');
+ Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'oneTimePasswords', true);
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'archiveOneTimePassword': function(aOneTimePasswordReference) {
+ var deferredResult;
+
+//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.archiveOneTimePassword");
+//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 0 otp.reference: " + aOneTimePasswordReference);
+ deferredResult = new MochiKit.Async.Deferred();
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'loadOneTimePasswords'));
+ deferredResult.addCallback(MochiKit.Base.bind(function(aOneTimePasswordReference) {
+ var oneTimePassword;
+
+//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 1 serializedData: " + Clipperz.Base.serializeJSON(this.serializedData()));
+ oneTimePassword = this.oneTimePasswords()[aOneTimePasswordReference];
+
+ if (oneTimePassword != null) {
+ oneTimePassword.setUsageDate(new Date());
+
+// while (this.usedOneTimePasswords().length > 10) {
+// var referenceOfOneTimePasswordToRemove;
+//
+// referenceOfOneTimePasswordToRemove = this.usedOneTimePasswords()[0];
+// delete this.oneTimePasswords()[referenceOfOneTimePasswordToRemove];
+// this.usedOneTimePasswords().shift();
+// }
+
+ Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'oneTimePasswords', true);
+ } else {
+ MochiKit.Logging.logError("### OneTimePasswordManager.archiveOneTimePassword - the used OneTimePassword has not been found on the index-card. :-(");
+ }
+
+//MochiKit.Logging.logDebug("--- OneTimePasswordManager.archiveOneTimePassword - 2 serializedData: " + Clipperz.Base.serializeJSON(this.serializedData()));
+ }, this), aOneTimePasswordReference);
+ deferredResult.addCallback(MochiKit.Base.method(this, 'saveChanges'));
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< OneTimePasswordManager.archiveOneTimePassword");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'serializedData': function() {
+ var result;
+ var key;
+
+ result = {};
+
+ for (key in this.oneTimePasswords()) {
+ result[key] = this.oneTimePasswords()[key].serializedData();
+ }
+
+ return result;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'oneTimePasswords': function() {
+ return this._oneTimePasswords;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'oneTimePasswordWithReference': function(aOneTimePasswordReference) {
+ return this.oneTimePasswords()[aOneTimePasswordReference];
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'deleteOneTimePasswordWithReference': function(aOneTimePasswordReference) {
+ delete(this.oneTimePasswords()[aOneTimePasswordReference]);
+ Clipperz.NotificationCenter.notify(this.user(), 'updatedSection', 'oneTimePasswords', true);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encryptedData': function() {
+ var deferredResult;
+ var oneTimePasswordReferences;
+ var result;
+ var i, c;
+
+ result = {};
+ deferredResult = new MochiKit.Async.Deferred();
+ deferredResult.addCallback(MochiKit.Async.succeed);
+
+ oneTimePasswordReferences = MochiKit.Base.keys(this.oneTimePasswords());
+ c = oneTimePasswordReferences.length;
+ for (i=0; i<c; i++) {
+ var currentOneTimePassword;
+
+ currentOneTimePassword = this.oneTimePasswords()[oneTimePasswordReferences[i]];
+ deferredResult.addCallback(MochiKit.Base.method(currentOneTimePassword, 'encryptedPackedPassphrase'));
+ deferredResult.addCallback(function(aResult, aOneTimePasswordReference, anEncryptedPackedPassphrase) {
+ aResult[aOneTimePasswordReference] = anEncryptedPackedPassphrase;
+ return aResult;
+ }, result, oneTimePasswordReferences[i]);
+ }
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OneTimePasswordManager.encryptedData: " + res); return res;});
+
+ deferredResult.callback(result);
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'saveChanges': function() {
+ var deferredResult;
+ var result;
+
+//MochiKit.Logging.logDebug(">>> OneTimePasswordManager.saveChanges");
+ result = {};
+ deferredResult = new MochiKit.Async.Deferred();
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveOTP_encryptUserData');
+ deferredResult.addCallback(MochiKit.Base.method(this.user(), 'encryptedData'));
+ deferredResult.addCallback(function(aResult, res) {
+ aResult['user'] = res;
+ return aResult;
+ }, result);
+
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveOTP_encryptOTPData');
+ deferredResult.addCallback(MochiKit.Base.bind(function(res) {
+ res['oneTimePasswords'] = MochiKit.Base.keys(this.oneTimePasswords());
+ return res;
+ }, this));
+
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveOTP_sendingData');
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OneTimePasswordManager.saveChanges - 1: " + Clipperz.Base.serializeJSON(res)); return res;});
+ deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'updateOneTimePasswords');
+
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'saveOTP_updatingInterface');
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OneTimePasswordManager.saveChanges - 2: " + res); return res;});
+ deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'notify', 'OTPUpdated');
+//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("OneTimePasswordManager.saveChanges - 3: " + res); return res;});
+ deferredResult.callback();
+//MochiKit.Logging.logDebug("<<< OneTimePasswordManager.saveChanges");
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+});
+