浏览代码

move auth to a job

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
Victor Vieux 11 年之前
父节点
当前提交
1f8b1bb84e
共有 4 个文件被更改,包括 28 次插入12 次删除
  1. 11 5
      api.go
  2. 0 4
      api_params.go
  3. 3 3
      commands.go
  4. 14 0
      server.go

+ 11 - 5
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 {
 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 {
 	if err != nil {
 		return err
 		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
 		return err
 	}
 	}
 	if status != "" {
 	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)
 	w.WriteHeader(http.StatusNoContent)
 	return nil
 	return nil

+ 0 - 4
api_params.go

@@ -31,10 +31,6 @@ type (
 		StatusCode int
 		StatusCode int
 	}
 	}
 
 
-	APIAuth struct {
-		Status string
-	}
-
 	APIImageConfig struct {
 	APIImageConfig struct {
 		ID string `json:"Id"`
 		ID string `json:"Id"`
 		*Config
 		*Config

+ 3 - 3
commands.go

@@ -345,15 +345,15 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 		return err
 		return err
 	}
 	}
 
 
-	var out2 APIAuth
+	var out2 engine.Env
 	err = json.Unmarshal(body, &out2)
 	err = json.Unmarshal(body, &out2)
 	if err != nil {
 	if err != nil {
 		cli.configFile, _ = auth.LoadConfig(os.Getenv("HOME"))
 		cli.configFile, _ = auth.LoadConfig(os.Getenv("HOME"))
 		return err
 		return err
 	}
 	}
 	auth.SaveConfig(cli.configFile)
 	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
 	return nil
 }
 }

+ 14 - 0
server.go

@@ -104,6 +104,7 @@ func jobInitApi(job *engine.Job) engine.Status {
 		"events":           srv.Events,
 		"events":           srv.Events,
 		"push":             srv.ImagePush,
 		"push":             srv.ImagePush,
 		"containers":       srv.Containers,
 		"containers":       srv.Containers,
+		"auth":             srv.Auth,
 	} {
 	} {
 		if err := job.Eng.Register(name, handler); err != nil {
 		if err := job.Eng.Register(name, handler); err != nil {
 			job.Error(err)
 			job.Error(err)
@@ -243,6 +244,19 @@ func (srv *Server) ContainerKill(job *engine.Job) engine.Status {
 	}
 	}
 	return engine.StatusOK
 	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 {
 func (srv *Server) Events(job *engine.Job) engine.Status {
 	if len(job.Args) != 1 {
 	if len(job.Args) != 1 {
 		job.Errorf("Usage: %s FROM", job.Name)
 		job.Errorf("Usage: %s FROM", job.Name)