// API entry point used to request a file be sent to the loader from the API. // This would typically be called from a loader after it has received a // manifest and determined updates to file system objects are required. func getManifestFile(respWriter http.ResponseWriter, request *http.Request) { loc := fmt.Sprintf("%s%s", ctx.Server.Host, request.URL.String()) opid := getOpID(request) resource := cljs.New(loc) defer func() { if e := recover(); e != nil { ctx.Channels.Log <- mig.Log{OpID: opid, Desc: fmt.Sprintf("%v", e)}.Err() resource.SetError(cljs.Error{Code: fmt.Sprintf("%.0f", opid), Message: fmt.Sprintf("%v", e)}) respond(http.StatusInternalServerError, resource, respWriter, request) } ctx.Channels.Log <- mig.Log{OpID: opid, Desc: "leaving getManifestFile()"}.Debug() }() err := request.ParseForm() if err != nil { panic(err) } ctx.Channels.Log <- mig.Log{OpID: opid, Desc: fmt.Sprintf("Received manifest file request")}.Debug() var manifestParam mig.ManifestParameters err = json.Unmarshal([]byte(request.FormValue("parameters")), &manifestParam) if err != nil { panic(err) } err = manifestParam.ValidateFetch() if err != nil { panic(err) } loaderid := getLoaderID(request) if loaderid == 0 { panic("Request has no valid loader ID") } ctx.Channels.Log <- mig.Log{OpID: opid, Desc: fmt.Sprintf("Loader request from %v for %v", loaderid, manifestParam.Object)}.Debug() // Update the loader entry with the parameters, and locate a valid manifest mf, err := locateManifestFromLoader(loaderid, manifestParam.AgentIdentifier) if err != nil { panic(err) } data, err := mf.ManifestObject(manifestParam.Object) if err != nil { panic(err) } fetchresp := mig.ManifestFetchResponse{Data: data} // Send the response to the loader err = resource.AddItem(cljs.Item{ Href: request.URL.String(), Data: []cljs.Data{ { Name: "content", Value: fetchresp, }, }}) if err != nil { panic(err) } respond(http.StatusOK, resource, respWriter, request) }