@@ -10,6 +10,7 @@ import (
1010
1111 "code.gitea.io/gitea/modules/auth"
1212 "code.gitea.io/gitea/modules/git"
13+ "code.gitea.io/gitea/modules/util"
1314
1415 "gitea.com/go-chi/binding"
1516 "github.com/gobwas/glob"
@@ -31,6 +32,7 @@ const (
3132// AddBindingRules adds additional binding rules
3233func AddBindingRules () {
3334 addGitRefNameBindingRule ()
35+ addValidURLListBindingRule ()
3436 addValidURLBindingRule ()
3537 addValidSiteURLBindingRule ()
3638 addGlobPatternRule ()
@@ -44,7 +46,7 @@ func addGitRefNameBindingRule() {
4446 // Git refname validation rule
4547 binding .AddRule (& binding.Rule {
4648 IsMatch : func (rule string ) bool {
47- return strings . HasPrefix ( rule , "GitRefName" )
49+ return rule == "GitRefName"
4850 },
4951 IsValid : func (errs binding.Errors , name string , val any ) (bool , binding.Errors ) {
5052 str := fmt .Sprintf ("%v" , val )
@@ -58,11 +60,38 @@ func addGitRefNameBindingRule() {
5860 })
5961}
6062
63+ func addValidURLListBindingRule () {
64+ // URL validation rule
65+ binding .AddRule (& binding.Rule {
66+ IsMatch : func (rule string ) bool {
67+ return rule == "ValidUrlList"
68+ },
69+ IsValid : func (errs binding.Errors , name string , val any ) (bool , binding.Errors ) {
70+ str := fmt .Sprintf ("%v" , val )
71+ if len (str ) == 0 {
72+ errs .Add ([]string {name }, binding .ERR_URL , "Url" )
73+ return false , errs
74+ }
75+
76+ ok := true
77+ urls := util .SplitTrimSpace (str , "\n " )
78+ for _ , u := range urls {
79+ if ! IsValidURL (u ) {
80+ ok = false
81+ errs .Add ([]string {name }, binding .ERR_URL , u )
82+ }
83+ }
84+
85+ return ok , errs
86+ },
87+ })
88+ }
89+
6190func addValidURLBindingRule () {
6291 // URL validation rule
6392 binding .AddRule (& binding.Rule {
6493 IsMatch : func (rule string ) bool {
65- return strings . HasPrefix ( rule , "ValidUrl" )
94+ return rule == "ValidUrl"
6695 },
6796 IsValid : func (errs binding.Errors , name string , val any ) (bool , binding.Errors ) {
6897 str := fmt .Sprintf ("%v" , val )
@@ -80,7 +109,7 @@ func addValidSiteURLBindingRule() {
80109 // URL validation rule
81110 binding .AddRule (& binding.Rule {
82111 IsMatch : func (rule string ) bool {
83- return strings . HasPrefix ( rule , "ValidSiteUrl" )
112+ return rule == "ValidSiteUrl"
84113 },
85114 IsValid : func (errs binding.Errors , name string , val any ) (bool , binding.Errors ) {
86115 str := fmt .Sprintf ("%v" , val )
@@ -171,7 +200,7 @@ func addUsernamePatternRule() {
171200func addValidGroupTeamMapRule () {
172201 binding .AddRule (& binding.Rule {
173202 IsMatch : func (rule string ) bool {
174- return strings . HasPrefix ( rule , "ValidGroupTeamMap" )
203+ return rule == "ValidGroupTeamMap"
175204 },
176205 IsValid : func (errs binding.Errors , name string , val any ) (bool , binding.Errors ) {
177206 _ , err := auth .UnmarshalGroupTeamMapping (fmt .Sprintf ("%v" , val ))
0 commit comments