Merge pull request '[FEAT] Trim spaces from repo names on form submission' (#5822) from gusted/forgejo-trim-spaces-form into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/5822
Reviewed-by: Otto <otto@codeberg.org>
This commit is contained in:
Otto 2024-11-06 09:16:17 +00:00
commit 0fb48872ac
31 changed files with 54 additions and 36 deletions

File diff suppressed because one or more lines are too long

2
go.mod
View file

@ -6,6 +6,7 @@ require (
code.forgejo.org/f3/gof3/v3 v3.7.0 code.forgejo.org/f3/gof3/v3 v3.7.0
code.forgejo.org/forgejo-contrib/go-libravatar v0.0.0-20191008002943-06d1c002b251 code.forgejo.org/forgejo-contrib/go-libravatar v0.0.0-20191008002943-06d1c002b251
code.forgejo.org/forgejo/reply v1.0.2 code.forgejo.org/forgejo/reply v1.0.2
code.forgejo.org/go-chi/binding v0.0.0-20241105210225-1f8bf5136720
code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d
code.forgejo.org/go-chi/captcha v0.0.0-20240905153133-df43b9250ed5 code.forgejo.org/go-chi/captcha v0.0.0-20240905153133-df43b9250ed5
code.forgejo.org/go-chi/session v0.0.0-20241017103059-2a992261fc26 code.forgejo.org/go-chi/session v0.0.0-20241017103059-2a992261fc26
@ -14,7 +15,6 @@ require (
code.gitea.io/sdk/gitea v0.17.1 code.gitea.io/sdk/gitea v0.17.1
codeberg.org/gusted/mcaptcha v0.0.0-20220723083913-4f3072e1d570 codeberg.org/gusted/mcaptcha v0.0.0-20220723083913-4f3072e1d570
connectrpc.com/connect v1.17.0 connectrpc.com/connect v1.17.0
gitea.com/go-chi/binding v0.0.0-20240430071103-39a851e106ed
gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4
github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121 github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358

4
go.sum
View file

@ -10,6 +10,8 @@ code.forgejo.org/forgejo/archiver/v3 v3.5.1 h1:UmmbA7D5550uf71SQjarmrn6yKwOGxtEj
code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
code.forgejo.org/forgejo/reply v1.0.2 h1:dMhQCHV6/O3L5CLWNTol+dNzDAuyCK88z4J/lCdgFuQ= code.forgejo.org/forgejo/reply v1.0.2 h1:dMhQCHV6/O3L5CLWNTol+dNzDAuyCK88z4J/lCdgFuQ=
code.forgejo.org/forgejo/reply v1.0.2/go.mod h1:RyZUfzQLc+fuLIGjTSQWDAJWPiL4WtKXB/FifT5fM7U= code.forgejo.org/forgejo/reply v1.0.2/go.mod h1:RyZUfzQLc+fuLIGjTSQWDAJWPiL4WtKXB/FifT5fM7U=
code.forgejo.org/go-chi/binding v0.0.0-20241105210225-1f8bf5136720 h1:DDdvrdov1a6HK0xiJIUTfGh1RpKP0prkHi2guxhDKIU=
code.forgejo.org/go-chi/binding v0.0.0-20241105210225-1f8bf5136720/go.mod h1:fWwqaHj0H1/KeCpBqdvKunflq8pYfciEHI5v3UUeE2E=
code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d h1:nOu/2GX571t4intmtfvpctS148OqsBYrGUySVm93ifc= code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d h1:nOu/2GX571t4intmtfvpctS148OqsBYrGUySVm93ifc=
code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d/go.mod h1:OVlZ/TqDYJ+RUJ+R+J+OLxtlyjo3pbjBeK7LAWAB+Vk= code.forgejo.org/go-chi/cache v0.0.0-20240912103640-dcb08fba860d/go.mod h1:OVlZ/TqDYJ+RUJ+R+J+OLxtlyjo3pbjBeK7LAWAB+Vk=
code.forgejo.org/go-chi/captcha v0.0.0-20240905153133-df43b9250ed5 h1:A7P1liXCpJBHEJ5KIDsF0ujnQ8FQ/aX1UixTW0vGrDQ= code.forgejo.org/go-chi/captcha v0.0.0-20240905153133-df43b9250ed5 h1:A7P1liXCpJBHEJ5KIDsF0ujnQ8FQ/aX1UixTW0vGrDQ=
@ -32,8 +34,6 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 h1:cliQ4HHsCo6xi2oWZYKWW4bly/Ory9FuTpFPRxj/mAg= git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 h1:cliQ4HHsCo6xi2oWZYKWW4bly/Ory9FuTpFPRxj/mAg=
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs= git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs=
gitea.com/go-chi/binding v0.0.0-20240430071103-39a851e106ed h1:EZZBtilMLSZNWtHHcgq2mt6NSGhJSZBuduAlinMEmso=
gitea.com/go-chi/binding v0.0.0-20240430071103-39a851e106ed/go.mod h1:E3i3cgB04dDx0v3CytCgRTTn9Z/9x891aet3r456RVw=
gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 h1:IFT+hup2xejHqdhS7keYWioqfmxdnfblFDTGoOwcZ+o= gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 h1:IFT+hup2xejHqdhS7keYWioqfmxdnfblFDTGoOwcZ+o=
gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4/go.mod h1:HBqmLbz56JWpfEGG0prskAV97ATNRoj5LDmPicD22hU= gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4/go.mod h1:HBqmLbz56JWpfEGG0prskAV97ATNRoj5LDmPicD22hU=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=

View file

@ -13,7 +13,7 @@ import (
"code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/container"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// Validate checks whether an IssueTemplate is considered valid, and returns the first error // Validate checks whether an IssueTemplate is considered valid, and returns the first error

View file

@ -11,7 +11,7 @@ import (
"code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/git"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
"github.com/gobwas/glob" "github.com/gobwas/glob"
) )

View file

@ -8,7 +8,7 @@ import (
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
chi "github.com/go-chi/chi/v5" chi "github.com/go-chi/chi/v5"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )

View file

@ -6,7 +6,7 @@ package validation
import ( import (
"testing" "testing"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
"github.com/gobwas/glob" "github.com/gobwas/glob"
) )

View file

@ -6,7 +6,7 @@ package validation
import ( import (
"testing" "testing"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
var gitRefNameValidationTestCases = []validationTestCase{ var gitRefNameValidationTestCases = []validationTestCase{

View file

@ -7,7 +7,7 @@ import (
"regexp" "regexp"
"testing" "testing"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
func getRegexPatternErrorString(pattern string) string { func getRegexPatternErrorString(pattern string) string {

View file

@ -6,7 +6,7 @@ package validation
import ( import (
"testing" "testing"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
var urlValidationTestCases = []validationTestCase{ var urlValidationTestCases = []validationTestCase{

View file

@ -13,7 +13,7 @@ import (
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation" "code.gitea.io/gitea/modules/validation"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// Form form binding interface // Form form binding interface

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
) )

View file

@ -103,7 +103,7 @@ import (
_ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation _ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
func sudo() func(ctx *context.APIContext) { func sudo() func(ctx *context.APIContext) {

View file

@ -15,7 +15,7 @@ import (
"code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
chi_middleware "github.com/go-chi/chi/v5/middleware" chi_middleware "github.com/go-chi/chi/v5/middleware"
) )

View file

@ -40,7 +40,7 @@ import (
remote_service "code.gitea.io/gitea/services/remote" remote_service "code.gitea.io/gitea/services/remote"
user_service "code.gitea.io/gitea/services/user" user_service "code.gitea.io/gitea/services/user"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
"github.com/golang-jwt/jwt/v5" "github.com/golang-jwt/jwt/v5"
"github.com/markbates/goth" "github.com/markbates/goth"
"github.com/markbates/goth/gothic" "github.com/markbates/goth/gothic"

View file

@ -58,7 +58,7 @@ import (
pull_service "code.gitea.io/gitea/services/pull" pull_service "code.gitea.io/gitea/services/pull"
repo_service "code.gitea.io/gitea/services/repository" repo_service "code.gitea.io/gitea/services/repository"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
const ( const (

View file

@ -28,7 +28,7 @@ import (
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
webhook_service "code.gitea.io/gitea/services/webhook" webhook_service "code.gitea.io/gitea/services/webhook"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
const ( const (

View file

@ -10,7 +10,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// AdminCreateUserForm form for admin to create user // AdminCreateUserForm form for admin to create user

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// AuthenticationForm form for authentication // AuthenticationForm form for authentication

View file

@ -11,7 +11,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// ________ .__ __ .__ // ________ .__ __ .__

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
type PackageCleanupRuleForm struct { type PackageCleanupRuleForm struct {

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// NewBranchForm form for creating a new branch // NewBranchForm form for creating a new branch

View file

@ -21,13 +21,13 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// CreateRepoForm form for creating repository // CreateRepoForm form for creating repository
type CreateRepoForm struct { type CreateRepoForm struct {
UID int64 `binding:"Required"` UID int64 `binding:"Required"`
RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"` RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)" preprocess:"TrimSpace"`
Private bool Private bool
Description string `binding:"MaxSize(2048)"` Description string `binding:"MaxSize(2048)"`
DefaultBranch string `binding:"GitRefName;MaxSize(100)"` DefaultBranch string `binding:"GitRefName;MaxSize(100)"`

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// ProtectTagForm form for changing protected tag settings // ProtectTagForm form for changing protected tag settings

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// EditRunnerForm form for admin to create runner // EditRunnerForm form for admin to create runner

View file

@ -16,7 +16,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// InstallForm form for installation page // InstallForm form for installation page

View file

@ -9,7 +9,7 @@ import (
"code.gitea.io/gitea/modules/web/middleware" "code.gitea.io/gitea/modules/web/middleware"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
// SignInOpenIDForm form for signing in with OpenID // SignInOpenIDForm form for signing in with OpenID

View file

@ -26,7 +26,7 @@ import (
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
"code.gitea.io/gitea/services/webhook/shared" "code.gitea.io/gitea/services/webhook/shared"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
type discordHandler struct{} type discordHandler struct{}

View file

@ -22,7 +22,7 @@ import (
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
"code.gitea.io/gitea/services/webhook/shared" "code.gitea.io/gitea/services/webhook/shared"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
) )
type slackHandler struct{} type slackHandler struct{}

View file

@ -24,7 +24,7 @@ import (
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
"code.gitea.io/gitea/services/webhook/shared" "code.gitea.io/gitea/services/webhook/shared"
"gitea.com/go-chi/binding" "code.forgejo.org/go-chi/binding"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )

View file

@ -11,9 +11,11 @@ import (
"strings" "strings"
"testing" "testing"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/modules/translation" "code.gitea.io/gitea/modules/translation"
"code.gitea.io/gitea/tests" "code.gitea.io/gitea/tests"
@ -135,3 +137,19 @@ func TestRepoGenerateToOrg(t *testing.T) {
testRepoGenerate(t, session, "44", "user27", "template1", user, org, "generated2") testRepoGenerate(t, session, "44", "user27", "template1", user, org, "generated2")
} }
func TestRepoCreateFormTrimSpace(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
session := loginUser(t, user.Name)
req := NewRequestWithValues(t, "POST", "/repo/create", map[string]string{
"_csrf": GetCSRF(t, session, "/repo/create"),
"uid": "2",
"repo_name": " spaced-name ",
})
resp := session.MakeRequest(t, req, http.StatusSeeOther)
assert.EqualValues(t, "/user2/spaced-name", test.RedirectURL(resp))
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: 2, Name: "spaced-name"})
}