Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js') (more/less context) (show whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js new file mode 100644 index 0000000..d88af41 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js @@ -0,0 +1,259 @@ +/* + +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/>. + +*/ + +Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); + +Clipperz.PM.UI.Web.Controllers.LoginController = function(args) { + this._args = args || {}; + + this._loginPage = null; + + this._newUserWizardController = null; + this._newUserCreationComponent = null; + + return this; +} + +MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, { + + 'toString': function() { + return "Clipperz.PM.UI.Web.Controllers.LoginController"; + }, + + 'args': function () { + return this._args; + }, + + //----------------------------------------------------------------------------- + + 'loginPage': function() { + if (this._loginPage == null) { + this._loginPage = new Clipperz.PM.UI.Web.Components.LoginPage(); + + MochiKit.Signal.connect(this._loginPage, 'createNewAccountClick', this, 'handleCreateNewAccountClick') + } + + return this._loginPage; + }, + + //----------------------------------------------------------------------------- + + 'run': function(args) { + var slot; + var loginPage; + var loginForm; + + slot = args.slot; + + loginForm = new Clipperz.PM.UI.Web.Components.LoginForm({'autocomplete': this.args()['autocomplete']}); + + slot.setContent(this.loginPage()); + this.loginPage().slotNamed('loginForm').setContent(loginForm); + + MochiKit.Signal.connect(loginForm, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); + }, + + //----------------------------------------------------------------------------- + + 'doLogin': function(aLoginForm, anEvent) { + var deferredResult; + var parameters; +// var shouldUseOTP; + var loginProgress; + var user; + var getPassphraseDelegate; + + parameters = anEvent; +// shouldUseOTP = (typeof(parameters.passphrase) == 'undefined'); + + getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase); + user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'getPassphrase')}); + + loginProgress = new Clipperz.PM.UI.Web.Components.LoginProgress(); + + deferredResult = new Clipperz.Async.Deferred("LoginController.doLogin", {trace:false}); + deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); + deferredResult.addMethod(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', getPassphraseDelegate); + deferredResult.addMethod(loginProgress, 'deferredShowModal', {deferredObject:deferredResult, openFromElement:aLoginForm.submitButtonElement()}); + deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); +// if (shouldUseOTP == false) { + deferredResult.addMethod(user, 'login'); +// } else { +// deferredResult.addMethod(user, 'loginUsingOTP', parameters.username, parameters.otp); +// } + deferredResult.addCallback(function(aLoginProgress, res) { + aLoginProgress.disableCancel(); + return res; + }, loginProgress); + deferredResult.addCallback(function () { + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN', MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:MochiKit.DOM.currentDocument().body})); + }) + deferredResult.addMethod(this, 'userLoggedIn', user, loginProgress, aLoginForm); + deferredResult.addErrback (MochiKit.Base.method(this, 'handleFailedLogin', loginProgress)); + + deferredResult.addErrback (MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:aLoginForm.submitButtonElement()})); + deferredResult.addErrbackPass (MochiKit.Base.method(aLoginForm, 'focusOnPassphraseField')); + deferredResult.addBoth(MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'removePassphraseDelegate', getPassphraseDelegate)); + deferredResult.callback(); + + MochiKit.Signal.connect(loginProgress, 'cancelEvent', deferredResult, 'cancel'); + + return deferredResult; + }, + + //----------------------------------------------------------------------------- + + 'userLoggedIn': function(aUser) { +//Clipperz.log(">>> LoginController.userLoggedIn"); + MochiKit.Signal.signal(this, 'userLoggedIn', {user: aUser}); +//Clipperz.log("<<< LoginController.userLoggedIn"); + }, + + //========================================================================= + + 'handleCreateNewAccountClick': function (aComponent) { +// return Clipperz.PM.DataModel.User.registerNewAccount("new", "user"); + return Clipperz.Async.callbacks("LoginController.handleCreateNewAccountClick", [ +//' MochiKit.Base.method(this, 'newUserCreationComponent'), +// MochiKit.Base.methodcaller('deferredShowModal', {openFromElement:aComponent}), +// MochiKit.Base.method(this.newUserWizardController(), 'run') + + + MochiKit.Base.method(this, 'newUserCreationComponent'), + Clipperz.Async.forkAndJoin("Async.test succeedingForkedAndWaitDeferrer", [ + MochiKit.Base.method(this.newUserCreationComponent(), 'deferredShowModal', {openFromElement:aComponent, duration:0.5}), + MochiKit.Base.method(this.newUserWizardController(), 'run') + ], {trace:false}), +// MochiKit.Base.method(this.newUserCreationComponent(), 'enableCredentialsField') + ], {trace:false}); + }, + + //----------------------------------------------------------------------------- + + 'newUserWizardController': function () { + if (this._newUserWizardController == null) { + this._newUserWizardController = new Clipperz.PM.UI.Web.Controllers.NewUserWizardController({ + 'newUserCreationComponent': this.newUserCreationComponent() + }) + +// MochiKit.Signal.connect(this._newUserWizardController, 'exit', this, 'handleHideNewUserCreationComponent'); + MochiKit.Signal.connect(this._newUserWizardController, 'done', this, 'handleCompleteNewUserCreationComponent'); + } + + return this._newUserWizardController; + }, + + //------------------------------------------------------------------------- + + 'newUserCreationComponent': function () { + if (this._newUserCreationComponent == null) { + this._newUserCreationComponent = new Clipperz.PM.UI.Web.Components.NewUserCreationComponent(); + } + + return this._newUserCreationComponent; + }, + + 'clearNewUserCreationComponent': function () { + if (this._newUserCreationComponent != null) { + this._newUserCreationComponent.clear(); + } + this._newUserCreationComponent = null; + }, + + //------------------------------------------------------------------------- + + 'handleHideNewUserCreationComponent': function () { + this.clearNewUserCreationComponent(); + }, + + 'handleCompleteNewUserCreationComponent': function (someParameters) { + var deferredResult; + var user; + var newUserCreationComponent; + + user = someParameters.user; + newUserCreationComponent = this.newUserCreationComponent(); + MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN', MochiKit.Base.method(newUserCreationComponent, 'deferredHideModal', {closeToElement:MochiKit.DOM.currentDocument().body})), + + deferredResult = new Clipperz.Async.Deferred("LoginController.handleCompleteNewUserCreationComponent", {trace:false}); + + deferredResult.addCallbackList([ + MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'), + MochiKit.Base.method(user, 'login'), + MochiKit.Base.method(this, 'userLoggedIn', user), + MochiKit.Base.method(this, 'clearNewUserCreationComponent') + ]); + deferredResult.addErrback(function (aValue) { Clipperz.log("WTF!! Error doing the login after creating a new user" + aValue)}); + deferredResult.callback(); + + return deferredResult; + }, + + + //========================================================================= + + 'handleFailedLogin': function(aLoginProgress, anError) { + var result; + +//console.log("anError", anError); + if (anError instanceof MochiKit.Async.CancelledError) { + result = anError; + } else { + var deferredResult; + +MochiKit.Logging.logError("## MainController - FAILED LOGIN: " + anError); + deferredResult = new MochiKit.Async.Deferred(); + + aLoginProgress.showErrorMessage("failed login"); +// Clipperz.NotificationCenter.register(loginProgress, 'cancelEvent', deferredResult, 'callback'); + MochiKit.Signal.connect(aLoginProgress, 'cancelEvent', deferredResult, 'callback'); + deferredResult.addCallback(MochiKit.Async.fail, anError) + result = deferredResult; + } + + return result; + }, + + 'handleGenericError': function(anError) { + var result; + + if (anError instanceof MochiKit.Async.CancelledError) { + result = anError; + } else { +MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); +//console.log(anError); + result = new MochiKit.Async.CancelledError(anError); + } + + return result; + }, + + //----------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" +}); |