Skip to content

Commit 52bf0e0

Browse files
committed
complete the basic feature of extension server proxy
1 parent 8ab2e3d commit 52bf0e0

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

cmd/server.go

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
367367
mux.HandlePath(http.MethodGet, "/favicon.ico", frontEndHandlerWithLocation(o.consolePath))
368368
mux.HandlePath(http.MethodGet, "/swagger.json", frontEndHandlerWithLocation(o.consolePath))
369369
mux.HandlePath(http.MethodGet, "/data/{data}", o.dataFromExtension(remoteServer.(server.UIExtensionServer)))
370-
mux.HandlePath(http.MethodGet, "/extensionProxy/{extension}/{path}", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
370+
mux.HandlePath(http.MethodPost, "/extensionProxy/{extension}/{path}", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
371371
fmt.Println(pathParams)
372372
extServer := remoteServer.(server.UIExtensionServer)
373373
fmt.Println(extServer)
@@ -386,6 +386,52 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
386386
return
387387
}
388388
fmt.Println(resp)
389+
if !resp.Success {
390+
w.WriteHeader(http.StatusInternalServerError)
391+
return
392+
}
393+
394+
req, err := http.NewRequestWithContext(ctx, http.MethodPost, resp.Message, r.Body)
395+
if err != nil {
396+
fmt.Println(err)
397+
return
398+
}
399+
req.Header = r.Header
400+
fmt.Println("request url", req.URL)
401+
402+
rsp, err := http.DefaultClient.Do(req)
403+
if err != nil {
404+
fmt.Println(err)
405+
return
406+
}
407+
fmt.Println("response status", rsp.Status)
408+
defer rsp.Body.Close()
409+
for k, v := range rsp.Header {
410+
w.Header().Add(k, v[0])
411+
}
412+
413+
flusher, ok := w.(http.Flusher)
414+
if !ok {
415+
http.Error(w, "Streaming unsupported", http.StatusInternalServerError)
416+
return
417+
}
418+
419+
fmt.Println("start to read response body", rsp.Header)
420+
data := make([]byte, 1024)
421+
var count int
422+
for {
423+
count, err = rsp.Body.Read(data)
424+
if count == -1 || err != nil {
425+
fmt.Println("failed to read response body", err)
426+
break
427+
}
428+
if count == 0 {
429+
break
430+
}
431+
w.Write(data[:count])
432+
flusher.Flush()
433+
fmt.Print(string(data[:count]))
434+
}
389435
})
390436
mux.HandlePath(http.MethodGet, "/get", o.getAtestBinary)
391437
mux.HandlePath(http.MethodPost, "/runner/{suite}/{case}", service.WebRunnerHandler)

0 commit comments

Comments
 (0)