1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | Object.defineProperty(exports, "__esModule", { value: true });
|
7 | exports.UrlUtils = void 0;
|
8 | var Constants_1 = require("./Constants");
|
9 | var ScopeSet_1 = require("../ScopeSet");
|
10 | var StringUtils_1 = require("./StringUtils");
|
11 | var CryptoUtils_1 = require("./CryptoUtils");
|
12 |
|
13 |
|
14 |
|
15 | var UrlUtils = (function () {
|
16 | function UrlUtils() {
|
17 | }
|
18 | |
19 |
|
20 |
|
21 |
|
22 | UrlUtils.createNavigateUrl = function (serverRequestParams) {
|
23 | var str = this.createNavigationUrlString(serverRequestParams);
|
24 | var authEndpoint = serverRequestParams.authorityInstance.AuthorizationEndpoint;
|
25 |
|
26 | if (authEndpoint.indexOf("?") < 0) {
|
27 | authEndpoint += "?";
|
28 | }
|
29 | else {
|
30 | authEndpoint += "&";
|
31 | }
|
32 | var requestUrl = "" + authEndpoint + str.join("&");
|
33 | return requestUrl;
|
34 | };
|
35 | |
36 |
|
37 |
|
38 |
|
39 | UrlUtils.createNavigationUrlString = function (serverRequestParams) {
|
40 | var scopes = ScopeSet_1.ScopeSet.appendDefaultScopes(serverRequestParams.scopes);
|
41 | var str = [];
|
42 | str.push("response_type=" + serverRequestParams.responseType);
|
43 | str.push("scope=" + encodeURIComponent(ScopeSet_1.ScopeSet.parseScope(scopes)));
|
44 | str.push("client_id=" + encodeURIComponent(serverRequestParams.clientId));
|
45 | str.push("redirect_uri=" + encodeURIComponent(serverRequestParams.redirectUri));
|
46 | str.push("state=" + encodeURIComponent(serverRequestParams.state));
|
47 | str.push("nonce=" + encodeURIComponent(serverRequestParams.nonce));
|
48 | str.push("client_info=1");
|
49 | str.push("x-client-SKU=" + serverRequestParams.xClientSku);
|
50 | str.push("x-client-Ver=" + serverRequestParams.xClientVer);
|
51 | if (serverRequestParams.promptValue) {
|
52 | str.push("prompt=" + encodeURIComponent(serverRequestParams.promptValue));
|
53 | }
|
54 | if (serverRequestParams.claimsValue) {
|
55 | str.push("claims=" + encodeURIComponent(serverRequestParams.claimsValue));
|
56 | }
|
57 | if (serverRequestParams.queryParameters) {
|
58 | str.push(serverRequestParams.queryParameters);
|
59 | }
|
60 | if (serverRequestParams.extraQueryParameters) {
|
61 | str.push(serverRequestParams.extraQueryParameters);
|
62 | }
|
63 | str.push("client-request-id=" + encodeURIComponent(serverRequestParams.correlationId));
|
64 | return str;
|
65 | };
|
66 | |
67 |
|
68 |
|
69 | UrlUtils.getCurrentUrl = function () {
|
70 | return window.location.href.split("?")[0].split("#")[0];
|
71 | };
|
72 | |
73 |
|
74 |
|
75 | UrlUtils.removeHashFromUrl = function (url) {
|
76 | return url.split("#")[0];
|
77 | };
|
78 | |
79 |
|
80 |
|
81 |
|
82 |
|
83 | UrlUtils.replaceTenantPath = function (url, tenantId) {
|
84 | var lowerCaseUrl = url.toLowerCase();
|
85 | var urlObject = this.GetUrlComponents(lowerCaseUrl);
|
86 | var pathArray = urlObject.PathSegments;
|
87 | if (tenantId && (pathArray.length !== 0 && (pathArray[0] === Constants_1.Constants.common || pathArray[0] === Constants_1.SSOTypes.ORGANIZATIONS || pathArray[0] === Constants_1.SSOTypes.CONSUMERS))) {
|
88 | pathArray[0] = tenantId;
|
89 | }
|
90 | return this.constructAuthorityUriFromObject(urlObject, pathArray);
|
91 | };
|
92 | UrlUtils.constructAuthorityUriFromObject = function (urlObject, pathArray) {
|
93 | return this.CanonicalizeUri(urlObject.Protocol + "//" + urlObject.HostNameAndPort + "/" + pathArray.join("/"));
|
94 | };
|
95 | |
96 |
|
97 |
|
98 |
|
99 |
|
100 | UrlUtils.isCommonAuthority = function (url) {
|
101 | var authority = this.CanonicalizeUri(url);
|
102 | var pathArray = this.GetUrlComponents(authority).PathSegments;
|
103 | return (pathArray.length !== 0 && pathArray[0] === Constants_1.Constants.common);
|
104 | };
|
105 | |
106 |
|
107 |
|
108 |
|
109 |
|
110 | UrlUtils.isOrganizationsAuthority = function (url) {
|
111 | var authority = this.CanonicalizeUri(url);
|
112 | var pathArray = this.GetUrlComponents(authority).PathSegments;
|
113 | return (pathArray.length !== 0 && pathArray[0] === Constants_1.SSOTypes.ORGANIZATIONS);
|
114 | };
|
115 | |
116 |
|
117 |
|
118 |
|
119 |
|
120 | UrlUtils.isConsumersAuthority = function (url) {
|
121 | var authority = this.CanonicalizeUri(url);
|
122 | var pathArray = this.GetUrlComponents(authority).PathSegments;
|
123 | return (pathArray.length !== 0 && pathArray[0] === Constants_1.SSOTypes.CONSUMERS);
|
124 | };
|
125 | |
126 |
|
127 |
|
128 |
|
129 | UrlUtils.GetUrlComponents = function (url) {
|
130 | if (!url) {
|
131 | throw "Url required";
|
132 | }
|
133 |
|
134 | var regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
|
135 | var match = url.match(regEx);
|
136 | if (!match || match.length < 6) {
|
137 | throw "Valid url required";
|
138 | }
|
139 | var urlComponents = {
|
140 | Protocol: match[1],
|
141 | HostNameAndPort: match[4],
|
142 | AbsolutePath: match[5]
|
143 | };
|
144 | var pathSegments = urlComponents.AbsolutePath.split("/");
|
145 | pathSegments = pathSegments.filter(function (val) { return val && val.length > 0; });
|
146 | urlComponents.PathSegments = pathSegments;
|
147 | if (match[6]) {
|
148 | urlComponents.Search = match[6];
|
149 | }
|
150 | if (match[8]) {
|
151 | urlComponents.Hash = match[8];
|
152 | }
|
153 | return urlComponents;
|
154 | };
|
155 | |
156 |
|
157 |
|
158 |
|
159 |
|
160 | UrlUtils.CanonicalizeUri = function (url) {
|
161 | if (url) {
|
162 | var lowerCaseUrl = url.toLowerCase();
|
163 | if (!UrlUtils.endsWith(lowerCaseUrl, "/")) {
|
164 | lowerCaseUrl += "/";
|
165 | }
|
166 | return lowerCaseUrl;
|
167 | }
|
168 | return url;
|
169 | };
|
170 | |
171 |
|
172 |
|
173 |
|
174 |
|
175 |
|
176 |
|
177 | UrlUtils.endsWith = function (url, suffix) {
|
178 | if (!url || !suffix) {
|
179 | return false;
|
180 | }
|
181 | return url.indexOf(suffix, url.length - suffix.length) !== -1;
|
182 | };
|
183 | |
184 |
|
185 |
|
186 |
|
187 |
|
188 | UrlUtils.urlRemoveQueryStringParameter = function (url, name) {
|
189 | if (StringUtils_1.StringUtils.isEmpty(url)) {
|
190 | return url;
|
191 | }
|
192 | var updatedUrl = url;
|
193 | var regex = new RegExp("(\\&" + name + "=)[^\&]+");
|
194 | updatedUrl = url.replace(regex, "");
|
195 |
|
196 | regex = new RegExp("(" + name + "=)[^\&]+&");
|
197 | updatedUrl = url.replace(regex, "");
|
198 |
|
199 | regex = new RegExp("(" + name + "=)[^\&]+");
|
200 | updatedUrl = url.replace(regex, "");
|
201 | return updatedUrl;
|
202 | };
|
203 | |
204 |
|
205 |
|
206 |
|
207 |
|
208 |
|
209 | UrlUtils.getHashFromUrl = function (urlStringOrFragment) {
|
210 | var hashIndex1 = urlStringOrFragment.indexOf("#");
|
211 | var hashIndex2 = urlStringOrFragment.indexOf("#/");
|
212 | if (hashIndex2 > -1) {
|
213 | return urlStringOrFragment.substring(hashIndex2 + 2);
|
214 | }
|
215 | else if (hashIndex1 > -1) {
|
216 | return urlStringOrFragment.substring(hashIndex1 + 1);
|
217 | }
|
218 | return urlStringOrFragment;
|
219 | };
|
220 | |
221 |
|
222 |
|
223 |
|
224 |
|
225 | UrlUtils.urlContainsHash = function (urlString) {
|
226 | var parameters = UrlUtils.deserializeHash(urlString);
|
227 | return (parameters.hasOwnProperty(Constants_1.ServerHashParamKeys.ERROR_DESCRIPTION) ||
|
228 | parameters.hasOwnProperty(Constants_1.ServerHashParamKeys.ERROR) ||
|
229 | parameters.hasOwnProperty(Constants_1.ServerHashParamKeys.ACCESS_TOKEN) ||
|
230 | parameters.hasOwnProperty(Constants_1.ServerHashParamKeys.ID_TOKEN));
|
231 | };
|
232 | |
233 |
|
234 |
|
235 |
|
236 |
|
237 | UrlUtils.deserializeHash = function (urlFragment) {
|
238 | var hash = UrlUtils.getHashFromUrl(urlFragment);
|
239 | return CryptoUtils_1.CryptoUtils.deserialize(hash);
|
240 | };
|
241 | |
242 |
|
243 |
|
244 |
|
245 |
|
246 |
|
247 |
|
248 | UrlUtils.getHostFromUri = function (uri) {
|
249 |
|
250 | var extractedUri = String(uri).replace(/^(https?:)\/\//, "");
|
251 | extractedUri = extractedUri.split("/")[0];
|
252 | return extractedUri;
|
253 | };
|
254 | return UrlUtils;
|
255 | }());
|
256 | exports.UrlUtils = UrlUtils;
|
257 |
|
\ | No newline at end of file |