]> source.dussan.org Git - gitea.git/commitdiff
Add Repository/user name filter
authorUnknown <joe2010xtmf@163.com>
Thu, 20 Mar 2014 15:41:24 +0000 (11:41 -0400)
committerUnknown <joe2010xtmf@163.com>
Thu, 20 Mar 2014 15:41:24 +0000 (11:41 -0400)
README.md
gogs.go
models/repo.go
models/user.go
routers/repo/repo.go
routers/repo/single.go
routers/user/user.go

index 3a1023c6d92155b018ede2b198fa80fad3f5265e..4219e4ed03c9a21b75485a76bb4d328d8762525d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -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
 
diff --git a/gogs.go b/gogs.go
index d32e3908c9fd8b456d22fd8c46424f1a45a4f27e..a600c53d1229b4d04cac1dea844108fe3d0a90d9 100644 (file)
--- a/gogs.go
+++ b/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
index 052341ff6e742e17553c1cf14af86a7570868ccc..bcbc586785821f6d559cf82aa82741ee8d745ba5 100644 (file)
@@ -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
index fd89af6b3f490fa6aa4540d6872fb6194d10ce78..990e1954a5db5f027f22ba91765ecb36f6840bad 100644 (file)
@@ -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
index 556cc4343c905a553687f00db26b8c1e21a7dc2b..c83a6df5225a2273d7a55810e90f8580e157e4e3 100644 (file)
@@ -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)
 }
index f1b15cceed908d0bf8f8a82fb8211fa6825caedc..eab49be919daf335bf04baf986ea9814ca53a36f 100644 (file)
@@ -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")
 }
index be2c4d38390e58d19fb2e2e752a07e46596592ac..ea6922591e0b2cc041bb318c9b4b36725d599347 100644 (file)
@@ -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)
                }