aboutsummaryrefslogtreecommitdiff
path: root/models/repo.go
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-03-20 11:41:24 -0400
committerUnknown <joe2010xtmf@163.com>2014-03-20 11:41:24 -0400
commit3b387336bfc097090d5b03f5b01e136bca56f8fd (patch)
tree70b21fa35d162a011b6a154fab4579c9491d7245 /models/repo.go
parent1a0d7c54a2abecbe5335ca374fd8a345c2e7d3fd (diff)
Add Repository/user name filter
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go
index 052341ff..bcbc5867 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -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