mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Add Repository/user name filter
This commit is contained in:
		| @@ -5,7 +5,7 @@ Gogs(Go Git Service) is a GitHub-like clone in the Go Programming Language. | ||||
|  | ||||
| Since we choose to use pure Go implementation of Git manipulation, Gogs certainly supports **ALL platforms**  that Go supports, including Linux, Max OS X, and Windows with **ZERO** dependency. | ||||
|  | ||||
| ##### Current version: 0.1.1 Alpha | ||||
| ##### Current version: 0.1.4 Alpha | ||||
|  | ||||
| ## Purpose | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							| @@ -20,7 +20,7 @@ import ( | ||||
| // Test that go1.1 tag above is included in builds. main.go refers to this definition. | ||||
| const go11tag = true | ||||
|  | ||||
| const APP_VER = "0.1.2.0320.1" | ||||
| const APP_VER = "0.1.3.0320.1" | ||||
|  | ||||
| func init() { | ||||
| 	base.AppVer = APP_VER | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import ( | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"path/filepath" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| @@ -82,6 +83,7 @@ var ( | ||||
| 	ErrRepoAlreadyExist = errors.New("Repository already exist") | ||||
| 	ErrRepoNotExist     = errors.New("Repository does not exist") | ||||
| 	ErrRepoFileNotExist = errors.New("Target Repo file does not exist") | ||||
| 	ErrRepoNameIllegal  = errors.New("Repository name contains illegal characters") | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| @@ -104,6 +106,15 @@ func init() { | ||||
| 			os.Exit(2) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Initialize illegal patterns. | ||||
| 	for i := range illegalPatterns[1:] { | ||||
| 		pattern := "" | ||||
| 		for j := range illegalPatterns[i+1] { | ||||
| 			pattern += "[" + string(illegalPatterns[i+1][j]-32) + string(illegalPatterns[i+1][j]) + "]" | ||||
| 		} | ||||
| 		illegalPatterns[i+1] = pattern | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // IsRepositoryExist returns true if the repository with given name under user has already existed. | ||||
| @@ -120,8 +131,28 @@ func IsRepositoryExist(user *User, repoName string) (bool, error) { | ||||
| 	return s.IsDir(), nil | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	// Define as all lower case!! | ||||
| 	illegalPatterns = []string{"[.][Gg][Ii][Tt]", "user", "help", "stars", "issues", "pulls", "commits", "admin", "repo", "template"} | ||||
| ) | ||||
|  | ||||
| // IsLegalName returns false if name contains illegal characters. | ||||
| func IsLegalName(repoName string) bool { | ||||
| 	for _, pattern := range illegalPatterns { | ||||
| 		has, _ := regexp.MatchString(pattern, repoName) | ||||
| 		if has { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // CreateRepository creates a repository for given user or orgnaziation. | ||||
| func CreateRepository(user *User, repoName, desc, repoLang, license string, private bool, initReadme bool) (*Repository, error) { | ||||
| 	if !IsLegalName(repoName) { | ||||
| 		return nil, ErrRepoNameIllegal | ||||
| 	} | ||||
|  | ||||
| 	isExist, err := IsRepositoryExist(user, repoName) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|   | ||||
| @@ -79,6 +79,7 @@ var ( | ||||
| 	ErrUserAlreadyExist = errors.New("User already exist") | ||||
| 	ErrUserNotExist     = errors.New("User does not exist") | ||||
| 	ErrEmailAlreadyUsed = errors.New("E-mail already used") | ||||
| 	ErrUserNameIllegal  = errors.New("User name contains illegal characters") | ||||
| ) | ||||
|  | ||||
| // IsUserExist checks if given user name exist, | ||||
| @@ -108,6 +109,10 @@ func GetUserSalt() string { | ||||
|  | ||||
| // RegisterUser creates record of a new user. | ||||
| func RegisterUser(user *User) (*User, error) { | ||||
| 	if !IsLegalName(user.Name) { | ||||
| 		return nil, ErrUserNameIllegal | ||||
| 	} | ||||
|  | ||||
| 	isExist, err := IsUserExist(user.Name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|   | ||||
| @@ -31,6 +31,9 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) { | ||||
| 	} else if err == models.ErrRepoAlreadyExist { | ||||
| 		ctx.RenderWithErr("Repository name has already been used", "repo/create", &form) | ||||
| 		return | ||||
| 	} else if err == models.ErrRepoNameIllegal { | ||||
| 		ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "repo/create", &form) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Handle(200, "repo.Create", err) | ||||
| } | ||||
|   | ||||
| @@ -217,6 +217,11 @@ func Setting(ctx *middleware.Context, params martini.Params) { | ||||
| 		title = t | ||||
| 	} | ||||
|  | ||||
| 	if len(params["branchname"]) == 0 { | ||||
| 		params["branchname"] = "master" | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["Branchname"] = params["branchname"] | ||||
| 	ctx.Data["Title"] = title + " - settings" | ||||
| 	ctx.HTML(200, "repo/setting") | ||||
| } | ||||
|   | ||||
| @@ -139,11 +139,13 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) { | ||||
|  | ||||
| 	var err error | ||||
| 	if u, err = models.RegisterUser(u); err != nil { | ||||
| 		switch err.Error() { | ||||
| 		case models.ErrUserAlreadyExist.Error(): | ||||
| 		switch err { | ||||
| 		case models.ErrUserAlreadyExist: | ||||
| 			ctx.RenderWithErr("Username has been already taken", "user/signup", &form) | ||||
| 		case models.ErrEmailAlreadyUsed.Error(): | ||||
| 		case models.ErrEmailAlreadyUsed: | ||||
| 			ctx.RenderWithErr("E-mail address has been already used", "user/signup", &form) | ||||
| 		case models.ErrUserNameIllegal: | ||||
| 			ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "user/signup", &form) | ||||
| 		default: | ||||
| 			ctx.Handle(200, "user.SignUp", err) | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user