added support for upload and download functions of the gommand interactive agent through the proxy
This commit is contained in:
parent
2b0f897f18
commit
495f26caed
|
@ -396,7 +396,9 @@ func (app *App) proxyAgentHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
ForceAttemptHTTP2: false,
|
ForceAttemptHTTP2: false,
|
||||||
},
|
},
|
||||||
FlushInterval: -1,
|
FlushInterval: -1,
|
||||||
|
|
||||||
ModifyResponse: func(resp *http.Response) error {
|
ModifyResponse: func(resp *http.Response) error {
|
||||||
|
// Patch the base tag for seemless translation of the proxy
|
||||||
if strings.HasPrefix(resp.Header.Get("Content-Type"), "text/html") {
|
if strings.HasPrefix(resp.Header.Get("Content-Type"), "text/html") {
|
||||||
body, _ := io.ReadAll(resp.Body)
|
body, _ := io.ReadAll(resp.Body)
|
||||||
patched := bytes.Replace(
|
patched := bytes.Replace(
|
||||||
|
@ -408,6 +410,20 @@ func (app *App) proxyAgentHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
resp.ContentLength = int64(len(patched))
|
resp.ContentLength = int64(len(patched))
|
||||||
resp.Header.Set("Content-Length", strconv.Itoa(len(patched)))
|
resp.Header.Set("Content-Length", strconv.Itoa(len(patched)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// patch relative redirects coming from the agent
|
||||||
|
// e.g. download function of the interactive agent
|
||||||
|
if loc := resp.Header.Get("Location"); loc != "" {
|
||||||
|
if !strings.HasPrefix(loc, "http://") &&
|
||||||
|
!strings.HasPrefix(loc, "https://") &&
|
||||||
|
!strings.HasPrefix(loc, "/proxyAgent/") {
|
||||||
|
// Remove leading "/" if present, prefix with the tunnel
|
||||||
|
loc = strings.TrimPrefix(loc, "/")
|
||||||
|
fixed := fmt.Sprintf("/proxyAgent/%s/%s", agentKey, loc)
|
||||||
|
resp.Header.Set("Location", fixed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue