|
@@ -12,6 +12,7 @@ import (
|
|
"os"
|
|
"os"
|
|
"path"
|
|
"path"
|
|
"path/filepath"
|
|
"path/filepath"
|
|
|
|
+ "regexp"
|
|
"strings"
|
|
"strings"
|
|
"sync"
|
|
"sync"
|
|
"time"
|
|
"time"
|
|
@@ -82,6 +83,7 @@ var (
|
|
ErrRepoAlreadyExist = errors.New("Repository already exist")
|
|
ErrRepoAlreadyExist = errors.New("Repository already exist")
|
|
ErrRepoNotExist = errors.New("Repository does not exist")
|
|
ErrRepoNotExist = errors.New("Repository does not exist")
|
|
ErrRepoFileNotExist = errors.New("Target Repo file does not exist")
|
|
ErrRepoFileNotExist = errors.New("Target Repo file does not exist")
|
|
|
|
+ ErrRepoNameIllegal = errors.New("Repository name contains illegal characters")
|
|
)
|
|
)
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
@@ -104,6 +106,15 @@ func init() {
|
|
os.Exit(2)
|
|
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.
|
|
// 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
|
|
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.
|
|
// CreateRepository creates a repository for given user or orgnaziation.
|
|
func CreateRepository(user *User, repoName, desc, repoLang, license string, private bool, initReadme bool) (*Repository, error) {
|
|
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)
|
|
isExist, err := IsRepositoryExist(user, repoName)
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|