From ca9a3a21fc921d2ce05e7f271c7b3d1157627f1d Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 13:28:47 -0700 Subject: [PATCH 1/6] fix: set SSL properly for created dynamic backends --- runtime/fastly/builtins/backend.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/fastly/builtins/backend.cpp b/runtime/fastly/builtins/backend.cpp index eca9e35ba8..dfe1f04e00 100644 --- a/runtime/fastly/builtins/backend.cpp +++ b/runtime/fastly/builtins/backend.cpp @@ -1744,6 +1744,7 @@ JSObject *Backend::create(JSContext *cx, JS::HandleObject request) { auto use_ssl = origin.rfind("https://", 0) == 0; if (use_ssl) { + backend_config.use_ssl = true; if (!set_sni_hostname(cx, backend_config, name)) { return nullptr; } From ebc1b2f0599638360114298b08cd5165ad2c6eb2 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 13:35:14 -0700 Subject: [PATCH 2/6] add test --- .../js-compute/fixtures/app/src/dynamic-backend.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js index a3c3d12a81..e746aab347 100644 --- a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js +++ b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js @@ -57,7 +57,11 @@ routes.set('/backend/timeout', async () => { ); routes.set('/implicit-dynamic-backend/dynamic-backends-enabled', async () => { allowDynamicBackends(true); - await assertResolves(() => fetch('https://http-me.glitch.me/headers')); + await assertResolves(async () => { + const res = await fetch('https://http-me.glitch.me/headers'); + const backend = new Backend(res.backend); + strictEqual(backend.isSSL, true); + }); await assertResolves(() => fetch('https://www.fastly.com')); enforceExplicitBackends(); await assertRejects(() => fetch('https://www.fastly.com')); From 0555353c8f0b37733052fa32091d552ad25721ca Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 13:46:34 -0700 Subject: [PATCH 3/6] fixup test --- .../js-compute/fixtures/app/src/dynamic-backend.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js index e746aab347..9b61d61d4b 100644 --- a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js +++ b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js @@ -59,7 +59,7 @@ routes.set('/backend/timeout', async () => { allowDynamicBackends(true); await assertResolves(async () => { const res = await fetch('https://http-me.glitch.me/headers'); - const backend = new Backend(res.backend); + const backend = Backend.fromName(res.backend); strictEqual(backend.isSSL, true); }); await assertResolves(() => fetch('https://www.fastly.com')); From 90769f0327f7e1fe73066e7cf511870dee455be0 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 14:02:36 -0700 Subject: [PATCH 4/6] fixup --- runtime/fastly/builtins/backend.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/fastly/builtins/backend.cpp b/runtime/fastly/builtins/backend.cpp index dfe1f04e00..cbf832eece 100644 --- a/runtime/fastly/builtins/backend.cpp +++ b/runtime/fastly/builtins/backend.cpp @@ -1723,6 +1723,7 @@ JSObject *Backend::create(JSContext *cx, JS::HandleObject request) { host_api::BackendConfig backend_config = default_backend_config.clone(); JS::RootedValue name(cx, JS::StringValue(name_js_str)); + JS::SetReservedSlot(request, static_cast(Request::Slots::Backend), name); auto host_backend = set_backend(cx, backend, name); if (!host_backend) { return nullptr; From c89cc958077feb5c1bc13a1809d4e3331291bc0a Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 15:11:37 -0700 Subject: [PATCH 5/6] fixup --- runtime/fastly/builtins/backend.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/runtime/fastly/builtins/backend.cpp b/runtime/fastly/builtins/backend.cpp index cbf832eece..2df7c64f5f 100644 --- a/runtime/fastly/builtins/backend.cpp +++ b/runtime/fastly/builtins/backend.cpp @@ -1694,7 +1694,9 @@ JSObject *Backend::create(JSContext *cx, JS::HandleObject request) { if (!name_js_str) { return nullptr; } + JS::RootedValue name(cx, JS::StringValue(name_js_str)); std::string name_str((char *)slice.data, slice.len); + JS::SetReservedSlot(request, static_cast(Request::Slots::Backend), name); // Check if we already constructed an implicit dynamic backend for this host. bool found; @@ -1707,6 +1709,7 @@ JSObject *Backend::create(JSContext *cx, JS::HandleObject request) { return nullptr; } JS::RootedObject backend(cx, &already_built_backend.toObject()); + return backend; } @@ -1722,8 +1725,6 @@ JSObject *Backend::create(JSContext *cx, JS::HandleObject request) { host_api::BackendConfig backend_config = default_backend_config.clone(); - JS::RootedValue name(cx, JS::StringValue(name_js_str)); - JS::SetReservedSlot(request, static_cast(Request::Slots::Backend), name); auto host_backend = set_backend(cx, backend, name); if (!host_backend) { return nullptr; From bda71920d3f89ec1f956b1b5397ec583829f04b9 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Mon, 21 Oct 2024 15:29:51 -0700 Subject: [PATCH 6/6] fixup --- .../js-compute/fixtures/app/src/dynamic-backend.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js index 9b61d61d4b..cfa409d3f7 100644 --- a/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js +++ b/integration-tests/js-compute/fixtures/app/src/dynamic-backend.js @@ -58,8 +58,8 @@ routes.set('/backend/timeout', async () => { routes.set('/implicit-dynamic-backend/dynamic-backends-enabled', async () => { allowDynamicBackends(true); await assertResolves(async () => { - const res = await fetch('https://http-me.glitch.me/headers'); - const backend = Backend.fromName(res.backend); + await fetch('https://http-me.glitch.me/headers'); + const backend = Backend.fromName('http-me.glitch.me'); strictEqual(backend.isSSL, true); }); await assertResolves(() => fetch('https://www.fastly.com'));