func fetchFile(n string) (ret []byte, err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("fetchFile() -> %v", e) } }() murl := APIURL + "manifest/fetch/" logInfo("fetching file from %v", murl) mparam := mig.ManifestParameters{} mparam.AgentIdentifier = ctx.AgentIdentifier mparam.Object = n buf, err := json.Marshal(mparam) if err != nil { panic(err) } mstring := string(buf) data := url.Values{"parameters": {mstring}} r, err := http.NewRequest("POST", murl, strings.NewReader(data.Encode())) if err != nil { panic(err) } r.Header.Set("Content-Type", "application/x-www-form-urlencoded") r.Header.Add("X-LOADERKEY", ctx.LoaderKey) client := http.Client{} resp, err := client.Do(r) if err != nil { panic(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } var resource *cljs.Resource err = json.Unmarshal(body, &resource) if err != nil { panic(err) } // Extract fetch response. fetchresp, err := valueToFetchResponse(resource.Collection.Items[0].Data[0].Value) if err != nil { panic(err) } // Decompress the returned file and return it as a byte slice. b := bytes.NewBuffer(fetchresp.Data) gz, err := gzip.NewReader(b) if err != nil { panic(err) } ret, err = ioutil.ReadAll(gz) if err != nil { panic(err) } return }