@esri/hub-common 11.4.1 → 11.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/urls/index.js +1 -0
- package/dist/esm/urls/index.js.map +1 -1
- package/dist/esm/urls/is-safe-redirect-url.js +31 -0
- package/dist/esm/urls/is-safe-redirect-url.js.map +1 -0
- package/dist/node/urls/index.js +1 -0
- package/dist/node/urls/index.js.map +1 -1
- package/dist/node/urls/is-safe-redirect-url.js +35 -0
- package/dist/node/urls/is-safe-redirect-url.js.map +1 -0
- package/dist/types/urls/index.d.ts +1 -0
- package/dist/types/urls/is-safe-redirect-url.d.ts +14 -0
- package/package.json +1 -1
package/dist/esm/urls/index.js
CHANGED
|
@@ -19,6 +19,7 @@ export * from "./getPortalBaseFromOrgUrl";
|
|
|
19
19
|
export * from "./getGroupHomeUrl";
|
|
20
20
|
export * from "./getUserHomeUrl";
|
|
21
21
|
export * from "./get-campaign-url";
|
|
22
|
+
export * from "./is-safe-redirect-url";
|
|
22
23
|
const MAP_OR_FEATURE_SERVER_URL_REGEX = /\/(map|feature)server/i;
|
|
23
24
|
/**
|
|
24
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/urls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/urls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAEvC,MAAM,+BAA+B,GAAG,wBAAwB,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,EAAE;IACrD,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,YAAY,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC;AAC/D,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
import { domainExists } from "../sites/domains/domain-exists";
|
|
3
|
+
const SAFE_REDIRECT_URL = new RegExp("^https?:\\/\\/([a-z0-9-]+\\.)*(arcgis|esri)\\.com");
|
|
4
|
+
const HTTP_PROTOCOL = new RegExp("^https?:$");
|
|
5
|
+
/**
|
|
6
|
+
* Determines if a given URL is safe to redirect to.
|
|
7
|
+
* All URLs to *.esri.com and *.arcgis.com are considered
|
|
8
|
+
* safe. Non esri/arcgis domains must have a domain record.
|
|
9
|
+
* @param options.url url A URL
|
|
10
|
+
* @param ...options An IHubRequestOptions object
|
|
11
|
+
* @returns a promise that resolves a boolean
|
|
12
|
+
*/
|
|
13
|
+
export async function isSafeRedirectUrl(options) {
|
|
14
|
+
const { url } = options, hubRequestOptions = __rest(options, ["url"]);
|
|
15
|
+
let isSafe;
|
|
16
|
+
try {
|
|
17
|
+
isSafe = SAFE_REDIRECT_URL.test(url);
|
|
18
|
+
if (!isSafe) {
|
|
19
|
+
const { protocol, hostname } = new URL(url);
|
|
20
|
+
if (!HTTP_PROTOCOL.test(protocol)) {
|
|
21
|
+
throw new Error("invalid protocol");
|
|
22
|
+
}
|
|
23
|
+
isSafe = await domainExists(hostname, hubRequestOptions);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
isSafe = false;
|
|
28
|
+
}
|
|
29
|
+
return isSafe;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=is-safe-redirect-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-safe-redirect-url.js","sourceRoot":"","sources":["../../../src/urls/is-safe-redirect-url.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9D,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,mDAAmD,CACpD,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;AAM9C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAkC;IAElC,MAAM,EAAE,GAAG,KAA2B,OAAO,EAA7B,iBAAiB,UAAK,OAAO,EAAvC,OAA6B,CAAU,CAAC;IAC9C,IAAI,MAAM,CAAC;IACX,IAAI;QACF,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACjC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACrC;YACD,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;SAC1D;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,GAAG,KAAK,CAAC;KAChB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/node/urls/index.js
CHANGED
|
@@ -23,6 +23,7 @@ tslib_1.__exportStar(require("./getPortalBaseFromOrgUrl"), exports);
|
|
|
23
23
|
tslib_1.__exportStar(require("./getGroupHomeUrl"), exports);
|
|
24
24
|
tslib_1.__exportStar(require("./getUserHomeUrl"), exports);
|
|
25
25
|
tslib_1.__exportStar(require("./get-campaign-url"), exports);
|
|
26
|
+
tslib_1.__exportStar(require("./is-safe-redirect-url"), exports);
|
|
26
27
|
const MAP_OR_FEATURE_SERVER_URL_REGEX = /\/(map|feature)server/i;
|
|
27
28
|
/**
|
|
28
29
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/urls/index.ts"],"names":[],"mappings":";;;;AAAA,kCAAqC;AACrC,sDAA4B;AAC5B,qEAA2C;AAC3C,+DAAqC;AACrC,2DAAiC;AACjC,2DAAiC;AACjC,6DAAmC;AACnC,2DAAiC;AACjC,qEAA2C;AAC3C,0DAAgC;AAChC,wEAA8C;AAC9C,oEAA0C;AAC1C,8DAAoC;AACpC,6DAAmC;AACnC,8DAAoC;AACpC,wEAA8C;AAC9C,mEAAyC;AACzC,oEAA0C;AAC1C,4DAAkC;AAClC,2DAAiC;AACjC,6DAAmC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/urls/index.ts"],"names":[],"mappings":";;;;AAAA,kCAAqC;AACrC,sDAA4B;AAC5B,qEAA2C;AAC3C,+DAAqC;AACrC,2DAAiC;AACjC,2DAAiC;AACjC,6DAAmC;AACnC,2DAAiC;AACjC,qEAA2C;AAC3C,0DAAgC;AAChC,wEAA8C;AAC9C,oEAA0C;AAC1C,8DAAoC;AACpC,6DAAmC;AACnC,8DAAoC;AACpC,wEAA8C;AAC9C,mEAAyC;AACzC,oEAA0C;AAC1C,4DAAkC;AAClC,2DAAiC;AACjC,6DAAmC;AACnC,iEAAuC;AAEvC,MAAM,+BAA+B,GAAG,wBAAwB,CAAC;AAEjE;;;;GAIG;AACU,QAAA,uBAAuB,GAAG,CAAC,GAAW,EAAE,EAAE;IACrD,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;GAKG;AACU,QAAA,qBAAqB,GAAG,CAAC,GAAW,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,YAAY,IAAI,GAAG,iBAAU,CAAC,YAAY,CAAC,UAAU,CAAC;AAC/D,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSafeRedirectUrl = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const domain_exists_1 = require("../sites/domains/domain-exists");
|
|
6
|
+
const SAFE_REDIRECT_URL = new RegExp("^https?:\\/\\/([a-z0-9-]+\\.)*(arcgis|esri)\\.com");
|
|
7
|
+
const HTTP_PROTOCOL = new RegExp("^https?:$");
|
|
8
|
+
/**
|
|
9
|
+
* Determines if a given URL is safe to redirect to.
|
|
10
|
+
* All URLs to *.esri.com and *.arcgis.com are considered
|
|
11
|
+
* safe. Non esri/arcgis domains must have a domain record.
|
|
12
|
+
* @param options.url url A URL
|
|
13
|
+
* @param ...options An IHubRequestOptions object
|
|
14
|
+
* @returns a promise that resolves a boolean
|
|
15
|
+
*/
|
|
16
|
+
async function isSafeRedirectUrl(options) {
|
|
17
|
+
const { url } = options, hubRequestOptions = tslib_1.__rest(options, ["url"]);
|
|
18
|
+
let isSafe;
|
|
19
|
+
try {
|
|
20
|
+
isSafe = SAFE_REDIRECT_URL.test(url);
|
|
21
|
+
if (!isSafe) {
|
|
22
|
+
const { protocol, hostname } = new URL(url);
|
|
23
|
+
if (!HTTP_PROTOCOL.test(protocol)) {
|
|
24
|
+
throw new Error("invalid protocol");
|
|
25
|
+
}
|
|
26
|
+
isSafe = await domain_exists_1.domainExists(hostname, hubRequestOptions);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
isSafe = false;
|
|
31
|
+
}
|
|
32
|
+
return isSafe;
|
|
33
|
+
}
|
|
34
|
+
exports.isSafeRedirectUrl = isSafeRedirectUrl;
|
|
35
|
+
//# sourceMappingURL=is-safe-redirect-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-safe-redirect-url.js","sourceRoot":"","sources":["../../../src/urls/is-safe-redirect-url.ts"],"names":[],"mappings":";;;;AAAA,kEAA8D;AAG9D,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,mDAAmD,CACpD,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;AAM9C;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAAkC;IAElC,MAAM,EAAE,GAAG,KAA2B,OAAO,EAA7B,iBAAiB,kBAAK,OAAO,EAAvC,OAA6B,CAAU,CAAC;IAC9C,IAAI,MAAM,CAAC;IACX,IAAI;QACF,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACjC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACrC;YACD,MAAM,GAAG,MAAM,4BAAY,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;SAC1D;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,GAAG,KAAK,CAAC;KAChB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAlBD,8CAkBC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IHubRequestOptions } from "../types";
|
|
2
|
+
interface IIsSafeRedirectUrlOptions extends IHubRequestOptions {
|
|
3
|
+
url: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Determines if a given URL is safe to redirect to.
|
|
7
|
+
* All URLs to *.esri.com and *.arcgis.com are considered
|
|
8
|
+
* safe. Non esri/arcgis domains must have a domain record.
|
|
9
|
+
* @param options.url url A URL
|
|
10
|
+
* @param ...options An IHubRequestOptions object
|
|
11
|
+
* @returns a promise that resolves a boolean
|
|
12
|
+
*/
|
|
13
|
+
export declare function isSafeRedirectUrl(options: IIsSafeRedirectUrlOptions): Promise<boolean>;
|
|
14
|
+
export {};
|