forwardEvent forwards events to the server running on the local port specified by the user
(w io.Writer, url string, ev wsEventReceived)
| 158 | |
| 159 | // forwardEvent forwards events to the server running on the local port specified by the user |
| 160 | func forwardEvent(w io.Writer, url string, ev wsEventReceived) (*httpEventForward, error) { |
| 161 | if url == "" { |
| 162 | event := ev.Header.Get("X-GitHub-Event") |
| 163 | event = strings.ReplaceAll(event, "\n", "") |
| 164 | event = strings.ReplaceAll(event, "\r", "") |
| 165 | fmt.Fprintf(os.Stderr, "[LOG] received event %q\n", event) |
| 166 | if _, err := w.Write(ev.Body); err != nil { |
| 167 | return nil, err |
| 168 | } |
| 169 | if _, err := w.Write([]byte("\n")); err != nil { |
| 170 | return nil, err |
| 171 | } |
| 172 | return &httpEventForward{Status: 200, Header: make(http.Header), Body: []byte("OK")}, nil |
| 173 | } |
| 174 | |
| 175 | req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(ev.Body)) |
| 176 | if err != nil { |
| 177 | return nil, err |
| 178 | } |
| 179 | |
| 180 | for k := range ev.Header { |
| 181 | req.Header.Set(k, ev.Header.Get(k)) |
| 182 | } |
| 183 | |
| 184 | resp, err := http.DefaultClient.Do(req) |
| 185 | if err != nil { |
| 186 | return nil, err |
| 187 | } |
| 188 | |
| 189 | defer resp.Body.Close() |
| 190 | body, err := io.ReadAll(resp.Body) |
| 191 | if err != nil { |
| 192 | return nil, err |
| 193 | } |
| 194 | |
| 195 | return &httpEventForward{ |
| 196 | Status: resp.StatusCode, |
| 197 | Header: resp.Header, |
| 198 | Body: body, |
| 199 | }, nil |
| 200 | } |