func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) { config := &auth.AuthConfig{} if err := json.NewDecoder(r.Body).Decode(config); err != nil { return nil, err } if config.Username == srv.runtime.authConfig.Username { config.Password = srv.runtime.authConfig.Password } newAuthConfig := auth.NewAuthConfig(config.Username, config.Password, config.Email, srv.runtime.root) status, err := auth.Login(newAuthConfig) if err != nil { return nil, err } else { srv.runtime.graph.getHttpClient().Jar = cookiejar.NewCookieJar() srv.runtime.authConfig = newAuthConfig } if status != "" { b, err := json.Marshal(&ApiAuth{Status: status}) if err != nil { return nil, err } return b, nil } w.WriteHeader(http.StatusNoContent) return nil, nil }
func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { // FIXME: Handle multiple login at once config := &auth.AuthConfig{} if err := json.NewDecoder(r.Body).Decode(config); err != nil { return err } authConfig, err := auth.LoadConfig(srv.runtime.root) if err != nil { if err != auth.ErrConfigFileMissing { return err } authConfig = &auth.AuthConfig{} } if config.Username == authConfig.Username { config.Password = authConfig.Password } newAuthConfig := auth.NewAuthConfig(config.Username, config.Password, config.Email, srv.runtime.root) status, err := auth.Login(newAuthConfig) if err != nil { return err } if status != "" { b, err := json.Marshal(&ApiAuth{Status: status}) if err != nil { return err } writeJson(w, b) return nil } w.WriteHeader(http.StatusNoContent) return nil }
func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { config := &auth.AuthConfig{} if err := json.NewDecoder(r.Body).Decode(config); err != nil { return err } if config.Username == srv.registry.GetAuthConfig().Username { config.Password = srv.registry.GetAuthConfig().Password } newAuthConfig := auth.NewAuthConfig(config.Username, config.Password, config.Email, srv.runtime.root) status, err := auth.Login(newAuthConfig) if err != nil { return err } srv.registry.ResetClient(newAuthConfig) if status != "" { b, err := json.Marshal(&ApiAuth{Status: status}) if err != nil { return err } writeJson(w, b) return nil } w.WriteHeader(http.StatusNoContent) return nil }
// 'docker login': login / register a user to registry service. func (srv *Server) CmdLogin(stdin io.ReadCloser, stdout io.Writer, args ...string) error { cmd := rcli.Subcmd(stdout, "login", "", "Register or Login to the docker registry server") if err := cmd.Parse(args); err != nil { return nil } var username string var password string var email string fmt.Fprint(stdout, "Username (", srv.runtime.authConfig.Username, "): ") fmt.Fscanf(stdin, "%s", &username) if username == "" { username = srv.runtime.authConfig.Username } if username != srv.runtime.authConfig.Username { fmt.Fprint(stdout, "Password: "******"%s", &password) if password == "" { return errors.New("Error : Password Required\n") } fmt.Fprint(stdout, "Email (", srv.runtime.authConfig.Email, "): ") fmt.Fscanf(stdin, "%s", &email) if email == "" { email = srv.runtime.authConfig.Email } } else { password = srv.runtime.authConfig.Password email = srv.runtime.authConfig.Email } newAuthConfig := auth.NewAuthConfig(username, password, email, srv.runtime.root) status, err := auth.Login(newAuthConfig) if err != nil { fmt.Fprintf(stdout, "Error : %s\n", err) } else { srv.runtime.authConfig = newAuthConfig } if status != "" { fmt.Fprintf(stdout, status) } return nil }
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) if err != nil { return err } status := "" if version > 1.1 { status, err = auth.Login(authConfig, false) if err != nil { return err } } else { localAuthConfig, err := auth.LoadConfig(srv.runtime.root) if err != nil { if err != auth.ErrConfigFileMissing { return err } } if authConfig.Username == localAuthConfig.Username { authConfig.Password = localAuthConfig.Password } newAuthConfig := auth.NewAuthConfig(authConfig.Username, authConfig.Password, authConfig.Email, srv.runtime.root) status, err = auth.Login(newAuthConfig, true) if err != nil { return err } } if status != "" { b, err := json.Marshal(&APIAuth{Status: status}) if err != nil { return err } writeJSON(w, b) return nil } w.WriteHeader(http.StatusNoContent) return nil }
// 'docker login': login / register a user to registry service. func (srv *Server) CmdLogin(stdin io.ReadCloser, stdout rcli.DockerConn, args ...string) error { // Read a line on raw terminal with support for simple backspace // sequences and echo. // // This function is necessary because the login command must be done in a // raw terminal for two reasons: // - we have to read a password (without echoing it); // - the rcli "protocol" only supports cannonical and raw modes and you // can't tune it once the command as been started. var readStringOnRawTerminal = func(stdin io.Reader, stdout io.Writer, echo bool) string { char := make([]byte, 1) buffer := make([]byte, 64) var i = 0 for i < len(buffer) { n, err := stdin.Read(char) if n > 0 { if char[0] == '\r' || char[0] == '\n' { stdout.Write([]byte{'\r', '\n'}) break } else if char[0] == 127 || char[0] == '\b' { if i > 0 { if echo { stdout.Write([]byte{'\b', ' ', '\b'}) } i-- } } else if !unicode.IsSpace(rune(char[0])) && !unicode.IsControl(rune(char[0])) { if echo { stdout.Write(char) } buffer[i] = char[0] i++ } } if err != nil { if err != io.EOF { fmt.Fprintf(stdout, "Read error: %v\r\n", err) } break } } return string(buffer[:i]) } var readAndEchoString = func(stdin io.Reader, stdout io.Writer) string { return readStringOnRawTerminal(stdin, stdout, true) } var readString = func(stdin io.Reader, stdout io.Writer) string { return readStringOnRawTerminal(stdin, stdout, false) } stdout.SetOptionRawTerminal() cmd := rcli.Subcmd(stdout, "login", "", "Register or Login to the docker registry server") if err := cmd.Parse(args); err != nil { return nil } var username string var password string var email string fmt.Fprint(stdout, "Username (", srv.runtime.authConfig.Username, "): ") username = readAndEchoString(stdin, stdout) if username == "" { username = srv.runtime.authConfig.Username } if username != srv.runtime.authConfig.Username { fmt.Fprint(stdout, "Password: "******"" { return fmt.Errorf("Error : Password Required") } fmt.Fprint(stdout, "Email (", srv.runtime.authConfig.Email, "): ") email = readAndEchoString(stdin, stdout) if email == "" { email = srv.runtime.authConfig.Email } } else { password = srv.runtime.authConfig.Password email = srv.runtime.authConfig.Email } newAuthConfig := auth.NewAuthConfig(username, password, email, srv.runtime.root) status, err := auth.Login(newAuthConfig) if err != nil { fmt.Fprintf(stdout, "Error: %s\r\n", err) } else { srv.runtime.authConfig = newAuthConfig } if status != "" { fmt.Fprint(stdout, status) } return nil }