use token auth for https remotes (#275)
use token for https auth instead of user name also handle http urls Co-authored-by: Norwin Roosen <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/275 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: 6543 <6543@obermui.de> Co-Authored-By: Norwin <noerw@noreply.gitea.io> Co-Committed-By: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
		
							parent
							
								
									16133212fc
								
							
						
					
					
						commit
						9a3b54b9a3
					
				| @ -5,12 +5,9 @@ | |||||||
| package git | package git | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"bufio" |  | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"os" |  | ||||||
| 	"strings" |  | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/tea/modules/utils" | 	"code.gitea.io/tea/modules/utils" | ||||||
| 
 | 
 | ||||||
| @ -24,31 +21,15 @@ import ( | |||||||
| // GetAuthForURL returns the appropriate AuthMethod to be used in Push() / Pull() | // GetAuthForURL returns the appropriate AuthMethod to be used in Push() / Pull() | ||||||
| // operations depending on the protocol, and prompts the user for credentials if | // operations depending on the protocol, and prompts the user for credentials if | ||||||
| // necessary. | // necessary. | ||||||
| func GetAuthForURL(remoteURL *url.URL, httpUser, keyFile string) (auth git_transport.AuthMethod, err error) { | func GetAuthForURL(remoteURL *url.URL, authToken, keyFile string) (auth git_transport.AuthMethod, err error) { | ||||||
| 	user := remoteURL.User.Username() |  | ||||||
| 
 |  | ||||||
| 	switch remoteURL.Scheme { | 	switch remoteURL.Scheme { | ||||||
| 	case "https": | 	case "http", "https": | ||||||
| 		if httpUser != "" { | 		// gitea supports push/pull via app token as username. | ||||||
| 			user = httpUser | 		auth = &gogit_http.BasicAuth{Password: "", Username: authToken} | ||||||
| 		} |  | ||||||
| 		if user == "" { |  | ||||||
| 			user, err = promptUser(remoteURL.Host) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return nil, err |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		pass, isSet := remoteURL.User.Password() |  | ||||||
| 		if !isSet { |  | ||||||
| 			pass, err = promptPass(remoteURL.Host) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return nil, err |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		auth = &gogit_http.BasicAuth{Password: pass, Username: user} |  | ||||||
| 
 | 
 | ||||||
| 	case "ssh": | 	case "ssh": | ||||||
| 		// try to select right key via ssh-agent. if it fails, try to read a key manually | 		// try to select right key via ssh-agent. if it fails, try to read a key manually | ||||||
|  | 		user := remoteURL.User.Username() | ||||||
| 		auth, err = gogit_ssh.DefaultAuthBuilder(user) | 		auth, err = gogit_ssh.DefaultAuthBuilder(user) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			signer, err := readSSHPrivKey(keyFile) | 			signer, err := readSSHPrivKey(keyFile) | ||||||
| @ -92,13 +73,6 @@ func readSSHPrivKey(keyFile string) (sig ssh.Signer, err error) { | |||||||
| 	return sig, err | 	return sig, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func promptUser(domain string) (string, error) { |  | ||||||
| 	reader := bufio.NewReader(os.Stdin) |  | ||||||
| 	fmt.Printf("%s username: ", domain) |  | ||||||
| 	username, err := reader.ReadString('\n') |  | ||||||
| 	return strings.TrimSpace(username), err |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func promptPass(domain string) (string, error) { | func promptPass(domain string) (string, error) { | ||||||
| 	fmt.Printf("%s password: ", domain) | 	fmt.Printf("%s password: ", domain) | ||||||
| 	pass, err := terminal.ReadPassword(0) | 	pass, err := terminal.ReadPassword(0) | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ func PullCheckout(login *config.Login, repoOwner, repoName string, index int64) | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	auth, err := local_git.GetAuthForURL(url, login.User, login.SSHKey) | 	auth, err := local_git.GetAuthForURL(url, login.Token, login.SSHKey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -78,7 +78,7 @@ call me again with the --ignore-sha flag`, pr.Head.Ref) | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	auth, err := local_git.GetAuthForURL(url, login.User, login.SSHKey) | 	auth, err := local_git.GetAuthForURL(url, login.Token, login.SSHKey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Norwin
						Norwin