UNPKG

nnanh3-msal-browser

Version:

Thư viện đã custom của azure masl có common kèm trong

224 lines (221 loc) 8.98 kB
/*! @azure/msal-common v4.5.1 2021-08-02 */ 'use strict'; import { ClientConfigurationError } from '../error/ClientConfigurationError.js'; import { ClientAuthError } from '../error/ClientAuthError.js'; import { StringUtils } from '../utils/StringUtils.js'; import { AADAuthorityConstants, Constants } from '../utils/Constants.js'; /* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ /** * Url object class which can perform various transformations on url strings. */ var UrlString = /** @class */ (function () { function UrlString(url) { this._urlString = url; if (StringUtils.isEmpty(this._urlString)) { // Throws error if url is empty throw ClientConfigurationError.createUrlEmptyError(); } if (StringUtils.isEmpty(this.getHash())) { this._urlString = UrlString.canonicalizeUri(url); } } Object.defineProperty(UrlString.prototype, "urlString", { get: function () { return this._urlString; }, enumerable: false, configurable: true }); /** * Ensure urls are lower case and end with a / character. * @param url */ UrlString.canonicalizeUri = function (url) { if (url) { var lowerCaseUrl = url.toLowerCase(); if (StringUtils.endsWith(lowerCaseUrl, "?")) { lowerCaseUrl = lowerCaseUrl.slice(0, -1); } else if (StringUtils.endsWith(lowerCaseUrl, "?/")) { lowerCaseUrl = lowerCaseUrl.slice(0, -2); } if (!StringUtils.endsWith(lowerCaseUrl, "/")) { lowerCaseUrl += "/"; } return lowerCaseUrl; } return url; }; /** * Throws if urlString passed is not a valid authority URI string. */ UrlString.prototype.validateAsUri = function () { // Attempts to parse url for uri components var components; try { components = this.getUrlComponents(); } catch (e) { throw ClientConfigurationError.createUrlParseError(e); } // Throw error if URI or path segments are not parseable. if (!components.HostNameAndPort || !components.PathSegments) { throw ClientConfigurationError.createUrlParseError("Given url string: " + this.urlString); } // Throw error if uri is insecure. if (!components.Protocol || components.Protocol.toLowerCase() !== "https:") { throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString); } }; /** * Function to remove query string params from url. Returns the new url. * @param url * @param name */ UrlString.prototype.urlRemoveQueryStringParameter = function (name) { var regex = new RegExp("(\\&" + name + "=)[^\&]+"); this._urlString = this.urlString.replace(regex, ""); // name=value& regex = new RegExp("(" + name + "=)[^\&]+&"); this._urlString = this.urlString.replace(regex, ""); // name=value regex = new RegExp("(" + name + "=)[^\&]+"); this._urlString = this.urlString.replace(regex, ""); return this.urlString; }; /** * Given a url and a query string return the url with provided query string appended * @param url * @param queryString */ UrlString.appendQueryString = function (url, queryString) { if (StringUtils.isEmpty(queryString)) { return url; } return url.indexOf("?") < 0 ? url + "?" + queryString : url + "&" + queryString; }; /** * Returns a url with the hash removed * @param url */ UrlString.removeHashFromUrl = function (url) { return UrlString.canonicalizeUri(url.split("#")[0]); }; /** * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d * @param href The url * @param tenantId The tenant id to replace */ UrlString.prototype.replaceTenantPath = function (tenantId) { var urlObject = this.getUrlComponents(); var pathArray = urlObject.PathSegments; if (tenantId && (pathArray.length !== 0 && (pathArray[0] === AADAuthorityConstants.COMMON || pathArray[0] === AADAuthorityConstants.ORGANIZATIONS))) { pathArray[0] = tenantId; } return UrlString.constructAuthorityUriFromObject(urlObject); }; /** * Returns the anchor part(#) of the URL */ UrlString.prototype.getHash = function () { return UrlString.parseHash(this.urlString); }; /** * Parses out the components from a url string. * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url. */ UrlString.prototype.getUrlComponents = function () { // https://gist.github.com/curtisz/11139b2cfcaef4a261e0 var regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // If url string does not match regEx, we throw an error var match = this.urlString.match(regEx); if (!match) { throw ClientConfigurationError.createUrlParseError("Given url string: " + this.urlString); } // Url component object var urlComponents = { Protocol: match[1], HostNameAndPort: match[4], AbsolutePath: match[5], QueryString: match[7] }; var pathSegments = urlComponents.AbsolutePath.split("/"); pathSegments = pathSegments.filter(function (val) { return val && val.length > 0; }); // remove empty elements urlComponents.PathSegments = pathSegments; if (!StringUtils.isEmpty(urlComponents.QueryString) && urlComponents.QueryString.endsWith("/")) { urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1); } return urlComponents; }; UrlString.getDomainFromUrl = function (url) { var regEx = RegExp("^([^:/?#]+://)?([^/?#]*)"); var match = url.match(regEx); if (!match) { throw ClientConfigurationError.createUrlParseError("Given url string: " + url); } return match[2]; }; UrlString.getAbsoluteUrl = function (relativeUrl, baseUrl) { if (relativeUrl[0] === Constants.FORWARD_SLASH) { var url = new UrlString(baseUrl); var baseComponents = url.getUrlComponents(); return baseComponents.Protocol + "//" + baseComponents.HostNameAndPort + relativeUrl; } return relativeUrl; }; /** * Parses hash string from given string. Returns empty string if no hash symbol is found. * @param hashString */ UrlString.parseHash = function (hashString) { var hashIndex1 = hashString.indexOf("#"); var hashIndex2 = hashString.indexOf("#/"); if (hashIndex2 > -1) { return hashString.substring(hashIndex2 + 2); } else if (hashIndex1 > -1) { return hashString.substring(hashIndex1 + 1); } return ""; }; UrlString.constructAuthorityUriFromObject = function (urlObject) { return new UrlString(urlObject.Protocol + "//" + urlObject.HostNameAndPort + "/" + urlObject.PathSegments.join("/")); }; /** * Returns URL hash as server auth code response object. */ UrlString.getDeserializedHash = function (hash) { // Check if given hash is empty if (StringUtils.isEmpty(hash)) { return {}; } // Strip the # symbol if present var parsedHash = UrlString.parseHash(hash); // If # symbol was not present, above will return empty string, so give original hash value var deserializedHash = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash); // Check if deserialization didn't work if (!deserializedHash) { throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash)); } return deserializedHash; }; /** * Check if the hash of the URL string contains known properties */ UrlString.hashContainsKnownProperties = function (hash) { if (StringUtils.isEmpty(hash)) { return false; } var parameters = UrlString.getDeserializedHash(hash); return !!(parameters.code || parameters.error_description || parameters.error || parameters.state); }; return UrlString; }()); export { UrlString }; //# sourceMappingURL=UrlString.js.map