mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-30 16:55:25 +01:00 
			
		
		
		
	Add temporary authentication via environment variables (#639)
#633 Co-authored-by: Tim Riedl <mail@tim-riedl.de> Co-authored-by: techknowlogick <techknowlogick@noreply.gitea.com> Co-authored-by: Lunny Xiao <lunny@noreply.gitea.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-on: https://gitea.com/gitea/tea/pulls/639 Co-authored-by: Tim Riedl <uvulpos@noreply.gitea.com> Co-committed-by: Tim Riedl <uvulpos@noreply.gitea.com>
This commit is contained in:
		 Tim Riedl
					Tim Riedl
				
			
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			 techknowlogick
						techknowlogick
					
				
			
						parent
						
							449b2e3117
						
					
				
				
					commit
					d2ccead88b
				
			| @@ -9,7 +9,9 @@ import ( | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"code.gitea.io/sdk/gitea" | ||||
| 	"code.gitea.io/tea/modules/config" | ||||
| @@ -20,9 +22,7 @@ import ( | ||||
| 	"github.com/urfave/cli/v3" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	errNotAGiteaRepo = errors.New("No Gitea login found. You might want to specify --repo (and --login) to work outside of a repository") | ||||
| ) | ||||
| var errNotAGiteaRepo = errors.New("No Gitea login found. You might want to specify --repo (and --login) to work outside of a repository") | ||||
|  | ||||
| // TeaContext contains all context derived during command initialization and wraps cli.Context | ||||
| type TeaContext struct { | ||||
| @@ -125,6 +125,16 @@ func InitCommand(cmd *cli.Command) *TeaContext { | ||||
| 		c.RepoSlug = repoFlag | ||||
| 	} | ||||
|  | ||||
| 	// override config user with env variable | ||||
| 	envLogin := GetLoginByEnvVar() | ||||
| 	if envLogin != nil { | ||||
| 		_, err := utils.ValidateAuthenticationMethod(envLogin.URL, envLogin.Token, "", "", false, "", "") | ||||
| 		if err != nil { | ||||
| 			log.Fatal(err.Error()) | ||||
| 		} | ||||
| 		c.Login = envLogin | ||||
| 	} | ||||
|  | ||||
| 	// override login from flag, or use default login if repo based detection failed | ||||
| 	if len(loginFlag) != 0 { | ||||
| 		c.Login = config.GetLoginByName(loginFlag) | ||||
| @@ -230,3 +240,40 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L | ||||
|  | ||||
| 	return repo, nil, "", errNotAGiteaRepo | ||||
| } | ||||
|  | ||||
| // GetLoginByEnvVar returns a login based on environment variables, or nil if no login can be created | ||||
| func GetLoginByEnvVar() *config.Login { | ||||
| 	var token string | ||||
|  | ||||
| 	giteaToken := os.Getenv("GITEA_TOKEN") | ||||
| 	githubToken := os.Getenv("GH_TOKEN") | ||||
| 	giteaInstanceURL := os.Getenv("GITEA_INSTANCE_URL") | ||||
| 	instanceInsecure := os.Getenv("GITEA_INSTANCE_INSECURE") | ||||
| 	insecure := false | ||||
| 	if len(instanceInsecure) > 0 { | ||||
| 		insecure, _ = strconv.ParseBool(instanceInsecure) | ||||
| 	} | ||||
|  | ||||
| 	// if no tokens are set, or no instance url for gitea fail fast | ||||
| 	if len(giteaInstanceURL) == 0 || (len(giteaToken) == 0 && len(githubToken) == 0) { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	token = giteaToken | ||||
| 	if len(giteaToken) == 0 { | ||||
| 		token = githubToken | ||||
| 	} | ||||
|  | ||||
| 	return &config.Login{ | ||||
| 		Name:              "GITEA_LOGIN_VIA_ENV", | ||||
| 		URL:               giteaInstanceURL, | ||||
| 		Token:             token, | ||||
| 		Insecure:          insecure, | ||||
| 		SSHKey:            "", | ||||
| 		SSHCertPrincipal:  "", | ||||
| 		SSHKeyFingerprint: "", | ||||
| 		SSHAgent:          false, | ||||
| 		Created:           time.Now().Unix(), | ||||
| 		VersionCheck:      false, | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user