github.com/kim0/docker@v0.6.2-0.20161130212042-4addda3f07e7/api/server/router/plugin/plugin_routes.go (about) 1 package plugin 2 3 import ( 4 "encoding/base64" 5 "encoding/json" 6 "net/http" 7 "strings" 8 9 "github.com/docker/docker/api/server/httputils" 10 "github.com/docker/docker/api/types" 11 "golang.org/x/net/context" 12 ) 13 14 func (pr *pluginRouter) pullPlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 15 if err := httputils.ParseForm(r); err != nil { 16 return err 17 } 18 19 metaHeaders := map[string][]string{} 20 for k, v := range r.Header { 21 if strings.HasPrefix(k, "X-Meta-") { 22 metaHeaders[k] = v 23 } 24 } 25 26 // Get X-Registry-Auth 27 authEncoded := r.Header.Get("X-Registry-Auth") 28 authConfig := &types.AuthConfig{} 29 if authEncoded != "" { 30 authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) 31 if err := json.NewDecoder(authJSON).Decode(authConfig); err != nil { 32 authConfig = &types.AuthConfig{} 33 } 34 } 35 36 privileges, err := pr.backend.Pull(r.FormValue("name"), metaHeaders, authConfig) 37 if err != nil { 38 return err 39 } 40 return httputils.WriteJSON(w, http.StatusOK, privileges) 41 } 42 43 func (pr *pluginRouter) enablePlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 44 return pr.backend.Enable(vars["name"]) 45 } 46 47 func (pr *pluginRouter) disablePlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 48 return pr.backend.Disable(vars["name"]) 49 } 50 51 func (pr *pluginRouter) removePlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 52 if err := httputils.ParseForm(r); err != nil { 53 return err 54 } 55 56 name := vars["name"] 57 config := &types.PluginRmConfig{ 58 ForceRemove: httputils.BoolValue(r, "force"), 59 } 60 return pr.backend.Remove(name, config) 61 } 62 63 func (pr *pluginRouter) pushPlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 64 if err := httputils.ParseForm(r); err != nil { 65 return err 66 } 67 68 metaHeaders := map[string][]string{} 69 for k, v := range r.Header { 70 if strings.HasPrefix(k, "X-Meta-") { 71 metaHeaders[k] = v 72 } 73 } 74 75 // Get X-Registry-Auth 76 authEncoded := r.Header.Get("X-Registry-Auth") 77 authConfig := &types.AuthConfig{} 78 if authEncoded != "" { 79 authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) 80 if err := json.NewDecoder(authJSON).Decode(authConfig); err != nil { 81 authConfig = &types.AuthConfig{} 82 } 83 } 84 return pr.backend.Push(vars["name"], metaHeaders, authConfig) 85 } 86 87 func (pr *pluginRouter) setPlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 88 var args []string 89 if err := json.NewDecoder(r.Body).Decode(&args); err != nil { 90 return err 91 } 92 return pr.backend.Set(vars["name"], args) 93 } 94 95 func (pr *pluginRouter) listPlugins(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 96 l, err := pr.backend.List() 97 if err != nil { 98 return err 99 } 100 return httputils.WriteJSON(w, http.StatusOK, l) 101 } 102 103 func (pr *pluginRouter) inspectPlugin(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 104 result, err := pr.backend.Inspect(vars["name"]) 105 if err != nil { 106 return err 107 } 108 return httputils.WriteJSON(w, http.StatusOK, result) 109 }