diff options
author | Lanre Adelowo | 2019-01-21 16:55:12 +0100 |
---|---|---|
committer | Lauris BH | 2019-01-21 17:55:12 +0200 |
commit | 4577cddd285f066b65bc2619f3d6b5d087f0ab4a (patch) | |
tree | f0c1c6fb3908acccd3854c20403d4c3c37c5075f | |
parent | 8da5237107c369209fefab0b1afb52419937ca0f (diff) |
Disallow empty titles (#5785) (#5794)
* add util method and tests
* make sure the title of an issue cannot be empty
* wiki title cannot be empty
* pull request title cannot be empty
* update to make use of the new util methof
-rw-r--r-- | cmd/cmd.go | 5 | ||||
-rw-r--r-- | modules/util/util.go | 5 | ||||
-rw-r--r-- | modules/util/util_test.go | 17 | ||||
-rw-r--r-- | options/locale/locale_en-US.ini | 1 | ||||
-rw-r--r-- | routers/repo/issue.go | 7 | ||||
-rw-r--r-- | routers/repo/pull.go | 11 | ||||
-rw-r--r-- | routers/repo/wiki.go | 5 |
7 files changed, 48 insertions, 3 deletions
diff --git a/cmd/cmd.go b/cmd/cmd.go index d246d2599..5a55ac318 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -9,10 +9,11 @@ package cmd import ( "errors" "fmt" - "strings" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" + "github.com/urfave/cli" ) @@ -24,7 +25,7 @@ func argsSet(c *cli.Context, args ...string) error { return errors.New(a + " is not set") } - if len(strings.TrimSpace(c.String(a))) == 0 { + if util.IsEmptyString(a) { return errors.New(a + " is required") } } diff --git a/modules/util/util.go b/modules/util/util.go index 5dcbe448f..b2067c8df 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -98,3 +98,8 @@ func Min(a, b int) int { } return a } + +// IsEmptyString checks if the provided string is empty +func IsEmptyString(s string) bool { + return len(strings.TrimSpace(s)) == 0 +} diff --git a/modules/util/util_test.go b/modules/util/util_test.go index d9357ffa3..3a2b4b71f 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -77,3 +77,20 @@ func TestIsExternalURL(t *testing.T) { assert.Equal(t, test.Expected, IsExternalURL(test.RawURL)) } } + +func TestIsEmptyString(t *testing.T) { + + cases := []struct { + s string + expected bool + }{ + {"", true}, + {" ", true}, + {" ", true}, + {" a", false}, + } + + for _, v := range cases { + assert.Equal(t, v.expected, IsEmptyString(v.s)) + } +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 0835175f1..dd1a928bf 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -655,6 +655,7 @@ ext_issues.desc = Link to an external issue tracker. issues.desc = Organize bug reports, tasks and milestones. issues.new = New Issue +issues.new.title_empty = Title cannot be empty issues.new.labels = Labels issues.new.no_label = No Label issues.new.clear_labels = Clear labels diff --git a/routers/repo/issue.go b/routers/repo/issue.go index f025cc388..3c5eac7ab 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -355,7 +355,7 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles } } -// NewIssue render createing issue page +// NewIssue render creating issue page func NewIssue(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.issues.new") ctx.Data["PageIsIssueList"] = true @@ -494,6 +494,11 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { return } + if util.IsEmptyString(form.Title) { + ctx.RenderWithErr(ctx.Tr("repo.issues.new.title_empty"), tplIssueNew, form) + return + } + issue := &models.Issue{ RepoID: repo.ID, Title: form.Title, diff --git a/routers/repo/pull.go b/routers/repo/pull.go index b38ba3bf5..f408948a1 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -22,6 +22,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" "github.com/Unknwon/com" ) @@ -860,6 +861,16 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) return } + if util.IsEmptyString(form.Title) { + PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch) + if ctx.Written() { + return + } + + ctx.RenderWithErr(ctx.Tr("repo.issues.new.title_empty"), tplComparePull, form) + return + } + patch, err := headGitRepo.GetPatch(prInfo.MergeBase, headBranch) if err != nil { ctx.ServerError("GetPatch", err) diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go index 7e5212977..4cea3c890 100644 --- a/routers/repo/wiki.go +++ b/routers/repo/wiki.go @@ -341,6 +341,11 @@ func NewWikiPost(ctx *context.Context, form auth.NewWikiForm) { return } + if util.IsEmptyString(form.Title) { + ctx.RenderWithErr(ctx.Tr("repo.issues.new.title_empty"), tplWikiNew, form) + return + } + wikiName := models.NormalizeWikiName(form.Title) if err := ctx.Repo.Repository.AddWikiPage(ctx.User, wikiName, form.Content, form.Message); err != nil { if models.IsErrWikiReservedName(err) { |