From 1f8b1bb84e65cfd84f938eb01e1a48c33fce5a27 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 24 Jan 2014 16:39:41 -0800 Subject: [PATCH] move auth to a job Docker-DCO-1.1-Signed-off-by: Victor Vieux (github: vieux) --- api.go | 16 +++++++++++----- api_params.go | 4 ---- commands.go | 6 +++--- server.go | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/api.go b/api.go index 24b18da512..bf9f29b57f 100644 --- a/api.go +++ b/api.go @@ -122,17 +122,23 @@ func matchesContentType(contentType, expectedType string) bool { } func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - authConfig := &auth.AuthConfig{} - err := json.NewDecoder(r.Body).Decode(authConfig) + var ( + authConfig, err = ioutil.ReadAll(r.Body) + job = srv.Eng.Job("auth") + status string + ) if err != nil { return err } - status, err := auth.Login(authConfig, srv.HTTPRequestFactory(nil)) - if err != nil { + job.Setenv("authConfig", string(authConfig)) + job.Stdout.AddString(&status) + if err = job.Run(); err != nil { return err } if status != "" { - return writeJSON(w, http.StatusOK, &APIAuth{Status: status}) + var env engine.Env + env.Set("Status", status) + return writeJSON(w, http.StatusOK, env) } w.WriteHeader(http.StatusNoContent) return nil diff --git a/api_params.go b/api_params.go index 9688063c6f..fb5ad6f388 100644 --- a/api_params.go +++ b/api_params.go @@ -31,10 +31,6 @@ type ( StatusCode int } - APIAuth struct { - Status string - } - APIImageConfig struct { ID string `json:"Id"` *Config diff --git a/commands.go b/commands.go index 572de84da0..08b2c01139 100644 --- a/commands.go +++ b/commands.go @@ -345,15 +345,15 @@ func (cli *DockerCli) CmdLogin(args ...string) error { return err } - var out2 APIAuth + var out2 engine.Env err = json.Unmarshal(body, &out2) if err != nil { cli.configFile, _ = auth.LoadConfig(os.Getenv("HOME")) return err } auth.SaveConfig(cli.configFile) - if out2.Status != "" { - fmt.Fprintf(cli.out, "%s\n", out2.Status) + if out2.Get("Status") != "" { + fmt.Fprintf(cli.out, "%s\n", out2.Get("Status")) } return nil } diff --git a/server.go b/server.go index cacfa715fc..5fbde5865d 100644 --- a/server.go +++ b/server.go @@ -104,6 +104,7 @@ func jobInitApi(job *engine.Job) engine.Status { "events": srv.Events, "push": srv.ImagePush, "containers": srv.Containers, + "auth": srv.Auth, } { if err := job.Eng.Register(name, handler); err != nil { job.Error(err) @@ -243,6 +244,19 @@ func (srv *Server) ContainerKill(job *engine.Job) engine.Status { } return engine.StatusOK } + +func (srv *Server) Auth(job *engine.Job) engine.Status { + authConfig := &auth.AuthConfig{} + job.GetenvJson("authConfig", authConfig) + status, err := auth.Login(authConfig, srv.HTTPRequestFactory(nil)) + if err != nil { + job.Error(err) + return engine.StatusErr + } + job.Printf("%s\n", status) + return engine.StatusOK +} + func (srv *Server) Events(job *engine.Job) engine.Status { if len(job.Args) != 1 { job.Errorf("Usage: %s FROM", job.Name)