Don't escape [ and ] in query param keys (#2107)

rails' default naming for arrays is name[]=...&name[]=...
It doesn't recognize the escaped forms %5B + %5D but fails silently
This commit is contained in:
BastiOfBerlin 2019-02-11 17:17:04 +01:00 committed by William Cheng
parent 73d309b9ba
commit ba9c12f2e0
13 changed files with 42 additions and 14 deletions

View File

@ -14,7 +14,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);
@ -31,7 +33,9 @@ export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
export class CustomQueryEncoderHelper extends QueryEncoder { export class CustomQueryEncoderHelper extends QueryEncoder {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomQueryEncoderHelper extends QueryEncoder { export class CustomQueryEncoderHelper extends QueryEncoder {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomQueryEncoderHelper extends QueryEncoder { export class CustomQueryEncoderHelper extends QueryEncoder {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomQueryEncoderHelper extends QueryEncoder { export class CustomQueryEncoderHelper extends QueryEncoder {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);

View File

@ -8,7 +8,9 @@
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
encodeKey(k: string): string { encodeKey(k: string): string {
k = super.encodeKey(k); k = super.encodeKey(k);
return k.replace(/\+/gi, '%2B'); return k.replace(/\+/gi, '%2B')
.replace(/%5B/, "[").replace(/%5D/, "]")
;
} }
encodeValue(v: string): string { encodeValue(v: string): string {
v = super.encodeValue(v); v = super.encodeValue(v);