Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js') (more/less context) (ignore 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 @@ | |||
1 | /* | ||
2 | |||
3 | Copyright 2008-2011 Clipperz Srl | ||
4 | |||
5 | This file is part of Clipperz's Javascript Crypto Library. | ||
6 | Javascript Crypto Library provides web developers with an extensive | ||
7 | and efficient set of cryptographic functions. The library aims to | ||
8 | obtain maximum execution speed while preserving modularity and | ||
9 | reusability. | ||
10 | For further information about its features and functionalities please | ||
11 | refer to http://www.clipperz.com | ||
12 | |||
13 | * Javascript Crypto Library is free software: you can redistribute | ||
14 | it and/or modify it under the terms of the GNU Affero General Public | ||
15 | License as published by the Free Software Foundation, either version | ||
16 | 3 of the License, or (at your option) any later version. | ||
17 | |||
18 | * Javascript Crypto Library is distributed in the hope that it will | ||
19 | be useful, but WITHOUT ANY WARRANTY; without even the implied | ||
20 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
21 | See the GNU Affero General Public License for more details. | ||
22 | |||
23 | * You should have received a copy of the GNU Affero General Public | ||
24 | License along with Javascript Crypto Library. If not, see | ||
25 | <http://www.gnu.org/licenses/>. | ||
26 | |||
27 | */ | ||
28 | |||
29 | Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); | ||
30 | |||
31 | Clipperz.PM.UI.Web.Controllers.LoginController = function(args) { | ||
32 | this._args = args || {}; | ||
33 | |||
34 | this._loginPage = null; | ||
35 | |||
36 | this._newUserWizardController = null; | ||
37 | this._newUserCreationComponent = null; | ||
38 | |||
39 | return this; | ||
40 | } | ||
41 | |||
42 | MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, { | ||
43 | |||
44 | 'toString': function() { | ||
45 | return "Clipperz.PM.UI.Web.Controllers.LoginController"; | ||
46 | }, | ||
47 | |||
48 | 'args': function () { | ||
49 | return this._args; | ||
50 | }, | ||
51 | |||
52 | //----------------------------------------------------------------------------- | ||
53 | |||
54 | 'loginPage': function() { | ||
55 | if (this._loginPage == null) { | ||
56 | this._loginPage = new Clipperz.PM.UI.Web.Components.LoginPage(); | ||
57 | |||
58 | MochiKit.Signal.connect(this._loginPage, 'createNewAccountClick', this, 'handleCreateNewAccountClick') | ||
59 | } | ||
60 | |||
61 | return this._loginPage; | ||
62 | }, | ||
63 | |||
64 | //----------------------------------------------------------------------------- | ||
65 | |||
66 | 'run': function(args) { | ||
67 | varslot; | ||
68 | varloginPage; | ||
69 | varloginForm; | ||
70 | |||
71 | slot = args.slot; | ||
72 | |||
73 | loginForm =new Clipperz.PM.UI.Web.Components.LoginForm({'autocomplete': this.args()['autocomplete']}); | ||
74 | |||
75 | slot.setContent(this.loginPage()); | ||
76 | this.loginPage().slotNamed('loginForm').setContent(loginForm); | ||
77 | |||
78 | MochiKit.Signal.connect(loginForm, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); | ||
79 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); | ||
80 | }, | ||
81 | |||
82 | //----------------------------------------------------------------------------- | ||
83 | |||
84 | 'doLogin': function(aLoginForm, anEvent) { | ||
85 | var deferredResult; | ||
86 | varparameters; | ||
87 | // varshouldUseOTP; | ||
88 | var loginProgress; | ||
89 | varuser; | ||
90 | var getPassphraseDelegate; | ||
91 | |||
92 | parameters = anEvent; | ||
93 | // shouldUseOTP = (typeof(parameters.passphrase) == 'undefined'); | ||
94 | |||
95 | getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase); | ||
96 | user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'getPassphrase')}); | ||
97 | |||
98 | loginProgress = new Clipperz.PM.UI.Web.Components.LoginProgress(); | ||
99 | |||
100 | deferredResult = new Clipperz.Async.Deferred("LoginController.doLogin", {trace:false}); | ||
101 | deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); | ||
102 | deferredResult.addMethod(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', getPassphraseDelegate); | ||
103 | deferredResult.addMethod(loginProgress, 'deferredShowModal', {deferredObject:deferredResult, openFromElement:aLoginForm.submitButtonElement()}); | ||
104 | deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); | ||
105 | // if (shouldUseOTP == false) { | ||
106 | deferredResult.addMethod(user, 'login'); | ||
107 | // } else { | ||
108 | // deferredResult.addMethod(user, 'loginUsingOTP', parameters.username, parameters.otp); | ||
109 | // } | ||
110 | deferredResult.addCallback(function(aLoginProgress, res) { | ||
111 | aLoginProgress.disableCancel(); | ||
112 | return res; | ||
113 | }, loginProgress); | ||
114 | deferredResult.addCallback(function () { | ||
115 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:MochiKit.DOM.currentDocument().body})); | ||
116 | }) | ||
117 | deferredResult.addMethod(this, 'userLoggedIn', user, loginProgress, aLoginForm); | ||
118 | deferredResult.addErrback (MochiKit.Base.method(this, 'handleFailedLogin', loginProgress)); | ||
119 | |||
120 | deferredResult.addErrback (MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:aLoginForm.submitButtonElement()})); | ||
121 | deferredResult.addErrbackPass (MochiKit.Base.method(aLoginForm, 'focusOnPassphraseField')); | ||
122 | deferredResult.addBoth(MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'removePassphraseDelegate', getPassphraseDelegate)); | ||
123 | deferredResult.callback(); | ||
124 | |||
125 | MochiKit.Signal.connect(loginProgress, 'cancelEvent', deferredResult, 'cancel'); | ||
126 | |||
127 | return deferredResult; | ||
128 | }, | ||
129 | |||
130 | //----------------------------------------------------------------------------- | ||
131 | |||
132 | 'userLoggedIn': function(aUser) { | ||
133 | //Clipperz.log(">>> LoginController.userLoggedIn"); | ||
134 | MochiKit.Signal.signal(this, 'userLoggedIn', {user: aUser}); | ||
135 | //Clipperz.log("<<< LoginController.userLoggedIn"); | ||
136 | }, | ||
137 | |||
138 | //========================================================================= | ||
139 | |||
140 | 'handleCreateNewAccountClick': function (aComponent) { | ||
141 | // return Clipperz.PM.DataModel.User.registerNewAccount("new", "user"); | ||
142 | return Clipperz.Async.callbacks("LoginController.handleCreateNewAccountClick", [ | ||
143 | //' MochiKit.Base.method(this, 'newUserCreationComponent'), | ||
144 | // MochiKit.Base.methodcaller('deferredShowModal', {openFromElement:aComponent}), | ||
145 | // MochiKit.Base.method(this.newUserWizardController(), 'run') | ||
146 | |||
147 | |||
148 | MochiKit.Base.method(this, 'newUserCreationComponent'), | ||
149 | Clipperz.Async.forkAndJoin("Async.test succeedingForkedAndWaitDeferrer", [ | ||
150 | MochiKit.Base.method(this.newUserCreationComponent(), 'deferredShowModal', {openFromElement:aComponent, duration:0.5}), | ||
151 | MochiKit.Base.method(this.newUserWizardController(), 'run') | ||
152 | ], {trace:false}), | ||
153 | // MochiKit.Base.method(this.newUserCreationComponent(), 'enableCredentialsField') | ||
154 | ], {trace:false}); | ||
155 | }, | ||
156 | |||
157 | //----------------------------------------------------------------------------- | ||
158 | |||
159 | 'newUserWizardController': function () { | ||
160 | if (this._newUserWizardController == null) { | ||
161 | this._newUserWizardController = new Clipperz.PM.UI.Web.Controllers.NewUserWizardController({ | ||
162 | 'newUserCreationComponent': this.newUserCreationComponent() | ||
163 | }) | ||
164 | |||
165 | // MochiKit.Signal.connect(this._newUserWizardController, 'exit',this, 'handleHideNewUserCreationComponent'); | ||
166 | MochiKit.Signal.connect(this._newUserWizardController, 'done',this, 'handleCompleteNewUserCreationComponent'); | ||
167 | } | ||
168 | |||
169 | return this._newUserWizardController; | ||
170 | }, | ||
171 | |||
172 | //------------------------------------------------------------------------- | ||
173 | |||
174 | 'newUserCreationComponent': function () { | ||
175 | if (this._newUserCreationComponent == null) { | ||
176 | this._newUserCreationComponent = new Clipperz.PM.UI.Web.Components.NewUserCreationComponent(); | ||
177 | } | ||
178 | |||
179 | return this._newUserCreationComponent; | ||
180 | }, | ||
181 | |||
182 | 'clearNewUserCreationComponent': function () { | ||
183 | if (this._newUserCreationComponent != null) { | ||
184 | this._newUserCreationComponent.clear(); | ||
185 | } | ||
186 | this._newUserCreationComponent = null; | ||
187 | }, | ||
188 | |||
189 | //------------------------------------------------------------------------- | ||
190 | |||
191 | 'handleHideNewUserCreationComponent': function () { | ||
192 | this.clearNewUserCreationComponent(); | ||
193 | }, | ||
194 | |||
195 | 'handleCompleteNewUserCreationComponent': function (someParameters) { | ||
196 | vardeferredResult; | ||
197 | varuser; | ||
198 | varnewUserCreationComponent; | ||
199 | |||
200 | user = someParameters.user; | ||
201 | newUserCreationComponent = this.newUserCreationComponent(); | ||
202 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(newUserCreationComponent, 'deferredHideModal', {closeToElement:MochiKit.DOM.currentDocument().body})), | ||
203 | |||
204 | deferredResult = new Clipperz.Async.Deferred("LoginController.handleCompleteNewUserCreationComponent", {trace:false}); | ||
205 | |||
206 | deferredResult.addCallbackList([ | ||
207 | MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'), | ||
208 | MochiKit.Base.method(user, 'login'), | ||
209 | MochiKit.Base.method(this, 'userLoggedIn', user), | ||
210 | MochiKit.Base.method(this, 'clearNewUserCreationComponent') | ||
211 | ]); | ||
212 | deferredResult.addErrback(function (aValue) { Clipperz.log("WTF!! Error doing the login after creating a new user" + aValue)}); | ||
213 | deferredResult.callback(); | ||
214 | |||
215 | return deferredResult; | ||
216 | }, | ||
217 | |||
218 | |||
219 | //========================================================================= | ||
220 | |||
221 | 'handleFailedLogin': function(aLoginProgress, anError) { | ||
222 | var result; | ||
223 | |||
224 | //console.log("anError", anError); | ||
225 | if (anError instanceof MochiKit.Async.CancelledError) { | ||
226 | result = anError; | ||
227 | } else { | ||
228 | var deferredResult; | ||
229 | |||
230 | MochiKit.Logging.logError("## MainController - FAILED LOGIN: " + anError); | ||
231 | deferredResult = new MochiKit.Async.Deferred(); | ||
232 | |||
233 | aLoginProgress.showErrorMessage("failed login"); | ||
234 | // Clipperz.NotificationCenter.register(loginProgress, 'cancelEvent', deferredResult, 'callback'); | ||
235 | MochiKit.Signal.connect(aLoginProgress, 'cancelEvent', deferredResult, 'callback'); | ||
236 | deferredResult.addCallback(MochiKit.Async.fail, anError) | ||
237 | result = deferredResult; | ||
238 | } | ||
239 | |||
240 | return result; | ||
241 | }, | ||
242 | |||
243 | 'handleGenericError': function(anError) { | ||
244 | var result; | ||
245 | |||
246 | if (anError instanceof MochiKit.Async.CancelledError) { | ||
247 | result = anError; | ||
248 | } else { | ||
249 | MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); | ||
250 | //console.log(anError); | ||
251 | result = new MochiKit.Async.CancelledError(anError); | ||
252 | } | ||
253 | |||
254 | return result; | ||
255 | }, | ||
256 | |||
257 | //----------------------------------------------------------------------------- | ||
258 | __syntaxFix__: "syntax fix" | ||
259 | }); | ||