From a7dd3a986fbc3acd654a29ee02fcabf9abe66bc9 Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Wed, 25 May 2022 16:51:26 +0200 Subject: [PATCH] Set nil dial context for js/wasm runtime --- ca/tls.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/ca/tls.go b/ca/tls.go index 7954cbdf..57440bad 100644 --- a/ca/tls.go +++ b/ca/tls.go @@ -12,6 +12,7 @@ import ( "net" "net/http" "os" + "runtime" "time" "github.com/pkg/errors" @@ -288,10 +289,20 @@ func getDefaultDialer() *net.Dialer { // transport for HTTP/2. func getDefaultTransport(tlsConfig *tls.Config) *http.Transport { var dialContext func(ctx context.Context, network string, addr string) (net.Conn, error) - if mTLSDialContext == nil { + switch { + case runtime.GOOS == "js" && runtime.GOARCH == "wasm": + // when running in js/wasm and using the default dialer context all requests + // performed by the CA client resulted in a "protocol not supported" error. + // By setting the dial context to nil requests will be handled by the browser + // fetch API instead. Currently this will always set the dial context to nil, + // but we could implement some additional logic similar to what's found in + // https://github.com/golang/go/pull/46923/files to support a different dial + // context if it is available, required and expected to work. + dialContext = nil + case mTLSDialContext == nil: d := getDefaultDialer() dialContext = d.DialContext - } else { + default: dialContext = mTLSDialContext() } return &http.Transport{