Skip to content

Commit c331a13

Browse files
authored
fix(getDomainRoutes): Fix domain resolution bug (#188)
Wildcat would resolve to the wrong domain if domain aliases had a null/undefined value
1 parent 47ba82a commit c331a13

10 files changed

Lines changed: 247 additions & 98 deletions

File tree

example/yarn.lock

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,8 @@ babel-helpers@^6.22.0:
421421
babel-template "^6.22.0"
422422

423423
babel-messages@^6.22.0:
424-
version "6.22.0"
425-
resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
424+
version "6.23.0"
425+
resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
426426
dependencies:
427427
babel-runtime "^6.22.0"
428428

@@ -611,8 +611,8 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0:
611611
babel-template "^6.22.0"
612612

613613
babel-plugin-transform-es2015-destructuring@^6.22.0:
614-
version "6.22.0"
615-
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6"
614+
version "6.23.0"
615+
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
616616
dependencies:
617617
babel-runtime "^6.22.0"
618618

@@ -624,8 +624,8 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
624624
babel-types "^6.22.0"
625625

626626
babel-plugin-transform-es2015-for-of@^6.22.0:
627-
version "6.22.0"
628-
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265"
627+
version "6.23.0"
628+
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
629629
dependencies:
630630
babel-runtime "^6.22.0"
631631

@@ -722,8 +722,8 @@ babel-plugin-transform-es2015-template-literals@^6.22.0:
722722
babel-runtime "^6.22.0"
723723

724724
babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
725-
version "6.22.0"
726-
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1"
725+
version "6.23.0"
726+
resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
727727
dependencies:
728728
babel-runtime "^6.22.0"
729729

@@ -777,21 +777,21 @@ babel-plugin-transform-inline-environment-variables@^6.8.0:
777777
babel-runtime "^6.0.0"
778778

779779
babel-plugin-transform-object-rest-spread@^6.22.0:
780-
version "6.22.0"
781-
resolved "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc"
780+
version "6.23.0"
781+
resolved "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921"
782782
dependencies:
783783
babel-plugin-syntax-object-rest-spread "^6.8.0"
784784
babel-runtime "^6.22.0"
785785

786786
babel-plugin-transform-react-constant-elements@^6.5.0, babel-plugin-transform-react-constant-elements@^6.9.1:
787-
version "6.22.0"
788-
resolved "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.22.0.tgz#4af456f80d283e8be00f00f12852354defa08ee1"
787+
version "6.23.0"
788+
resolved "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd"
789789
dependencies:
790790
babel-runtime "^6.22.0"
791791

792792
babel-plugin-transform-react-display-name@^6.22.0:
793-
version "6.22.0"
794-
resolved "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26"
793+
version "6.23.0"
794+
resolved "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37"
795795
dependencies:
796796
babel-runtime "^6.22.0"
797797

@@ -851,8 +851,8 @@ babel-plugin-transform-system-register@0.0.1:
851851
resolved "https://registry.npmjs.org/babel-plugin-transform-system-register/-/babel-plugin-transform-system-register-0.0.1.tgz#9dff40390c2763ac518f0b2ad7c5ea4f65a5be25"
852852

853853
babel-polyfill@^6.16.0, babel-polyfill@^6.22.0:
854-
version "6.22.0"
855-
resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b"
854+
version "6.23.0"
855+
resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
856856
dependencies:
857857
babel-runtime "^6.22.0"
858858
core-js "^2.4.0"
@@ -987,8 +987,8 @@ babel-traverse@^6.0.20, babel-traverse@^6.22.0, babel-traverse@^6.22.1:
987987
lodash "^4.2.0"
988988

989989
babel-types@^6.0.19, babel-types@^6.19.0, babel-types@^6.22.0:
990-
version "6.22.0"
991-
resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
990+
version "6.23.0"
991+
resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
992992
dependencies:
993993
babel-runtime "^6.22.0"
994994
esutils "^2.0.2"
@@ -1418,8 +1418,8 @@ content-type@^1.0.0, content-type@~1.0.2:
14181418
resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
14191419

14201420
convert-source-map@^1.1.0:
1421-
version "1.3.0"
1422-
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
1421+
version "1.4.0"
1422+
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3"
14231423

14241424
cookie@0.3.1:
14251425
version "0.3.1"
@@ -1602,20 +1602,13 @@ diff@1.4.0:
16021602
version "1.4.0"
16031603
resolved "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
16041604

1605-
doctrine@1.3.x:
1605+
doctrine@1.3.x, doctrine@^1.2.2:
16061606
version "1.3.0"
16071607
resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.3.0.tgz#13e75682b55518424276f7c173783456ef913d26"
16081608
dependencies:
16091609
esutils "^2.0.2"
16101610
isarray "^1.0.0"
16111611

1612-
doctrine@^1.2.2:
1613-
version "1.5.0"
1614-
resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
1615-
dependencies:
1616-
esutils "^2.0.2"
1617-
isarray "^1.0.0"
1618-
16191612
dom-serialize@^2.2.0:
16201613
version "2.2.1"
16211614
resolved "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
@@ -2974,7 +2967,7 @@ jspm-registry@^0.4.0:
29742967

29752968
jspm-resolve@^2.1.0:
29762969
version "2.1.0"
2977-
resolved "http://registry.npmjs.org/jspm-resolve/-/jspm-resolve-2.1.0.tgz#fbac85a6fb38a5376bed7ea4f450454284a2b58d"
2970+
resolved "https://registry.npmjs.org/jspm-resolve/-/jspm-resolve-2.1.0.tgz#fbac85a6fb38a5376bed7ea4f450454284a2b58d"
29782971
dependencies:
29792972
find-root "^1.0.0"
29802973
jspm "^0.16.32"

packages/react-wildcat-ensure/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,14 @@ babel-helpers@^6.22.0:
151151
babel-template "^6.22.0"
152152

153153
babel-messages@^6.22.0:
154-
version "6.22.0"
155-
resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
154+
version "6.23.0"
155+
resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
156156
dependencies:
157157
babel-runtime "^6.22.0"
158158

159159
babel-polyfill@^6.22.0:
160-
version "6.22.0"
161-
resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b"
160+
version "6.23.0"
161+
resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
162162
dependencies:
163163
babel-runtime "^6.22.0"
164164
core-js "^2.4.0"
@@ -208,8 +208,8 @@ babel-traverse@^6.22.0, babel-traverse@^6.22.1:
208208
lodash "^4.2.0"
209209

210210
babel-types@^6.22.0:
211-
version "6.22.0"
212-
resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
211+
version "6.23.0"
212+
resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
213213
dependencies:
214214
babel-runtime "^6.22.0"
215215
esutils "^2.0.2"
@@ -319,8 +319,8 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
319319
resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
320320

321321
convert-source-map@^1.1.0:
322-
version "1.3.0"
323-
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
322+
version "1.4.0"
323+
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3"
324324

325325
core-js@^2.4.0:
326326
version "2.4.1"

packages/react-wildcat-handoff/src/utils/getDomainRoutes.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ function getLeadingLeafDomain(subdomain) {
77
}
88

99
function mapDomainToAlias(host, domainAliases) {
10+
if (!domainAliases) {
11+
return host;
12+
}
13+
1014
var resolvedHost = host;
1115

1216
if (typeof domainAliases === "object") {
@@ -16,10 +20,25 @@ function mapDomainToAlias(host, domainAliases) {
1620

1721
if (Array.isArray(possibleHosts)) {
1822
possibleHosts.forEach(function withPossibleHost(possibleHost) {
19-
if (host.startsWith(possibleHost)) {
23+
if (String(host) === String(possibleHost)) {
2024
resolvedHost = alias;
2125
}
2226
});
27+
} else if (typeof possibleHosts === "object") {
28+
var hasHost = Object
29+
.keys(possibleHosts)
30+
.reduce(function mergeArrays(acc, possibleHost) {
31+
return acc.concat(possibleHosts[possibleHost]);
32+
}, [])
33+
.reduce(function checkHost(acc, possibleHost) {
34+
return typeof acc === "boolean" ?
35+
acc || String(possibleHost) === String(resolvedHost) :
36+
String(acc) === String(resolvedHost);
37+
});
38+
39+
if (hasHost) {
40+
resolvedHost = alias;
41+
}
2342
} else {
2443
resolvedHost = alias;
2544
}

packages/react-wildcat-handoff/test/serverHandoffSpec.js

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,34 @@ describe("react-wildcat-handoff/server", () => {
8888
.to.be.an.instanceof(Promise);
8989
});
9090

91+
it("returns 404 with an undefined ip address alias", (done) => {
92+
const serverHandoff = server(stubs.domains.domainAliasesUndefined);
93+
94+
expect(serverHandoff)
95+
.to.be.a("function")
96+
.that.has.property("name")
97+
.that.equals("serverHandoff");
98+
99+
const result = serverHandoff(stubs.requests.ip, stubs.cookieParser, stubs.wildcatConfig)
100+
.then(response => {
101+
expect(response)
102+
.to.be.an("object")
103+
.that.has.property("error")
104+
.that.is.a("string");
105+
106+
expect(response)
107+
.to.be.an("object")
108+
.that.has.property("status")
109+
.that.equals(404);
110+
111+
done();
112+
})
113+
.catch(error => done(error));
114+
115+
expect(result)
116+
.to.be.an.instanceof(Promise);
117+
});
118+
91119
it("returns 500 when an unknown error occurs", (done) => {
92120
const serverHandoff = server(stubs.invalidRoutes);
93121

@@ -461,6 +489,79 @@ describe("react-wildcat-handoff/server", () => {
461489
});
462490
});
463491

492+
context("matches domain aliases with host name", () => {
493+
["async", "sync"].forEach((timing) => {
494+
it(timing, (done) => {
495+
const serverHandoff = server(stubs.domains[timing]);
496+
497+
expect(serverHandoff)
498+
.to.be.a("function")
499+
.that.has.property("name")
500+
.that.equals("serverHandoff");
501+
502+
const result = serverHandoff(stubs.requests.hostname, stubs.cookieParser, stubs.wildcatConfig)
503+
.then(response => {
504+
expect(response)
505+
.to.be.an("object")
506+
.that.has.property("html")
507+
.that.is.a("string");
508+
509+
done();
510+
})
511+
.catch(error => done(error));
512+
513+
expect(result)
514+
.to.be.an.instanceof(Promise);
515+
});
516+
});
517+
});
518+
519+
it("resolves to host with undefined alias", (done) => {
520+
const serverHandoff = server(stubs.domains.domainAliasesUndefined);
521+
522+
expect(serverHandoff)
523+
.to.be.a("function")
524+
.that.has.property("name")
525+
.that.equals("serverHandoff");
526+
527+
const result = serverHandoff(stubs.requests.basic, stubs.cookieParser, stubs.wildcatConfig)
528+
.then(response => {
529+
expect(response)
530+
.to.be.an("object")
531+
.that.has.property("html")
532+
.that.is.a("string");
533+
534+
done();
535+
})
536+
.catch(error => done(error));
537+
538+
expect(result)
539+
.to.be.an.instanceof(Promise);
540+
});
541+
542+
it("resolves to host with a string domain alias", (done) => {
543+
const serverHandoff = server(stubs.domains.domainAliasesStringOnly);
544+
545+
expect(serverHandoff)
546+
.to.be.a("function")
547+
.that.has.property("name")
548+
.that.equals("serverHandoff");
549+
550+
const result = serverHandoff(stubs.requests.ip, stubs.cookieParser, stubs.wildcatConfig)
551+
.then(response => {
552+
expect(response)
553+
.to.be.an("object")
554+
.that.has.property("html")
555+
.that.is.a("string");
556+
557+
done();
558+
})
559+
.catch(error => done(error));
560+
561+
expect(result)
562+
.to.be.an.instanceof(Promise);
563+
});
564+
464565
it("handles matching errors", (done) => {
465566
const serverHandoff = server(stubs.invalidDomains.async);
466567

0 commit comments

Comments
 (0)