Add initial project files
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"docker-manager/docker"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func ListImagesHandler(w http.ResponseWriter, r *http.Request, client *docker.Client) {
|
||||
var images []map[string]interface{}
|
||||
if err := client.GetJSON("/images/json", &images); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if images == nil {
|
||||
w.Write([]byte("[]"))
|
||||
} else {
|
||||
json.NewEncoder(w).Encode(images)
|
||||
}
|
||||
}
|
||||
|
||||
func RemoveImageHandler(w http.ResponseWriter, r *http.Request, client *docker.Client, id string) {
|
||||
if resp, err := client.Do("DELETE", fmt.Sprintf("/images/%s?force=true", id), nil); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
} else {
|
||||
defer resp.Body.Close()
|
||||
w.WriteHeader(resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func PullImageHandler(w http.ResponseWriter, r *http.Request, client *docker.Client) {
|
||||
name := r.URL.Query().Get("name")
|
||||
if name == "" {
|
||||
http.Error(w, "name parameter required", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// Strip tag if contains ":"
|
||||
ref := name
|
||||
if strings.Contains(name, ":") {
|
||||
parts := strings.Split(name, ":")
|
||||
ref = parts[0]
|
||||
}
|
||||
|
||||
body, err := client.DoStream("POST", fmt.Sprintf("/images/create?fromImage=%s", ref), nil)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer body.Close()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Transfer-Encoding", "chunked")
|
||||
|
||||
// Stream pull progress as JSON lines
|
||||
decoder := json.NewDecoder(body)
|
||||
for {
|
||||
var line map[string]interface{}
|
||||
if err := decoder.Decode(&line); err != nil {
|
||||
break
|
||||
}
|
||||
json.NewEncoder(w).Encode(line)
|
||||
if flusher, ok := w.(http.Flusher); ok {
|
||||
flusher.Flush()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user