diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-04-17 10:14:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-17 10:14:18 +0800 |
commit | fa497b16332c24bc4d9e788c64bda94e3c1499a7 (patch) | |
tree | 1dcf1b13f702a07dc30da791bf0e76e1ffba4027 /internal/db/user.go | |
parent | e131a4564680a3257a2d4795af7669e4260b33b9 (diff) |
db: add tests for repos (#6112)
* Add Repos.create method
* Fix repo name error handling
* Fix all compile errors
* Update github.com/go-macaron/captcha to fix http issue
* Add repos tests
Diffstat (limited to 'internal/db/user.go')
-rw-r--r-- | internal/db/user.go | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/internal/db/user.go b/internal/db/user.go index b650fa14..c225bd1a 100644 --- a/internal/db/user.go +++ b/internal/db/user.go @@ -503,25 +503,52 @@ var ( reservedUserPatterns = []string{"*.keys"} ) -// isUsableName checks if name is reserved or pattern of name is not allowed +type ErrNameNotAllowed struct { + args errutil.Args +} + +func IsErrNameNotAllowed(err error) bool { + _, ok := err.(ErrNameNotAllowed) + return ok +} + +func (err ErrNameNotAllowed) Value() string { + val, ok := err.args["name"].(string) + if ok { + return val + } + + val, ok = err.args["pattern"].(string) + if ok { + return val + } + + return "<value not found>" +} + +func (err ErrNameNotAllowed) Error() string { + return fmt.Sprintf("name is not allowed: %v", err.args) +} + +// isNameAllowed checks if name is reserved or pattern of name is not allowed // based on given reserved names and patterns. // Names are exact match, patterns can be prefix or suffix match with placeholder '*'. -func isUsableName(names, patterns []string, name string) error { +func isNameAllowed(names, patterns []string, name string) error { name = strings.TrimSpace(strings.ToLower(name)) if utf8.RuneCountInString(name) == 0 { - return errors.EmptyName{} + return ErrNameNotAllowed{args: errutil.Args{"reason": "empty name"}} } for i := range names { if name == names[i] { - return ErrNameReserved{name} + return ErrNameNotAllowed{args: errutil.Args{"reason": "reserved", "name": name}} } } for _, pat := range patterns { if pat[0] == '*' && strings.HasSuffix(name, pat[1:]) || (pat[len(pat)-1] == '*' && strings.HasPrefix(name, pat[:len(pat)-1])) { - return ErrNamePatternNotAllowed{pat} + return ErrNameNotAllowed{args: errutil.Args{"reason": "reserved", "pattern": pat}} } } @@ -529,7 +556,7 @@ func isUsableName(names, patterns []string, name string) error { } func IsUsableUsername(name string) error { - return isUsableName(reservedUsernames, reservedUserPatterns, name) + return isNameAllowed(reservedUsernames, reservedUserPatterns, name) } // CreateUser creates record of a new user. |