Merge pull request #1381 from murgatroid99/grpc-js_proxy_fixes_final

grpc-js: Fix the final proxy bugs
This commit is contained in:
Michael Lumish 2020-04-22 15:19:56 -07:00 committed by GitHub
commit 4946b418b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 16 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@grpc/grpc-js",
"version": "1.0.1",
"version": "1.0.2",
"description": "gRPC Library for Node - pure JS implementation",
"homepage": "https://grpc.io/",
"repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",

View File

@ -211,7 +211,8 @@ class SecureChannelCredentialsImpl extends ChannelCredentials {
}
_getConnectionOptions(): ConnectionOptions | null {
return this.connectionOptions;
// Copy to prevent callers from mutating this.connectionOptions
return { ...this.connectionOptions };
}
_isSecure(): boolean {
return true;

View File

@ -149,7 +149,7 @@ export function mapProxyName(
return {
target: {
scheme: 'dns',
path: proxyInfo.address
path: proxyInfo.address,
},
extraOptions: extraOptions,
};
@ -207,23 +207,33 @@ export function getProxiedConnection(
' through proxy ' +
proxyAddressString
);
resolve({
socket,
realTarget: parsedTarget,
});
if ('secureContext' in connectionOptions) {
/* The proxy is connecting to a TLS server, so upgrade this socket
* connection to a TLS connection.
* This is a workaround for https://github.com/nodejs/node/issues/32922
* See https://github.com/grpc/grpc-node/pull/1369 for more info. */
const cts = tls.connect({
...connectionOptions,
host: getDefaultAuthority(parsedTarget),
const remoteHost = getDefaultAuthority(parsedTarget);
const cts = tls.connect(
{
host: remoteHost,
servername: remoteHost,
socket: socket,
}, () => {
...connectionOptions,
},
() => {
trace(
'Successfully established a TLS connection to ' +
options.path +
' through proxy ' +
proxyAddressString
);
resolve({ socket: cts, realTarget: parsedTarget });
}
);
cts.on('error', () => {
reject();
});
} else {
resolve({
socket,

View File

@ -322,10 +322,11 @@ export class Subchannel {
};
}
connectionOptions = Object.assign(
connectionOptions,
this.subchannelAddress
);
connectionOptions = {
...connectionOptions,
...this.subchannelAddress,
};
/* http2.connect uses the options here:
* https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036
* The spread operator overides earlier values with later ones, so any port