Files

2.5 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
ws_upgrader function go infra 1.0.0 impure func WSUpgrader(w http.ResponseWriter, r *http.Request, origins []string) (*websocket.Conn, error) Hace el upgrade de una conexion HTTP a WebSocket usando nhooyr.io/websocket. Si origins contiene `*` se acepta cualquier origen (InsecureSkipVerify=true), en caso contrario OriginPatterns valida el header Origin del cliente con filepath.Match. Retorna el *websocket.Conn listo para Read/Write o un error si el handshake falla.
websocket
upgrade
http
server
infra
realtime
false error_go_core
fmt
net/http
nhooyr.io/websocket
name desc
w http.ResponseWriter del request entrante. Debe soportar hijack (no envuelto en middlewares que rompan Hijacker).
name desc
r *http.Request del cliente que pide el upgrade. Debe contener los headers Connection: Upgrade y Upgrade: websocket.
name desc
origins lista de patrones de origen permitidos (filepath.Match). Si contiene `*` se aceptan todos los origenes (modo inseguro, solo dev). Para produccion: lista explicita de hosts (ej: [`example.com`, `app.example.com`]).
*websocket.Conn listo para Read/Write y error. Si el handshake falla (origen no autorizado, headers invalidos), el writer ya tiene la respuesta de error escrita. true
upgradea conexion valida con origen permitido
rechaza origen no permitido
acepta cualquier origen con `*`
functions/infra/ws_test.go functions/infra/ws_upgrader.go

Ejemplo

http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    conn, err := WSUpgrader(w, r, []string{"example.com", "app.example.com"})
    if err != nil {
        return // error ya escrito al writer
    }
    defer conn.Close(websocket.StatusNormalClosure, "")

    for {
        _, data, err := conn.Read(r.Context())
        if err != nil {
            return
        }
        conn.Write(r.Context(), websocket.MessageText, data) // echo
    }
})

Notas

nhooyr.io/websocket exige un patron de origen explicito o InsecureSkipVerify=true — no admite * como pattern. Esta funcion traduce ["*"] a InsecureSkipVerify para mantener una API uniforme con CORS.

Para produccion: nunca usar ["*"], listar hosts explicitos. La validacion protege contra cross-origin WebSocket hijacking (un sitio malicioso abriendo WS al servidor desde el browser de la victima).