15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/** 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Authenticator class wraps the communications between Gaia and its host. 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function Authenticator() { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Gaia auth extension url origin. 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {string} 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)Authenticator.THIS_EXTENSION_ORIGIN = 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik'; 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/** 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * The lowest version of the credentials passing API supported. 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @type {number} 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)Authenticator.MIN_API_VERSION_VERSION = 1; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/** 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * The highest version of the credentials passing API supported. 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @type {number} 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)Authenticator.MAX_API_VERSION_VERSION = 1; 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/** 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * The key types supported by the credentials passing API. 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @type {Array} Array of strings. 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)Authenticator.API_KEY_TYPES = [ 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 'KEY_TYPE_PASSWORD_PLAIN', 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)]; 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/** 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Singleton getter of Authenticator. 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {Object} The singleton instance of Authenticator. 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Authenticator.getInstance = function() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!Authenticator.instance_) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Authenticator.instance_ = new Authenticator(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Authenticator.instance_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Authenticator.prototype = { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) email_: null, 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Depending on the key type chosen, this will contain the plain text password 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // or a credential derived from it along with the information required to 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // repeat the derivation, such as a salt. The information will be encoded so 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // that it contains printable ASCII characters only. The exact encoding is TBD 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // when support for key types other than plain text password is added. 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) passwordBytes_: null, 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attemptToken_: null, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Input params from extension initialization URL. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputLang_: undefined, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) intputEmail_: undefined, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) isSAMLFlow_: false, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) isSAMLEnabled_: false, 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) supportChannel_: null, 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GAIA_URL: 'https://accounts.google.com/', 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GAIA_PAGE_PATH: 'ServiceLogin?skipvpage=true&sarp=1&rm=hide', 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PARENT_PAGE: 'chrome://oobe/', 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SERVICE_ID: 'chromeoslogin', 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CONTINUE_URL: Authenticator.THIS_EXTENSION_ORIGIN + '/success.html', 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CONSTRAINED_FLOW_SOURCE: 'chrome', 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initialize: function() { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var params = getUrlSearchParams(location.search); 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.parentPage_ = params.parentPage || this.PARENT_PAGE; 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.gaiaUrl_ = params.gaiaUrl || this.GAIA_URL; 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this.gaiaPath_ = params.gaiaPath || this.GAIA_PAGE_PATH; 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.inputLang_ = params.hl; 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.inputEmail_ = params.email; 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) this.service_ = params.service || this.SERVICE_ID; 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.continueUrl_ = params.continueUrl || this.CONTINUE_URL; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.desktopMode_ = params.desktopMode == '1'; 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isConstrainedWindow_ = params.constrained == '1'; 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) this.initialFrameUrl_ = params.frameUrl || this.constructInitialFrameUrl_(); 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) this.initialFrameUrlWithoutParams_ = stripParams(this.initialFrameUrl_); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) document.addEventListener('DOMContentLoaded', this.onPageLoad_.bind(this)); 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (!this.desktopMode_) { 92e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // SAML is always enabled in desktop mode, thus no need to listen for 93e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // enableSAML event. 94e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch document.addEventListener('enableSAML', this.onEnableSAML_.bind(this)); 95e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isGaiaMessage_: function(msg) { 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Not quite right, but good enough. 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return this.gaiaUrl_.indexOf(msg.origin) == 0 || 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.GAIA_URL.indexOf(msg.origin) == 0; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isInternalMessage_: function(msg) { 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return msg.origin == Authenticator.THIS_EXTENSION_ORIGIN; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) isParentMessage_: function(msg) { 109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return msg.origin == this.parentPage_; 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) constructInitialFrameUrl_: function() { 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var url = this.gaiaUrl_ + this.gaiaPath_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url = appendParam(url, 'service', this.service_); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url = appendParam(url, 'continue', this.continueUrl_); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.inputLang_) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url = appendParam(url, 'hl', this.inputLang_); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.inputEmail_) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url = appendParam(url, 'Email', this.inputEmail_); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.isConstrainedWindow_) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url = appendParam(url, 'source', this.CONSTRAINED_FLOW_SOURCE); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) onPageLoad_: function() { 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.addEventListener('message', this.onMessage.bind(this), false); 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var gaiaFrame = $('gaia-frame'); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gaiaFrame.src = this.initialFrameUrl_; 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.desktopMode_) { 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var handler = function() { 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onLoginUILoaded_(); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gaiaFrame.removeEventListener('load', handler); 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.initDesktopChannel_(); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }.bind(this); 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gaiaFrame.addEventListener('load', handler); 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) initDesktopChannel_: function() { 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_ = new Channel(); 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_.connect('authMain'); 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) var channelConnected = false; 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_.registerMessage('channelConnected', function() { 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) channelConnected = true; 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_.send({ 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) name: 'initDesktopFlow', 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gaiaUrl: this.gaiaUrl_, 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) continueUrl: stripParams(this.continueUrl_), 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) isConstrainedWindow: this.isConstrainedWindow_ 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }); 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_.registerMessage( 158e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 'switchToFullTab', this.switchToFullTab_.bind(this)); 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.supportChannel_.registerMessage( 160e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 'completeLogin', this.completeLogin_.bind(this)); 161e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 162e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch this.onEnableSAML_(); 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }.bind(this)); 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.setTimeout(function() { 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!channelConnected) { 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Re-initialize the channel if it is not connected properly, e.g. 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // connect may be called before background script started running. 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this.initDesktopChannel_(); 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }.bind(this), 200); 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }, 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) /** 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Invoked when the login UI is initialized or reset. 176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */ 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) onLoginUILoaded_: function() { 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) var msg = { 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'method': 'loginUILoaded' 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) window.parent.postMessage(msg, this.parentPage_); 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }, 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Invoked when the background script sends a message to indicate that the 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * current content does not fit in a constrained window. 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Object=} opt_extraMsg Optional extra info to send. 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switchToFullTab_: function(msg) { 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var parentMsg = { 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'method': 'switchToFullTab', 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'url': msg.url 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.parent.postMessage(parentMsg, this.parentPage_); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Invoked when the signin flow is complete. 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Object=} opt_extraMsg Optional extra info to send. 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) completeLogin_: function(opt_extraMsg) { 202d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var msg = { 203d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 'method': 'completeLogin', 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'email': (opt_extraMsg && opt_extraMsg.email) || this.email_, 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 'password': (opt_extraMsg && opt_extraMsg.password) || 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.passwordBytes_, 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'usingSAML': this.isSAMLFlow_, 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'chooseWhatToSync': this.chooseWhatToSync_ || false, 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'skipForNow': opt_extraMsg && opt_extraMsg.skipForNow, 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'sessionIndex': opt_extraMsg && opt_extraMsg.sessionIndex 211d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }; 212d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) window.parent.postMessage(msg, this.parentPage_); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.isSAMLEnabled_) 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.send({name: 'resetAuth'}); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 218e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch * Invoked when 'enableSAML' event is received to initialize SAML support on 219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Chrome OS, or when initDesktopChannel_ is called on desktop. 220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) onEnableSAML_: function() { 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isSAMLEnabled_ = true; 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isSAMLFlow_ = false; 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!this.supportChannel_) { 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_ = new Channel(); 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.connect('authMain'); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 229d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.registerMessage( 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 'onAuthPageLoaded', this.onAuthPageLoaded_.bind(this)); 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.registerMessage( 233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 'onInsecureContentBlocked', this.onInsecureContentBlocked_.bind(this)); 234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this.supportChannel_.registerMessage( 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'apiCall', this.onAPICall_.bind(this)); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.send({ 237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) name: 'setGaiaUrl', 238d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gaiaUrl: this.gaiaUrl_ 239d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }); 240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!this.desktopMode_ && this.gaiaUrl_.indexOf('https://') == 0) { 241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Abort the login flow when content served over an unencrypted connection 242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // is detected on Chrome OS. This does not apply to tests that explicitly 243c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // set a non-https GAIA URL and want to perform all authentication over 244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // http. 245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this.supportChannel_.send({ 246c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch name: 'setBlockInsecureContent', 247c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blockInsecureContent: true 248c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }); 249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 251d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Invoked when the background page sends 'onHostedPageLoaded' message. 254d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @param {!Object} msg Details sent with the message. 255d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 256d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) onAuthPageLoaded_: function(msg) { 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var isSAMLPage = msg.url.indexOf(this.gaiaUrl_) != 0; 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (isSAMLPage && !this.isSAMLFlow_) { 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // GAIA redirected to a SAML login page. The credentials provided to this 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // page will determine what user gets logged in. The credentials obtained 262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // from the GAIA login form are no longer relevant and can be discarded. 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isSAMLFlow_ = true; 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.email_ = null; 265010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.passwordBytes_ = null; 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 268d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) window.parent.postMessage({ 269d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 'method': 'authPageLoaded', 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'isSAML': this.isSAMLFlow_, 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'domain': extractDomain(msg.url) 272d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, this.parentPage_); 273d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 274d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Invoked when the background page sends an 'onInsecureContentBlocked' 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * message. 278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @param {!Object} msg Details sent with the message. 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) onInsecureContentBlocked_: function(msg) { 281010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) window.parent.postMessage({ 282010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 'method': 'insecureContentBlocked', 283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 'url': stripParams(msg.url) 284010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }, this.parentPage_); 285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 287c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Invoked when one of the credential passing API methods is called by a SAML 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * provider. 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} msg Details of the API call. 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) onAPICall_: function(msg) { 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var call = msg.call; 294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (call.method == 'initialize') { 295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!Number.isInteger(call.requestedVersion) || 296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) call.requestedVersion < Authenticator.MIN_API_VERSION_VERSION) { 297010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.sendInitializationFailure_(); 298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 300010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 301010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.apiVersion_ = Math.min(call.requestedVersion, 302010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Authenticator.MAX_API_VERSION_VERSION); 303010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.initialized_ = true; 304010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.sendInitializationSuccess_(); 305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 307010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (call.method == 'add') { 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (Authenticator.API_KEY_TYPES.indexOf(call.keyType) == -1) { 310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) console.error('Authenticator.onAPICall_: unsupported key type'); 311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.apiToken_ = call.token; 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.email_ = call.user; 315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.passwordBytes_ = call.passwordBytes; 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (call.method == 'confirm') { 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (call.token != this.apiToken_) 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) console.error('Authenticator.onAPICall_: token mismatch'); 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) console.error('Authenticator.onAPICall_: unknown message'); 321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sendInitializationSuccess_: function() { 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.supportChannel_.send({name: 'apiResponse', response: { 326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) result: 'initialized', 327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) version: this.apiVersion_, 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) keyTypes: Authenticator.API_KEY_TYPES 329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }}); 330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }, 331010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sendInitializationFailure_: function() { 333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.supportChannel_.send({ 334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) name: 'apiResponse', 335010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) response: {result: 'initialization_failed'} 336010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }); 337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }, 338010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 339d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) onConfirmLogin_: function() { 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!this.isSAMLFlow_) { 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.completeLogin_(); 342d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 343d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 344d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) var apiUsed = !!this.passwordBytes_; 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Retrieve the e-mail address of the user who just authenticated from GAIA. 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.parent.postMessage({method: 'retrieveAuthenticatedUserEmail', 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) attemptToken: this.attemptToken_, 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) apiUsed: apiUsed}, 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.parentPage_); 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!apiUsed) { 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.sendWithCallback( 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {name: 'getScrapedPasswords'}, 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function(passwords) { 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (passwords.length == 0) { 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.parent.postMessage( 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {method: 'noPassword', email: this.email_}, 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.parentPage_); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.parent.postMessage({method: 'confirmPassword', 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) email: this.email_, 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) passwordCount: passwords.length}, 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.parentPage_); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }.bind(this)); 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) maybeCompleteSAMLLogin_: function() { 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // SAML login is complete when the user's e-mail address has been retrieved 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // from GAIA and the user has successfully confirmed the password. 374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (this.email_ !== null && this.passwordBytes_ !== null) 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.completeLogin_(); 376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) onVerifyConfirmedPassword_: function(password) { 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.sendWithCallback( 380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) {name: 'getScrapedPasswords'}, 381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) function(passwords) { 382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (var i = 0; i < passwords.length; ++i) { 383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (passwords[i] == password) { 384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.passwordBytes_ = passwords[i]; 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.maybeCompleteSAMLLogin_(); 386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) window.parent.postMessage( 390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {method: 'confirmPassword', email: this.email_}, 391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) this.parentPage_); 392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }.bind(this)); 393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onMessage: function(e) { 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var msg = e.data; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg.method == 'attemptLogin' && this.isGaiaMessage_(e)) { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.email_ = msg.email; 399010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.passwordBytes_ = msg.password; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.attemptToken_ = msg.attemptToken; 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.chooseWhatToSync_ = msg.chooseWhatToSync; 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isSAMLFlow_ = false; 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.isSAMLEnabled_) 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.send({name: 'startAuth'}); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (msg.method == 'clearOldAttempts' && this.isGaiaMessage_(e)) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.email_ = null; 407010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.passwordBytes_ = null; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.attemptToken_ = null; 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isSAMLFlow_ = false; 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onLoginUILoaded_(); 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.isSAMLEnabled_) 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.supportChannel_.send({name: 'resetAuth'}); 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (msg.method == 'setAuthenticatedUserEmail' && 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isParentMessage_(e)) { 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.attemptToken_ == msg.attemptToken) { 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.email_ = msg.email; 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.maybeCompleteSAMLLogin_(); 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (msg.method == 'confirmLogin' && this.isInternalMessage_(e)) { 420d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (this.attemptToken_ == msg.attemptToken) 421d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.onConfirmLogin_(); 422d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) else 423d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) console.error('Authenticator.onMessage: unexpected attemptToken!?'); 424d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else if (msg.method == 'verifyConfirmedPassword' && 425d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.isParentMessage_(e)) { 426d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.onVerifyConfirmedPassword_(msg.password); 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (msg.method == 'redirectToSignin' && 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.isParentMessage_(e)) { 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('gaia-frame').src = this.constructInitialFrameUrl_(); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) console.error('Authenticator.onMessage: unknown message + origin!?'); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Authenticator.getInstance().initialize(); 437