handleWebsocket mediates between websocket server and local web server
(out io.Writer, url, token, wsURL string, activateHook func() error)
| 104 | |
| 105 | // handleWebsocket mediates between websocket server and local web server |
| 106 | func handleWebsocket(out io.Writer, url, token, wsURL string, activateHook func() error) error { |
| 107 | c, err := dial(token, wsURL) |
| 108 | if err != nil { |
| 109 | return fmt.Errorf("error dialing to ws server: %w", err) |
| 110 | } |
| 111 | defer c.Close() |
| 112 | |
| 113 | fmt.Fprintln(os.Stderr, "Forwarding Webhook events from GitHub...") |
| 114 | if err := activateHook(); err != nil { |
| 115 | return fmt.Errorf("error activating hook: %w", err) |
| 116 | } |
| 117 | |
| 118 | for { |
| 119 | var ev wsEventReceived |
| 120 | err := c.ReadJSON(&ev) |
| 121 | if err != nil { |
| 122 | return fmt.Errorf("error receiving json event: %w", err) |
| 123 | } |
| 124 | |
| 125 | resp, err := forwardEvent(out, url, ev) |
| 126 | if err != nil { |
| 127 | fmt.Fprintf(os.Stderr, "warning: error forwarding event: %v\n", err) |
| 128 | continue |
| 129 | } |
| 130 | |
| 131 | err = c.WriteJSON(resp) |
| 132 | if err != nil { |
| 133 | return fmt.Errorf("error writing json event: %w", err) |
| 134 | } |
| 135 | } |
| 136 | } |
| 137 | |
| 138 | // dial connects to the websocket server |
| 139 | func dial(token, url string) (*websocket.Conn, error) { |
no test coverage detected