diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/admin_auth_smtp.go | 4 | ||||
-rw-r--r-- | cmd/admin_auth_smtp_test.go | 58 | ||||
-rw-r--r-- | cmd/cert.go | 4 | ||||
-rw-r--r-- | cmd/cmd.go | 10 | ||||
-rw-r--r-- | cmd/cmd_test.go | 38 | ||||
-rw-r--r-- | cmd/dump_repo.go | 4 | ||||
-rw-r--r-- | cmd/hook.go | 4 | ||||
-rw-r--r-- | cmd/main.go | 2 | ||||
-rw-r--r-- | cmd/manager_logging.go | 3 | ||||
-rw-r--r-- | cmd/web.go | 4 |
10 files changed, 82 insertions, 49 deletions
diff --git a/cmd/admin_auth_smtp.go b/cmd/admin_auth_smtp.go index e9daf71809..93e0587fc3 100644 --- a/cmd/admin_auth_smtp.go +++ b/cmd/admin_auth_smtp.go @@ -39,12 +39,10 @@ func smtpCLIFlags() []cli.Flag { &cli.BoolFlag{ Name: "force-smtps", Usage: "SMTPS is always used on port 465. Set this to force SMTPS on other ports.", - Value: true, }, &cli.BoolFlag{ Name: "skip-verify", Usage: "Skip TLS verify.", - Value: true, }, &cli.StringFlag{ Name: "helo-hostname", @@ -54,7 +52,6 @@ func smtpCLIFlags() []cli.Flag { &cli.BoolFlag{ Name: "disable-helo", Usage: "Disable SMTP helo.", - Value: true, }, &cli.StringFlag{ Name: "allowed-domains", @@ -64,7 +61,6 @@ func smtpCLIFlags() []cli.Flag { &cli.BoolFlag{ Name: "skip-local-2fa", Usage: "Skip 2FA to log on.", - Value: true, }, &cli.BoolFlag{ Name: "active", diff --git a/cmd/admin_auth_smtp_test.go b/cmd/admin_auth_smtp_test.go index 9778ff87d2..e54e01830c 100644 --- a/cmd/admin_auth_smtp_test.go +++ b/cmd/admin_auth_smtp_test.go @@ -60,10 +60,8 @@ func TestAddSMTP(t *testing.T) { Auth: "PLAIN", Host: "localhost", Port: 25, - // ForceSMTPS: true, - // SkipVerify: true, }, - TwoFactorPolicy: "skip", + TwoFactorPolicy: "", }, }, { @@ -73,12 +71,12 @@ func TestAddSMTP(t *testing.T) { "--host", "localhost", "--port", "25", "--auth-type", "LOGIN", - "--force-smtps=false", - "--skip-verify=false", + "--force-smtps", + "--skip-verify", "--helo-hostname", "example.com", - "--disable-helo=false", + "--disable-helo=true", "--allowed-domains", "example.com,example.org", - "--skip-local-2fa=false", + "--skip-local-2fa", "--active=false", }, source: &auth_model.Source{ @@ -89,13 +87,13 @@ func TestAddSMTP(t *testing.T) { Auth: "LOGIN", Host: "localhost", Port: 25, - ForceSMTPS: false, - SkipVerify: false, + ForceSMTPS: true, + SkipVerify: true, HeloHostname: "example.com", - DisableHelo: false, + DisableHelo: true, AllowedDomains: "example.com,example.org", }, - TwoFactorPolicy: "", + TwoFactorPolicy: "skip", }, }, } @@ -157,13 +155,10 @@ func TestUpdateSMTP(t *testing.T) { Name: "old name", IsActive: true, Cfg: &smtp.Source{ - Auth: "PLAIN", - Host: "old host", - Port: 26, - ForceSMTPS: true, - SkipVerify: true, + Auth: "PLAIN", + Host: "old host", + Port: 26, }, - TwoFactorPolicy: "", }, args: []string{ "--id", "1", @@ -177,13 +172,10 @@ func TestUpdateSMTP(t *testing.T) { Name: "test", IsActive: true, Cfg: &smtp.Source{ - Auth: "PLAIN", - Host: "localhost", - Port: 25, - ForceSMTPS: true, - SkipVerify: true, + Auth: "PLAIN", + Host: "localhost", + Port: 25, }, - TwoFactorPolicy: "skip", }, }, { @@ -197,10 +189,7 @@ func TestUpdateSMTP(t *testing.T) { Auth: "PLAIN", Host: "old host", Port: 26, - ForceSMTPS: true, - SkipVerify: true, HeloHostname: "old.example.com", - DisableHelo: false, AllowedDomains: "old.example.com", }, TwoFactorPolicy: "", @@ -211,12 +200,12 @@ func TestUpdateSMTP(t *testing.T) { "--host", "localhost", "--port", "25", "--auth-type", "LOGIN", - "--force-smtps=false", - "--skip-verify=false", + "--force-smtps", + "--skip-verify", "--helo-hostname", "example.com", - "--disable-helo=true", + "--disable-helo", "--allowed-domains", "example.com,example.org", - "--skip-local-2fa=true", + "--skip-local-2fa", "--active=false", }, authSource: &auth_model.Source{ @@ -228,8 +217,8 @@ func TestUpdateSMTP(t *testing.T) { Auth: "LOGIN", Host: "localhost", Port: 25, - ForceSMTPS: false, - SkipVerify: false, + ForceSMTPS: true, + SkipVerify: true, HeloHostname: "example.com", DisableHelo: true, AllowedDomains: "example.com,example.org", @@ -252,11 +241,8 @@ func TestUpdateSMTP(t *testing.T) { Name: "test", IsActive: true, Cfg: &smtp.Source{ - Auth: "PLAIN", - SkipVerify: true, - ForceSMTPS: true, + Auth: "PLAIN", }, - TwoFactorPolicy: "skip", }, nil }, diff --git a/cmd/cert.go b/cmd/cert.go index 8cc9f43528..53b4f9dcb4 100644 --- a/cmd/cert.go +++ b/cmd/cert.go @@ -156,8 +156,8 @@ func runCert(_ context.Context, c *cli.Command) error { BasicConstraintsValid: true, } - hosts := strings.Split(c.String("host"), ",") - for _, h := range hosts { + hosts := strings.SplitSeq(c.String("host"), ",") + for h := range hosts { if ip := net.ParseIP(h); ip != nil { template.IPAddresses = append(template.IPAddresses, ip) } else { diff --git a/cmd/cmd.go b/cmd/cmd.go index 7a4d5d0d89..5b96bcbf9a 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -132,3 +132,13 @@ func PrepareConsoleLoggerLevel(defaultLevel log.Level) func(context.Context, *cl return ctx, nil } } + +func isValidDefaultSubCommand(cmd *cli.Command) (string, bool) { + // Dirty patch for urfave/cli's strange design. + // "./gitea bad-cmd" should not start the web server. + rootArgs := cmd.Root().Args().Slice() + if len(rootArgs) != 0 && rootArgs[0] != cmd.Name { + return rootArgs[0], false + } + return "", true +} diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go new file mode 100644 index 0000000000..a36d05c76e --- /dev/null +++ b/cmd/cmd_test.go @@ -0,0 +1,38 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package cmd + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/urfave/cli/v3" +) + +func TestDefaultCommand(t *testing.T) { + test := func(t *testing.T, args []string, expectedRetName string, expectedRetValid bool) { + called := false + cmd := &cli.Command{ + DefaultCommand: "test", + Commands: []*cli.Command{ + { + Name: "test", + Action: func(ctx context.Context, command *cli.Command) error { + retName, retValid := isValidDefaultSubCommand(command) + assert.Equal(t, expectedRetName, retName) + assert.Equal(t, expectedRetValid, retValid) + called = true + return nil + }, + }, + }, + } + assert.NoError(t, cmd.Run(t.Context(), args)) + assert.True(t, called) + } + test(t, []string{"./gitea"}, "", true) + test(t, []string{"./gitea", "test"}, "", true) + test(t, []string{"./gitea", "other"}, "other", false) +} diff --git a/cmd/dump_repo.go b/cmd/dump_repo.go index 8dd4fd86e7..a75b2d1b94 100644 --- a/cmd/dump_repo.go +++ b/cmd/dump_repo.go @@ -137,8 +137,8 @@ func runDumpRepository(ctx context.Context, cmd *cli.Command) error { opts.PullRequests = true opts.ReleaseAssets = true } else { - units := strings.Split(cmd.String("units"), ",") - for _, unit := range units { + units := strings.SplitSeq(cmd.String("units"), ",") + for unit := range units { switch strings.ToLower(strings.TrimSpace(unit)) { case "": continue diff --git a/cmd/hook.go b/cmd/hook.go index 4621137e01..2ce272b411 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -480,7 +480,7 @@ func hookPrintResult(output, isCreate bool, branch, url string) { func pushOptions() map[string]string { opts := make(map[string]string) if pushCount, err := strconv.Atoi(os.Getenv(private.GitPushOptionCount)); err == nil { - for idx := 0; idx < pushCount; idx++ { + for idx := range pushCount { opt := os.Getenv(fmt.Sprintf("GIT_PUSH_OPTION_%d", idx)) kv := strings.SplitN(opt, "=", 2) if len(kv) == 2 { @@ -732,7 +732,7 @@ func readPktLine(ctx context.Context, in *bufio.Reader, requestType pktLineType) // read prefix lengthBytes := make([]byte, 4) - for i := 0; i < 4; i++ { + for i := range 4 { lengthBytes[i], err = in.ReadByte() if err != nil { return nil, fail(ctx, "Protocol: stdin error", "Pkt-Line: read stdin failed : %v", err) diff --git a/cmd/main.go b/cmd/main.go index 128b8776b4..3b8a8a9311 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -152,6 +152,8 @@ func NewMainApp(appVer AppVersion) *cli.Command { CmdDocs, } + // TODO: we should eventually drop the default command, + // but not sure whether it would break Windows users who used to double-click the EXE to run. app.DefaultCommand = CmdWeb.Name app.Flags = append(app.Flags, cli.VersionFlag) diff --git a/cmd/manager_logging.go b/cmd/manager_logging.go index c83073e9c6..ac29e7d3e5 100644 --- a/cmd/manager_logging.go +++ b/cmd/manager_logging.go @@ -119,7 +119,6 @@ var ( Name: "rotate", Aliases: []string{"r"}, Usage: "Rotate logs", - Value: true, }, &cli.Int64Flag{ Name: "max-size", @@ -130,7 +129,6 @@ var ( Name: "daily", Aliases: []string{"d"}, Usage: "Rotate logs daily", - Value: true, }, &cli.IntFlag{ Name: "max-days", @@ -141,7 +139,6 @@ var ( Name: "compress", Aliases: []string{"z"}, Usage: "Compress rotated logs", - Value: true, }, &cli.IntFlag{ Name: "compression-level", diff --git a/cmd/web.go b/cmd/web.go index 39e336fe54..61ee3cbc20 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -251,6 +251,10 @@ func runWeb(_ context.Context, cmd *cli.Command) error { } }() + if subCmdName, valid := isValidDefaultSubCommand(cmd); !valid { + return fmt.Errorf("unknown command: %s", subCmdName) + } + managerCtx, cancel := context.WithCancel(context.Background()) graceful.InitManager(managerCtx) defer cancel() |