Skip to content

Commit

Permalink
fix: correctly pass the encrypted(bool) property on "Socket" for expr…
Browse files Browse the repository at this point in the history
…ess.js (#5878)

* fix: correctly pass the encrypted property on "Socket" for express.js

Express relies on this for setting the requests protocol.
Since this is on a dummy object, a property is simply set with the actual value.
Which seams okay as a workaround.

* chore: add generated files

* chore: add test

* refactor: set property directly rather then through a getter
  • Loading branch information
liz3 committed Sep 22, 2023
1 parent b05e10c commit b297fab
Show file tree
Hide file tree
Showing 8 changed files with 6,626 additions and 6,524 deletions.
2 changes: 1 addition & 1 deletion src/js/node/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ var FakeSocket = class Socket extends Duplex {
remoteAddress: string | null = null;
remotePort;
timeout = 0;

isServer = false;

address() {
Expand Down Expand Up @@ -601,6 +600,7 @@ class IncomingMessage extends Readable {
const socket = new FakeSocket();
socket.remoteAddress = url.hostname;
socket.remotePort = url.port;
if (url.protocol === "https:") socket.encrypted = true;
this.#fakeSocket = socket;

this.url = url.pathname + url.search;
Expand Down
6 changes: 3 additions & 3 deletions src/js/out/InternalModuleRegistryConstants.h

Large diffs are not rendered by default.

4,678 changes: 2,339 additions & 2,339 deletions src/js/out/WebCoreJSBuiltins.cpp

Large diffs are not rendered by default.

118 changes: 59 additions & 59 deletions src/js/out/WebCoreJSBuiltins.d.ts

Large diffs are not rendered by default.

8,238 changes: 4,119 additions & 4,119 deletions src/js/out/WebCoreJSBuiltins.h

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions test/js/node/http/fixtures/cert.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCIzOJskt6VkEJY
XKSJv/Gdil3XYkjk3NVc/+m+kzqnkTRbPtT9w+IGWgmJhuf9DJPLCwHFAEFarVwV
x16Q0PbU4ajXaLRHEYGhrH10oTMjQnJ24xVm26mxRXPQa5vaLpWJqNyIdNLIQLe+
UXUOzSGGsFTRMAjvYrkzjBe4ZUnaZV+aFY/ug0jfzeA1dJjzKZs6+yTJRbsuWUEb
8MsDmT4v+kBZDKdaDn7AFDWRVqx/38BnqsRzkM0CxpnyT2kRzw5zQajIE13gdTJo
1EHvYSUkkxrY5m30Rl9BuBBZBjhMzOHq0fYVVooHO+sf4XHPgvFTTxJum85u7J1J
oEUjrLKtAgMBAAECggEACInVNhaiqu4infZGVMy0rXMV8VwSlapM7O2SLtFsr0nK
XUmaLK6dvGzBPKK9dxdiYCFzPlMKQTkhzsAvYFWSmm3tRmikG+11TFyCRhXLpc8/
ark4vD9Io6ZkmKUmyKLwtXNjNGcqQtJ7RXc7Ga3nAkueN6JKZHqieZusXVeBGQ70
YH1LKyVNBeJggbj+g9rqaksPyNJQ8EWiNTJkTRQPazZ0o1VX/fzDFyr/a5npFtHl
4BHfafv9o1Xyr70Kie8CYYRJNViOCN+ylFs7Gd3XRaAkSkgMT/7DzrHdEM2zrrHK
yNg2gyDVX9UeEJG2X5UtU0o9BVW7WBshz/2hqIUHoQKBgQC8zsRFvC7u/rGr5vRR
mhZZG+Wvg03/xBSuIgOrzm+Qie6mAzOdVmfSL/pNV9EFitXt1yd2ROo31AbS7Evy
Bm/QVKr2mBlmLgov3B7O/e6ABteooOL7769qV/v+yo8VdEg0biHmsfGIIXDe3Lwl
OT0XwF9r/SeZLbw1zfkSsUVG/QKBgQC5fANM3Dc9LEek+6PHv5+eC1cKkyioEjUl
/y1VUD00aABI1TUcdLF3BtFN2t/S6HW0hrP3KwbcUfqC25k+GDLh1nM6ZK/gI3Yn
IGtCHxtE3S6jKhE9QcK/H+PzGVKWge9SezeYRP0GHJYDrTVTA8Kt9HgoZPPeReJl
+Ss9c8ThcQKBgECX6HQHFnNzNSufXtSQB7dCoQizvjqTRZPxVRoxDOABIGExVTYt
umUhPtu5AGyJ+/hblEeU+iBRbGg6qRzK8PPwE3E7xey8MYYAI5YjL7YjISKysBUL
AhM6uJ6Jg/wOBSnSx8xZ8kzlS+0izUda1rjKeprCSArSp8IsjlrDxPStAoGAEcPr
+P+altRX5Fhpvmb/Hb8OTif8G+TqjEIdkG9H/W38oP0ywg/3M2RGxcMx7txu8aR5
NjI7zPxZFxF7YvQkY3cLwEsGgVxEI8k6HLIoBXd90Qjlb82NnoqqZY1GWL4HMwo0
L/Rjm6M/Rwje852Hluu0WoIYzXA6F/Q+jPs6nzECgYAxx4IbDiGXuenkwSF1SUyj
NwJXhx4HDh7U6EO/FiPZE5BHE3BoTrFu3o1lzverNk7G3m+j+m1IguEAalHlukYl
rip9iUISlKYqbYZdLBoLwHAfHhszdrjqn8/v6oqbB5yR3HXjPFUWJo0WJ2pqJp56
ZshgmQQ/5Khoj6x0/dMPSg==
-----END PRIVATE KEY-----
23 changes: 23 additions & 0 deletions test/js/node/http/fixtures/cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID5jCCAs6gAwIBAgIUN7coIsdMcLo9amZfkwogu0YkeLEwDQYJKoZIhvcNAQEL
BQAwfjELMAkGA1UEBhMCU0UxDjAMBgNVBAgMBVN0YXRlMREwDwYDVQQHDAhMb2Nh
dGlvbjEaMBgGA1UECgwRT3JnYW5pemF0aW9uIE5hbWUxHDAaBgNVBAsME09yZ2Fu
aXphdGlvbmFsIFVuaXQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMzA5MjExNDE2
MjNaFw0yNDA5MjAxNDE2MjNaMH4xCzAJBgNVBAYTAlNFMQ4wDAYDVQQIDAVTdGF0
ZTERMA8GA1UEBwwITG9jYXRpb24xGjAYBgNVBAoMEU9yZ2FuaXphdGlvbiBOYW1l
MRwwGgYDVQQLDBNPcmdhbml6YXRpb25hbCBVbml0MRIwEAYDVQQDDAlsb2NhbGhv
c3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzOJskt6VkEJYXKSJ
v/Gdil3XYkjk3NVc/+m+kzqnkTRbPtT9w+IGWgmJhuf9DJPLCwHFAEFarVwVx16Q
0PbU4ajXaLRHEYGhrH10oTMjQnJ24xVm26mxRXPQa5vaLpWJqNyIdNLIQLe+UXUO
zSGGsFTRMAjvYrkzjBe4ZUnaZV+aFY/ug0jfzeA1dJjzKZs6+yTJRbsuWUEb8MsD
mT4v+kBZDKdaDn7AFDWRVqx/38BnqsRzkM0CxpnyT2kRzw5zQajIE13gdTJo1EHv
YSUkkxrY5m30Rl9BuBBZBjhMzOHq0fYVVooHO+sf4XHPgvFTTxJum85u7J1JoEUj
rLKtAgMBAAGjXDBaMA4GA1UdDwEB/wQEAwIDiDATBgNVHSUEDDAKBggrBgEFBQcD
ATAUBgNVHREEDTALgglsb2NhbGhvc3QwHQYDVR0OBBYEFNzx4Rfs9m8XR5ML0WsI
sorKmB4PMA0GCSqGSIb3DQEBCwUAA4IBAQB87iQy8R0fiOky9WTcyzVeMaavS3MX
iTe1BRn1OCyDq+UiwwoNz7zdzZJFEmRtFBwPNFOe4HzLu6E+7yLFR552eYRHlqIi
/fiLb5JiZfPtokUHeqwELWBsoXtU8vKxViPiLZ09jkWOPZWo7b/xXd6QYykBfV91
usUXLzyTD2orMagpqNksLDGS3p3ggHEJBZtRZA8R7kPEw98xZHznOQpr26iv8kYz
ZWdLFoFdwgFBSfxePKax5rfo+FbwdrcTX0MhbORyiu2XsBAghf8s2vKDkHg2UQE8
haonxFYMFaASfaZ/5vWKYDTCJkJ67m/BtkpRafFEO+ad1i1S61OjfxH4
-----END CERTIFICATE-----
57 changes: 54 additions & 3 deletions test/js/node/http/node-http.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,22 @@ import {
validateHeaderValue,
ServerResponse,
} from "node:http";
import { createServer as createHttpsServer } from "node:https";
import { createTest } from "node-harness";
import url from "node:url";
import { tmpdir } from "node:os";
import { spawnSync } from "node:child_process";
import nodefs from "node:fs";
import { join as joinPath } from "node:path";
const { describe, expect, it, beforeAll, afterAll, createDoneDotAll } = createTest(import.meta.path);

function listen(server: Server): Promise<URL> {
function listen(server: Server, protocol: string = "http"): Promise<URL> {
return new Promise((resolve, reject) => {
server.listen({ port: 0 }, (err, hostname, port) => {
if (err) {
reject(err);
} else {
resolve(new URL(`http://${hostname}:${port}`));
resolve(new URL(`${protocol}://${hostname}:${port}`));
}
});
setTimeout(() => reject("Timed out"), 5000);
Expand All @@ -47,7 +50,22 @@ describe("node:http", () => {
server.close();
}
});

it("is not marked encrypted (#5867)", async () => {
try {
var server = createServer((req, res) => {
expect(req.connection.encrypted).toBe(undefined);
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello World");
});
const url = await listen(server);
const res = await fetch(new URL("", url));
expect(await res.text()).toBe("Hello World");
} catch (e) {
throw e;
} finally {
server.close();
}
});
it("request & response body streaming (large)", async () => {
try {
const bodyBlob = new Blob(["hello world", "hello world".repeat(9000)]);
Expand Down Expand Up @@ -943,3 +961,36 @@ describe("node:http", () => {
});
});
});
describe("node https server", async () => {
const httpsOptions = {
key: nodefs.readFileSync(joinPath(import.meta.dir, "fixtures", "cert.key")),
cert: nodefs.readFileSync(joinPath(import.meta.dir, "fixtures", "cert.pem")),
};
const createServer = onRequest => {
return new Promise(resolve => {
const server = createHttpsServer(httpsOptions, (req, res) => {
onRequest(req, res);
});
listen(server, "https").then(url => {
resolve({
server,
done: () => server.close(),
url,
});
});
});
};
it("is marked encrypted (#5867)", async () => {
const { server, url, done } = await createServer(async (req, res) => {
expect(req.connection.encrypted).toBe(true);
res.end();
});
try {
await fetch(url);
} catch (e) {
throw e;
} finally {
done();
}
});
});

0 comments on commit b297fab

Please sign in to comment.