From c78016be6b0ca9c4565d154bd723c7da1cfc96f2 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Mon, 5 May 2025 23:05:36 +0300 Subject: [PATCH] Implement `GetRemoteCertificate` for `DTLSTransport` in wasm --- dtlstransport_js.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/dtlstransport_js.go b/dtlstransport_js.go index 846cfb7127f..dfc55befc46 100644 --- a/dtlstransport_js.go +++ b/dtlstransport_js.go @@ -34,3 +34,31 @@ func (r *DTLSTransport) ICETransport() *ICETransport { underlying: underlying, } } + +func (t *DTLSTransport) GetRemoteCertificate() []byte { + if t.underlying.IsNull() || t.underlying.IsUndefined() { + return nil + } + + // Firefox does not support getRemoteCertificates: https://bugzilla.mozilla.org/show_bug.cgi?id=1805446 + jsGet := t.underlying.Get("getRemoteCertificates") + if jsGet.IsUndefined() || jsGet.IsNull() { + return nil + } + + jsCerts := t.underlying.Call("getRemoteCertificates") + if jsCerts.Length() == 0 { + return nil + } + + buf := jsCerts.Index(0) + u8 := js.Global().Get("Uint8Array").New(buf) + + if u8.Length() == 0 { + return nil + } + + cert := make([]byte, u8.Length()) + js.CopyBytesToGo(cert, u8) + return cert +}