Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Side by Side Diff: chrome/browser/resources/gaia_auth/main.js

Issue 136573002: Retrieve the authenticated user's e-mail from GAIA during SAML login (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Authenticator class wraps the communications between Gaia and its host. 6 * Authenticator class wraps the communications between Gaia and its host.
7 */ 7 */
8 function Authenticator() { 8 function Authenticator() {
9 } 9 }
10 10
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 }); 207 });
208 }, 208 },
209 209
210 /** 210 /**
211 * Invoked when the background page sends 'onHostedPageLoaded' message. 211 * Invoked when the background page sends 'onHostedPageLoaded' message.
212 * @param {!Object} msg Details sent with the message. 212 * @param {!Object} msg Details sent with the message.
213 */ 213 */
214 onAuthPageLoaded_: function(msg) { 214 onAuthPageLoaded_: function(msg) {
215 var isSAMLPage = msg.url.indexOf(this.gaiaUrl_) != 0; 215 var isSAMLPage = msg.url.indexOf(this.gaiaUrl_) != 0;
216 216
217 // Set isSAMLFlow_ flag when a SAML page is loaded. The flag is sticky. 217 if (isSAMLPage && !this.isSAMLFlow_) {
218 if (isSAMLPage) 218 // GAIA redirected to a SAML login page. The credentials provided to this
219 // page will determine what user gets logged in. The credentials obtained
220 // from the GAIA login from are no longer relevant and can be discarded.
219 this.isSAMLFlow_ = true; 221 this.isSAMLFlow_ = true;
222 this.email_ = null;
223 this.password_ = null;
224 }
220 225
221 window.parent.postMessage({ 226 window.parent.postMessage({
222 'method': 'authPageLoaded', 227 'method': 'authPageLoaded',
223 'isSAML': this.isSAMLFlow_, 228 'isSAML': this.isSAMLFlow_,
224 'domain': extractDomain(msg.url) 229 'domain': extractDomain(msg.url)
225 }, this.parentPage_); 230 }, this.parentPage_);
226 }, 231 },
227 232
228 onLoginUILoaded: function() { 233 onLoginUILoaded: function() {
229 var msg = { 234 var msg = {
(...skipping 11 matching lines...) Expand all
241 } 246 }
242 this.loaded_ = true; 247 this.loaded_ = true;
243 }, 248 },
244 249
245 onConfirmLogin_: function() { 250 onConfirmLogin_: function() {
246 if (!this.isSAMLFlow_) { 251 if (!this.isSAMLFlow_) {
247 this.completeLogin(this.email_, this.password_); 252 this.completeLogin(this.email_, this.password_);
248 return; 253 return;
249 } 254 }
250 255
256 // Retrieve the e-mail address of the user who just authenticated from GAIA.
257 window.parent.postMessage({method: 'retrieveAuthenticatedUserEmail',
258 attemptToken: this.attemptToken_},
259 this.parentPage_);
260
251 this.samlSupportChannel_.sendWithCallback( 261 this.samlSupportChannel_.sendWithCallback(
252 {name: 'getScrapedPasswords'}, 262 {name: 'getScrapedPasswords'},
253 function(passwords) { 263 function(passwords) {
254 if (passwords.length == 0) { 264 if (passwords.length == 0) {
255 window.parent.postMessage( 265 window.parent.postMessage(
256 {method: 'noPassword', email: this.email_}, 266 {method: 'noPassword', email: this.email_},
257 this.parentPage_); 267 this.parentPage_);
258 } else { 268 } else {
259 window.parent.postMessage( 269 window.parent.postMessage(
260 {method: 'confirmPassword', email: this.email_}, 270 {method: 'confirmPassword', email: this.email_},
261 this.parentPage_); 271 this.parentPage_);
262 } 272 }
263 }.bind(this)); 273 }.bind(this));
264 }, 274 },
265 275
276 maybeCompleteSAMLLogin_: function() {
277 // SAML login is complete when the user's e-mail address has been retrieved
278 // from GAIA and the user has successfully confirmed the password.
279 if (this.email_ !== null && this.password_ !== null)
280 this.completeLogin(this.email_, this.password_);
281 },
282
266 onVerifyConfirmedPassword_: function(password) { 283 onVerifyConfirmedPassword_: function(password) {
267 this.samlSupportChannel_.sendWithCallback( 284 this.samlSupportChannel_.sendWithCallback(
268 {name: 'getScrapedPasswords'}, 285 {name: 'getScrapedPasswords'},
269 function(passwords) { 286 function(passwords) {
270 for (var i = 0; i < passwords.length; ++i) { 287 for (var i = 0; i < passwords.length; ++i) {
271 if (passwords[i] == password) { 288 if (passwords[i] == password) {
272 this.completeLogin(this.email_, passwords[i]); 289 this.password_ = passwords[i];
290 this.maybeCompleteSAMLLogin_();
273 return; 291 return;
274 } 292 }
275 } 293 }
276 window.parent.postMessage( 294 window.parent.postMessage(
277 {method: 'confirmPassword', email: this.email_}, 295 {method: 'confirmPassword', email: this.email_},
278 this.parentPage_); 296 this.parentPage_);
279 }.bind(this)); 297 }.bind(this));
280 }, 298 },
281 299
282 onMessage: function(e) { 300 onMessage: function(e) {
283 var msg = e.data; 301 var msg = e.data;
284 if (msg.method == 'attemptLogin' && this.isGaiaMessage_(e)) { 302 if (msg.method == 'attemptLogin' && this.isGaiaMessage_(e)) {
285 this.email_ = msg.email; 303 this.email_ = msg.email;
286 this.password_ = msg.password; 304 this.password_ = msg.password;
287 this.attemptToken_ = msg.attemptToken; 305 this.attemptToken_ = msg.attemptToken;
288 this.isSAMLFlow_ = false; 306 this.isSAMLFlow_ = false;
289 if (this.samlSupportChannel_) 307 if (this.samlSupportChannel_)
290 this.samlSupportChannel_.send({name: 'startAuth'}); 308 this.samlSupportChannel_.send({name: 'startAuth'});
291 } else if (msg.method == 'clearOldAttempts' && this.isGaiaMessage_(e)) { 309 } else if (msg.method == 'clearOldAttempts' && this.isGaiaMessage_(e)) {
292 this.email_ = null; 310 this.email_ = null;
293 this.password_ = null; 311 this.password_ = null;
294 this.attemptToken_ = null; 312 this.attemptToken_ = null;
295 this.isSAMLFlow_ = false; 313 this.isSAMLFlow_ = false;
296 this.onLoginUILoaded(); 314 this.onLoginUILoaded();
297 if (this.samlSupportChannel_) 315 if (this.samlSupportChannel_)
298 this.samlSupportChannel_.send({name: 'resetAuth'}); 316 this.samlSupportChannel_.send({name: 'resetAuth'});
317 } else if (msg.method == 'setAuthenticatedUserEmail' &&
318 this.isParentMessage_(e)) {
319 if (this.attemptToken_ == msg.attemptToken) {
320 this.email_ = msg.email;
321 this.maybeCompleteSAMLLogin_();
322 }
299 } else if (msg.method == 'confirmLogin' && this.isInternalMessage_(e)) { 323 } else if (msg.method == 'confirmLogin' && this.isInternalMessage_(e)) {
300 if (this.attemptToken_ == msg.attemptToken) 324 if (this.attemptToken_ == msg.attemptToken)
301 this.onConfirmLogin_(); 325 this.onConfirmLogin_();
302 else 326 else
303 console.error('Authenticator.onMessage: unexpected attemptToken!?'); 327 console.error('Authenticator.onMessage: unexpected attemptToken!?');
304 } else if (msg.method == 'verifyConfirmedPassword' && 328 } else if (msg.method == 'verifyConfirmedPassword' &&
305 this.isParentMessage_(e)) { 329 this.isParentMessage_(e)) {
306 this.onVerifyConfirmedPassword_(msg.password); 330 this.onVerifyConfirmedPassword_(msg.password);
307 } else if (msg.method == 'navigate' && 331 } else if (msg.method == 'navigate' &&
308 this.isParentMessage_(e)) { 332 this.isParentMessage_(e)) {
309 $('gaia-frame').src = msg.src; 333 $('gaia-frame').src = msg.src;
310 } else if (msg.method == 'redirectToSignin' && 334 } else if (msg.method == 'redirectToSignin' &&
311 this.isParentMessage_(e)) { 335 this.isParentMessage_(e)) {
312 $('gaia-frame').src = this.constructInitialFrameUrl_(); 336 $('gaia-frame').src = this.constructInitialFrameUrl_();
313 } else { 337 } else {
314 console.error('Authenticator.onMessage: unknown message + origin!?'); 338 console.error('Authenticator.onMessage: unknown message + origin!?');
315 } 339 }
316 } 340 }
317 }; 341 };
318 342
319 Authenticator.getInstance().initialize(); 343 Authenticator.getInstance().initialize();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698