From 6a848cb72a1a149d8c0a91c57657bcaca51e3978 Mon Sep 17 00:00:00 2001 From: Wim <42wim@noreply.gitea.io> Date: Mon, 31 Oct 2022 09:56:23 +0800 Subject: [PATCH] Add option to disable version checking (#520) Fixes "Only signed in user is allowed to call APIs." as the /api/v1/version returns a 403 when running a gitea where REQUIRE_SIGNIN_VIEW is enabled Co-authored-by: Wim Reviewed-on: https://gitea.com/gitea/tea/pulls/520 Reviewed-by: 6543 <6543@obermui.de> Reviewed-by: Lunny Xiao Co-authored-by: Wim <42wim@noreply.gitea.io> Co-committed-by: Wim <42wim@noreply.gitea.io> --- cmd/login/add.go | 8 +++++++- modules/config/login.go | 6 ++++++ modules/interact/login.go | 20 ++++++++++++++++---- modules/task/login_create.go | 3 ++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cmd/login/add.go b/cmd/login/add.go index fd3adb5..38607aa 100644 --- a/cmd/login/add.go +++ b/cmd/login/add.go @@ -30,6 +30,11 @@ var CmdLoginAdd = cli.Command{ EnvVars: []string{"GITEA_SERVER_URL"}, Usage: "Server URL", }, + &cli.BoolFlag{ + Name: "no-version-check", + Aliases: []string{"nv"}, + Usage: "Do not check version of Gitea instance", + }, &cli.StringFlag{ Name: "token", Aliases: []string{"t"}, @@ -96,5 +101,6 @@ func runLoginAdd(ctx *cli.Context) error { ctx.String("ssh-agent-principal"), ctx.String("ssh-agent-key"), ctx.Bool("insecure"), - sshAgent) + sshAgent, + !ctx.Bool("no-version-check")) } diff --git a/modules/config/login.go b/modules/config/login.go index bb35de7..31bf2bd 100644 --- a/modules/config/login.go +++ b/modules/config/login.go @@ -33,6 +33,7 @@ type Login struct { SSHAgent bool `yaml:"ssh_agent"` SSHKeyFingerprint string `yaml:"ssh_key_agent_pub"` SSHPassphrase string `yaml:"-"` + VersionCheck bool `yaml:"version_check"` // User is username from gitea User string `yaml:"user"` // Created is auto created unix timestamp @@ -182,6 +183,11 @@ func (l *Login) Client(options ...gitea.ClientOption) *gitea.Client { } } + // versioncheck must be prepended in options to make sure we don't hit any version checks in the sdk + if !l.VersionCheck { + options = append([]gitea.ClientOption{gitea.SetGiteaVersion("")}, options...) + } + options = append(options, gitea.SetToken(l.Token), gitea.SetHTTPClient(httpClient)) if ok, err := utils.IsKeyEncrypted(l.SSHKey); ok && err == nil && l.SSHPassphrase == "" { diff --git a/modules/interact/login.go b/modules/interact/login.go index c1fadf6..4f159eb 100644 --- a/modules/interact/login.go +++ b/modules/interact/login.go @@ -16,9 +16,12 @@ import ( // CreateLogin create an login interactive func CreateLogin() error { - var name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint string - var insecure = false - var sshAgent = false + var ( + name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint string + insecure, sshAgent, versionCheck bool + ) + + versionCheck = true promptI := &survey.Input{Message: "URL of Gitea instance: "} if err := survey.AskOne(promptI, &giteaURL, survey.WithValidator(survey.Required)); err != nil { @@ -128,7 +131,16 @@ func CreateLogin() error { if err = survey.AskOne(promptYN, &insecure); err != nil { return err } + + promptYN = &survey.Confirm{ + Message: "Check version of Gitea instance: ", + Default: true, + } + if err = survey.AskOne(promptYN, &versionCheck); err != nil { + return err + } + } - return task.CreateLogin(name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint, insecure, sshAgent) + return task.CreateLogin(name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint, insecure, sshAgent, versionCheck) } diff --git a/modules/task/login_create.go b/modules/task/login_create.go index d042cfb..7131e2f 100644 --- a/modules/task/login_create.go +++ b/modules/task/login_create.go @@ -16,7 +16,7 @@ import ( ) // CreateLogin create a login to be stored in config -func CreateLogin(name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint string, insecure, sshAgent bool) error { +func CreateLogin(name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, sshKeyFingerprint string, insecure, sshAgent, versionCheck bool) error { // checks ... // ... if we have a url if len(giteaURL) == 0 { @@ -65,6 +65,7 @@ func CreateLogin(name, token, user, passwd, sshKey, giteaURL, sshCertPrincipal, SSHKeyFingerprint: sshKeyFingerprint, SSHAgent: sshAgent, Created: time.Now().Unix(), + VersionCheck: versionCheck, } if len(token) == 0 && sshCertPrincipal == "" && !sshAgent && sshKey == "" {