47 lines
2.3 KiB
JavaScript
47 lines
2.3 KiB
JavaScript
|
/*! @azure/msal-browser v3.21.0 2024-08-13 */
|
||
|
'use strict';
|
||
|
import { UrlUtils } from '@azure/msal-common';
|
||
|
import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
|
||
|
import { extractBrowserRequestState } from '../utils/BrowserProtocolUtils.mjs';
|
||
|
import { hashEmptyError, hashDoesNotContainKnownProperties, noStateInHash, unableToParseState, stateInteractionTypeMismatch } from '../error/BrowserAuthErrorCodes.mjs';
|
||
|
|
||
|
/*
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License.
|
||
|
*/
|
||
|
function deserializeResponse(responseString, responseLocation, logger) {
|
||
|
// Deserialize hash fragment response parameters.
|
||
|
const serverParams = UrlUtils.getDeserializedResponse(responseString);
|
||
|
if (!serverParams) {
|
||
|
if (!UrlUtils.stripLeadingHashOrQuery(responseString)) {
|
||
|
// Hash or Query string is empty
|
||
|
logger.error(`The request has returned to the redirectUri but a ${responseLocation} is not present. It's likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`);
|
||
|
throw createBrowserAuthError(hashEmptyError);
|
||
|
}
|
||
|
else {
|
||
|
logger.error(`A ${responseLocation} is present in the iframe but it does not contain known properties. It's likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`);
|
||
|
logger.errorPii(`The ${responseLocation} detected is: ${responseString}`);
|
||
|
throw createBrowserAuthError(hashDoesNotContainKnownProperties);
|
||
|
}
|
||
|
}
|
||
|
return serverParams;
|
||
|
}
|
||
|
/**
|
||
|
* Returns the interaction type that the response object belongs to
|
||
|
*/
|
||
|
function validateInteractionType(response, browserCrypto, interactionType) {
|
||
|
if (!response.state) {
|
||
|
throw createBrowserAuthError(noStateInHash);
|
||
|
}
|
||
|
const platformStateObj = extractBrowserRequestState(browserCrypto, response.state);
|
||
|
if (!platformStateObj) {
|
||
|
throw createBrowserAuthError(unableToParseState);
|
||
|
}
|
||
|
if (platformStateObj.interactionType !== interactionType) {
|
||
|
throw createBrowserAuthError(stateInteractionTypeMismatch);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export { deserializeResponse, validateInteractionType };
|
||
|
//# sourceMappingURL=ResponseHandler.mjs.map
|