move auth to a job

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
Victor Vieux 2014-01-24 16:39:41 -08:00
parent e2003fea3a
commit 1f8b1bb84e
4 changed files with 28 additions and 12 deletions

16
api.go
View File

@ -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{} var (
err := json.NewDecoder(r.Body).Decode(authConfig) 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)) job.Setenv("authConfig", string(authConfig))
if err != nil { 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

View File

@ -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

View File

@ -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 != "" { if out2.Get("Status") != "" {
fmt.Fprintf(cli.out, "%s\n", out2.Status) fmt.Fprintf(cli.out, "%s\n", out2.Get("Status"))
} }
return nil return nil
} }

View File

@ -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)