use token auth for https remotes #275

Merged
6543 merged 3 commits from noerw/tea:issue-231-refacor-prompt into master 2020-12-07 14:14:56 +00:00
3 changed files with 7 additions and 33 deletions

@ -5,12 +5,9 @@
package git
import (
"bufio"
"fmt"
"io/ioutil"
"net/url"
"os"
"strings"
"code.gitea.io/tea/modules/utils"
@ -24,31 +21,15 @@ import (
// GetAuthForURL returns the appropriate AuthMethod to be used in Push() / Pull()
// operations depending on the protocol, and prompts the user for credentials if
// necessary.
func GetAuthForURL(remoteURL *url.URL, httpUser, keyFile string) (auth git_transport.AuthMethod, err error) {
user := remoteURL.User.Username()
func GetAuthForURL(remoteURL *url.URL, authToken, keyFile string) (auth git_transport.AuthMethod, err error) {
switch remoteURL.Scheme {
case "https":
if httpUser != "" {
user = httpUser
}
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 "http", "https":
6543 marked this conversation as resolved Outdated
Outdated
Review
-	case "https":
+	case "http", "https":
```diff - case "https": + case "http", "https": ```
Outdated
Review

it will close #262 if you would add it

it will close #262 if you would add it
Outdated
Review

I don't think so, the URL passed in their config is ssh://.
But we can add it anyway.

I don't think so, the URL passed in their config is `ssh://`. But we can add it anyway.
Outdated
Review

Yes plz

Yes plz
// gitea supports push/pull via app token as username.
auth = &gogit_http.BasicAuth{Password: "", Username: authToken}
case "ssh":
// 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)
if err != nil {
signer, err := readSSHPrivKey(keyFile)
@ -92,13 +73,6 @@ func readSSHPrivKey(keyFile string) (sig ssh.Signer, err error) {
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) {
fmt.Printf("%s password: ", domain)
pass, err := terminal.ReadPassword(0)

@ -60,7 +60,7 @@ func PullCheckout(login *config.Login, repoOwner, repoName string, index int64)
if err != nil {
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 {
return err
}

@ -78,7 +78,7 @@ call me again with the --ignore-sha flag`, pr.Head.Ref)
if err != nil {
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 {
return err
}