| package handlers | |
| import ( | |
| "encoding/base64" | |
| "io" | |
| "log" | |
| "net/http" | |
| "github.com/gorilla/mux" | |
| ) | |
| func file(rw http.ResponseWriter, req *http.Request) { | |
| vars := mux.Vars(req) | |
| sessionId := vars["sessionId"] | |
| instanceName := vars["instanceName"] | |
| query := req.URL.Query() | |
| path := query.Get("path") | |
| if path == "" { | |
| rw.WriteHeader(http.StatusBadRequest) | |
| return | |
| } | |
| s, _ := core.SessionGet(sessionId) | |
| if s == nil { | |
| rw.WriteHeader(http.StatusNotFound) | |
| return | |
| } | |
| i := core.InstanceGet(s, instanceName) | |
| if i == nil { | |
| rw.WriteHeader(http.StatusNotFound) | |
| return | |
| } | |
| instanceFile, err := core.InstanceFile(i, path) | |
| if err != nil { | |
| log.Println(err) | |
| rw.WriteHeader(http.StatusInternalServerError) | |
| return | |
| } | |
| encoder := base64.NewEncoder(base64.StdEncoding, rw) | |
| if _, err = io.Copy(encoder, instanceFile); err != nil { | |
| log.Println(err) | |
| rw.WriteHeader(http.StatusInternalServerError) | |
| return | |
| } | |
| encoder.Close() | |
| } | |