"use strict"; var CloudExperienceHost; (function (CloudExperienceHost) { var MSAUIHandlerInternal = (function () { function MSAUIHandlerInternal(appView, tokenOperation) { this._isWAMActivity = false; if (!CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().isStarted()) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().start("msa-wam"); this._isWAMActivity = true; } this._appView = appView; this._registerNgcOperation = null; this._tokenBrokerOperation = tokenOperation; WinJS.Namespace.define("CloudExperienceHost.MSAUIHandler", { saveAuthenticationState: this.saveAuthenticationState.bind(this), saveAuthStateAndCompleteWebFlow: this.saveAuthStateAndCompleteWebFlow.bind(this), getVerificationCode: this.getVerificationCode.bind(this), updateLogonCache: this.updateLogonCache.bind(this), completeWebFlow: this.completeWebFlow.bind(this) }); WinJS.Namespace.define("CloudExperienceHost.MSA", { saveAuthenticationState: this.saveAuthenticationState.bind(this) }); } MSAUIHandlerInternal.prototype.getTokenOperation = function () { return this._tokenBrokerOperation; }; MSAUIHandlerInternal.prototype._buildTicketRequest = function (target, policy, onComplete, onError) { var webFlowRequest; webFlowRequest = new MicrosoftAccount.TokenProvider.Core.PostTicketToUrlOperation(); webFlowRequest.url = target; webFlowRequest.policy = policy; webFlowRequest.onComplete = onComplete; webFlowRequest.onError = onError; webFlowRequest.isRequestTicketForUrlScenario = false; var tokenOperation; tokenOperation = new MicrosoftAccount.TokenProvider.Core.TokenBrokerOperation(); tokenOperation.isRequestFromWebFlow = true; tokenOperation.isRequestFromUIFlow = true; tokenOperation.webFlowRequest = webFlowRequest; return tokenOperation; }; MSAUIHandlerInternal.prototype.requestTicketForUrl = function (data, msaTicketContext, navigate) { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { this._appView.showProgress().then(function () { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("postTicketToReturnUrl"); if (this._tokenBrokerOperation) { errorDispatch({ number: -2147024567 }); return; } var tokenOperation; tokenOperation = this._buildTicketRequest(data.targetUrl, data.policy, function (returnUrl, result) { this._tokenBrokerOperation = null; completeDispatch(new CloudExperienceHost.RedirectEventArgs(returnUrl, null, result, result ? "POST" : "GET")); }.bind(this), function (error) { this._tokenBrokerOperation = null; errorDispatch({ number: error }); }.bind(this)); this._tokenBrokerOperation = tokenOperation; tokenOperation.loadUrlInWebView = navigate; tokenOperation.webFlowRequest.isRequestTicketForUrlScenario = true; if (msaTicketContext) { tokenOperation.scenarioId = msaTicketContext; } var executor; executor = new MicrosoftAccount.TokenProvider.Core.TokenProviderExecutor(tokenOperation); executor.requestTicketForUrl(); }.bind(this)); }.bind(this)); }; MSAUIHandlerInternal.prototype.requestLPTForUser = function (data, navigate) { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { this._appView.showProgress().then(function () { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("requestLPTForUser", JSON.stringify({ returnUrl: data.returnUrl, useStrongAuth: data.useStrongAuth })); if (this._registerNgcOperation) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("concurrentNgcRequest"); errorDispatch({ number: -2147024567 }); return; } var purpose = data.useStrongAuth == true ? "PURPOSE_KEYREGISTER" : "PURPOSE_KEYREGISTER_WEAK"; var tokenOperation; tokenOperation = this._buildTicketRequest("http://passport.net/purpose", purpose, function (ignoredUrl, loginProofToken) { this._registerNgcOperation = null; completeDispatch(loginProofToken); }.bind(this), function (error) { this._registerNgcOperation = null; errorDispatch({ number: error }); }.bind(this)); this._registerNgcOperation = tokenOperation; tokenOperation.loadUrlInWebView = navigate; var executor; executor = new MicrosoftAccount.TokenProvider.Core.TokenProviderExecutor(tokenOperation); executor.requestLPTForUser(data.puid, data.username, data.flowToken || ""); }.bind(this)); }.bind(this)); }; MSAUIHandlerInternal.prototype.registerNGCForUser = function (data, navigate) { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { this.requestLPTForUser(data, navigate).done(function (loginProofToken) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("registerNGCForUser"); var extension = new MicrosoftAccount.UserOperations.Extension(); extension.createNgcKeyForUserAsync(data.username, data.puid).then(function (ngcKeyName) { return extension.registerNgcKeyAsync(data.username, ngcKeyName, loginProofToken, data.useStrongAuth); }.bind(this)).done(function () { completeDispatch(data.returnUrl); }.bind(this), errorDispatch); }.bind(this), errorDispatch); }.bind(this)); }; MSAUIHandlerInternal.prototype.setIsWAMActivity = function (isWAMActivity) { this._isWAMActivity = isWAMActivity; }; MSAUIHandlerInternal.prototype.updateLogonCache = function (requestId, puid, encryptedPassword) { }; MSAUIHandlerInternal.prototype.getVerificationCode = function () { var verificationCode = this._tokenBrokerOperation.receivedVerificationCode; if ((typeof (verificationCode) === 'undefined') || verificationCode == "") { verificationCode = null; } return verificationCode; }; MSAUIHandlerInternal.prototype.saveAuthenticationState = function (data) { var tokenOperation = this._registerNgcOperation || this._tokenBrokerOperation; var dataFromWeb = new MicrosoftAccount.TokenProvider.Core.WebFlowResultData(); dataFromWeb.daToken = data.daToken || ""; dataFromWeb.sessionKey = data.sessionKey || ""; dataFromWeb.sessionKeyType = data.sessionKeyType || ""; dataFromWeb.daTokenCreationTime = data.daTokenCreationTime || ""; dataFromWeb.daTokenExpiryTime = data.daTokenExpiryTime || ""; dataFromWeb.puid = data.puid || ""; dataFromWeb.username = data.username || ""; dataFromWeb.isCompleteWebFlow = false; var msaTokenProvider; msaTokenProvider = new MicrosoftAccount.TokenProvider.Core.TokenProviderExecutor(tokenOperation); return msaTokenProvider.saveAuthenticationState(dataFromWeb); }; MSAUIHandlerInternal.prototype.saveAuthStateAndCompleteWebFlow = function (status, requestId, puid, username, daToken, daTokenCreationTime, daTokenExpiryTime, sessionKey, flowToken, hr, hrInternal, sessionKeyType) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("saveAuthStateAndCompleteWebFlow", hr); var tokenOperation = this._registerNgcOperation || this._tokenBrokerOperation; if (!tokenOperation) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("undefinedTokenOperation"); return; } this._appView.showProgress().then(function () { if (tokenOperation.stopListeningForVerificationCode != null) { tokenOperation.stopListeningForVerificationCode(); } var msaTokenProvider; msaTokenProvider = new MicrosoftAccount.TokenProvider.Core.TokenProviderExecutor(tokenOperation); if (this._isUndefined("status", status) === true) { msaTokenProvider.failAuthentication("0xc0000163", "0xc0000163"); CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("saveAuthStateAndCompleteStatus", "0xc0000163"); return; } if (status == CloudExperienceHost.AppResult.success) { var dataFromWeb = new MicrosoftAccount.TokenProvider.Core.WebFlowResultData(); dataFromWeb.daToken = daToken; dataFromWeb.sessionKey = sessionKey; dataFromWeb.sessionKeyType = sessionKeyType; dataFromWeb.daTokenCreationTime = daTokenCreationTime; dataFromWeb.daTokenExpiryTime = daTokenExpiryTime; dataFromWeb.flowToken = flowToken; dataFromWeb.puid = puid; dataFromWeb.username = username; dataFromWeb.isCompleteWebFlow = false; msaTokenProvider.resumeAuthentication(dataFromWeb); } else { if (this._isUndefined("hr", hr) === true) { hr = "0xc0000163"; } msaTokenProvider.failAuthentication(hr, hrInternal); this._isUndefined("hrInternal", hrInternal); } CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("saveAuthStateAndCompleteStatus", JSON.stringify(status)); }.bind(this)); }; MSAUIHandlerInternal.prototype.completeWebFlow = function (data) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("completeWebFlow", JSON.stringify(data.hr)); var tokenOperation = this._registerNgcOperation || this._tokenBrokerOperation; if (!tokenOperation) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("undefinedTokenOperation"); return; } this._appView.showProgress().then(function () { if (tokenOperation.stopListeningForVerificationCode != null) { tokenOperation.stopListeningForVerificationCode(); } var msaTokenProvider; msaTokenProvider = new MicrosoftAccount.TokenProvider.Core.TokenProviderExecutor(tokenOperation); if (data.hr.toLowerCase() == "0x0") { var dataFromWeb = new MicrosoftAccount.TokenProvider.Core.WebFlowResultData(); dataFromWeb.flowToken = data.flowToken || ""; dataFromWeb.puid = data.puid || ""; dataFromWeb.username = data.username || ""; dataFromWeb.isCompleteWebFlow = true; msaTokenProvider.resumeAuthentication(dataFromWeb); } else { msaTokenProvider.failAuthentication(data.hr, data.hrInternal); } CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("completeWebFlow done"); }.bind(this)); }; MSAUIHandlerInternal.prototype._isUndefined = function (paramName, param) { if ((typeof (param) === 'undefined')) { CloudExperienceHost.Telemetry.WebAppTelemetry.getInstance().logEvent("isUndefined", paramName); return true; } return false; }; return MSAUIHandlerInternal; })(); CloudExperienceHost.MSAUIHandlerInternal = MSAUIHandlerInternal; })(CloudExperienceHost || (CloudExperienceHost = {}));