浏览代码

update docs, remove config file on 401

Victor Vieux 12 年之前
父节点
当前提交
90f6bdd6e4
共有 4 个文件被更改,包括 36 次插入12 次删除
  1. 4 0
      api.go
  2. 3 2
      auth/auth.go
  3. 22 10
      commands.go
  4. 7 0
      docs/sources/api/docker_remote_api_v1.2.rst

+ 4 - 0
api.go

@@ -49,6 +49,10 @@ func httpError(w http.ResponseWriter, err error) {
 		http.Error(w, err.Error(), http.StatusConflict)
 	} else if strings.HasPrefix(err.Error(), "Impossible") {
 		http.Error(w, err.Error(), http.StatusNotAcceptable)
+	} else if strings.HasPrefix(err.Error(), "Wrong login/password") {
+		http.Error(w, err.Error(), http.StatusUnauthorized)
+	} else if strings.Contains(err.Error(), "hasn't been activated") {
+		http.Error(w, err.Error(), http.StatusForbidden)
 	} else {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 	}

+ 3 - 2
auth/auth.go

@@ -146,7 +146,7 @@ func Login(authConfig *AuthConfig, store bool) (string, error) {
 
 	if reqStatusCode == 201 {
 		status = "Account created. Please use the confirmation link we sent" +
-			" to your e-mail to activate it.\n"
+			" to your e-mail to activate it."
 		storeConfig = true
 	} else if reqStatusCode == 403 {
 		return "", fmt.Errorf("Login: Your account hasn't been activated. " +
@@ -165,10 +165,11 @@ func Login(authConfig *AuthConfig, store bool) (string, error) {
 				return "", err
 			}
 			if resp.StatusCode == 200 {
-				status = "Login Succeeded\n"
+				status = "Login Succeeded"
 				storeConfig = true
 			} else if resp.StatusCode == 401 {
 				if store {
+					authConfig.Email = ""
 					if err := SaveConfig(authConfig); err != nil {
 						return "", err
 					}

+ 22 - 10
commands.go

@@ -296,16 +296,21 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 	if username == "" {
 		username = cli.authConfig.Username
 	}
-	fmt.Print("Password: ")
-	password = readString(os.Stdin, os.Stdout)
+	if username != cli.authConfig.Username {
+		fmt.Print("Password: ")
+		password = readString(os.Stdin, os.Stdout)
 
-	if password == "" {
-		return fmt.Errorf("Error : Password Required")
-	}
+		if password == "" {
+			return fmt.Errorf("Error : Password Required")
+		}
 
-	fmt.Print("Email (", cli.authConfig.Email, "): ")
-	email = readAndEchoString(os.Stdin, os.Stdout)
-	if email == "" {
+		fmt.Print("Email (", cli.authConfig.Email, "): ")
+		email = readAndEchoString(os.Stdin, os.Stdout)
+		if email == "" {
+			email = cli.authConfig.Email
+		}
+	} else {
+		password = cli.authConfig.Password
 		email = cli.authConfig.Email
 	}
 	term.RestoreTerminal(oldState)
@@ -314,7 +319,14 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 	cli.authConfig.Password = password
 	cli.authConfig.Email = email
 
-	body, _, err := cli.call("POST", "/auth", cli.authConfig)
+	body, statusCode, err := cli.call("POST", "/auth", cli.authConfig)
+	if statusCode == 401 {
+		cli.authConfig.Username = ""
+		cli.authConfig.Password = ""
+		cli.authConfig.Email = ""
+		auth.SaveConfig(cli.authConfig)
+		return err
+	}
 	if err != nil {
 		return err
 	}
@@ -327,7 +339,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 	}
 	auth.SaveConfig(cli.authConfig)
 	if out2.Status != "" {
-		fmt.Print(out2.Status)
+		fmt.Println(out2.Status)
 	}
 	return nil
 }

+ 7 - 0
docs/sources/api/docker_remote_api_v1.2.rst

@@ -877,9 +877,16 @@ Check auth configuration
         .. sourcecode:: http
 
            HTTP/1.1 200 OK
+	   Content-Type: application/json
+
+	   {
+		"Status": "Login Succeeded"
+	   }
 
         :statuscode 200: no error
         :statuscode 204: no error
+        :statuscode 401: unauthorized
+        :statuscode 403: forbidden
         :statuscode 500: server error