diff --git a/packages/bun-uws/src/AsyncSocketData.h b/packages/bun-uws/src/AsyncSocketData.h index 72ac4e5004..c36c30b584 100644 --- a/packages/bun-uws/src/AsyncSocketData.h +++ b/packages/bun-uws/src/AsyncSocketData.h @@ -84,6 +84,7 @@ struct AsyncSocketData { /* Or empty */ AsyncSocketData() = default; bool isIdle = false; + bool isAuthorized = false; // per-socket TLS authorization status }; } diff --git a/packages/bun-uws/src/HttpContext.h b/packages/bun-uws/src/HttpContext.h index 5ac6695383..130aee1175 100644 --- a/packages/bun-uws/src/HttpContext.h +++ b/packages/bun-uws/src/HttpContext.h @@ -124,15 +124,16 @@ private: // if we are closing or already closed, we don't need to do anything if (!us_socket_is_closed(SSL, s)) { HttpContextData *httpContextData = getSocketContextDataS(s); - httpContextData->flags.isAuthorized = success; + // Set per-socket authorization status + auto *httpResponseData = reinterpret_cast *>(us_socket_ext(SSL, s)); if(httpContextData->flags.rejectUnauthorized) { if(!success || verify_error.error != 0) { // we failed to handshake, close the socket us_socket_close(SSL, s, 0, nullptr); return; } - httpContextData->flags.isAuthorized = true; } + httpResponseData->isAuthorized = success; /* Any connected socket should timeout until it has a request */ ((HttpResponse *) s)->resetTimeout(); diff --git a/src/bun.js/bindings/node/JSNodeHTTPServerSocket.cpp b/src/bun.js/bindings/node/JSNodeHTTPServerSocket.cpp index d9e684fb15..a310e533a3 100644 --- a/src/bun.js/bindings/node/JSNodeHTTPServerSocket.cpp +++ b/src/bun.js/bindings/node/JSNodeHTTPServerSocket.cpp @@ -72,13 +72,11 @@ bool JSNodeHTTPServerSocket::isAuthorized() const // is secure means that tls was established successfully if (!is_ssl || !socket) return false; - auto* context = us_socket_context(is_ssl, socket); - if (!context) + // Read from per-socket HttpResponseData instead of context-level data + auto* httpResponseData = reinterpret_cast*>(us_socket_ext(is_ssl, socket)); + if (!httpResponseData) return false; - auto* data = (uWS::HttpContextData*)us_socket_context_ext(is_ssl, context); - if (!data) - return false; - return data->flags.isAuthorized; + return httpResponseData->isAuthorized; } JSNodeHTTPServerSocket::~JSNodeHTTPServerSocket()