mirror of https://github.com/writeas/writefreely
parent
6b25d79b2e
commit
bab5e42299
@ -0,0 +1,116 @@ |
|||||||
|
package author |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/writeas/writefreely/config" |
||||||
|
"os" |
||||||
|
"path/filepath" |
||||||
|
"regexp" |
||||||
|
) |
||||||
|
|
||||||
|
// Regex pattern for valid usernames
|
||||||
|
var validUsernameReg = regexp.MustCompile("^[a-zA-Z0-9][a-zA-Z0-9-]*$") |
||||||
|
|
||||||
|
// List of reserved usernames
|
||||||
|
var reservedUsernames = map[string]bool{ |
||||||
|
"a": true, |
||||||
|
"about": true, |
||||||
|
"add": true, |
||||||
|
"admin": true, |
||||||
|
"administrator": true, |
||||||
|
"adminzone": true, |
||||||
|
"api": true, |
||||||
|
"article": true, |
||||||
|
"articles": true, |
||||||
|
"auth": true, |
||||||
|
"authenticate": true, |
||||||
|
"browse": true, |
||||||
|
"c": true, |
||||||
|
"categories": true, |
||||||
|
"category": true, |
||||||
|
"changes": true, |
||||||
|
"create": true, |
||||||
|
"css": true, |
||||||
|
"data": true, |
||||||
|
"dev": true, |
||||||
|
"developers": true, |
||||||
|
"draft": true, |
||||||
|
"drafts": true, |
||||||
|
"edit": true, |
||||||
|
"edits": true, |
||||||
|
"faq": true, |
||||||
|
"feed": true, |
||||||
|
"feedback": true, |
||||||
|
"guide": true, |
||||||
|
"guides": true, |
||||||
|
"help": true, |
||||||
|
"index": true, |
||||||
|
"js": true, |
||||||
|
"login": true, |
||||||
|
"logout": true, |
||||||
|
"me": true, |
||||||
|
"media": true, |
||||||
|
"meta": true, |
||||||
|
"metadata": true, |
||||||
|
"new": true, |
||||||
|
"news": true, |
||||||
|
"post": true, |
||||||
|
"posts": true, |
||||||
|
"privacy": true, |
||||||
|
"publication": true, |
||||||
|
"publications": true, |
||||||
|
"publish": true, |
||||||
|
"random": true, |
||||||
|
"read": true, |
||||||
|
"reader": true, |
||||||
|
"register": true, |
||||||
|
"remove": true, |
||||||
|
"signin": true, |
||||||
|
"signout": true, |
||||||
|
"signup": true, |
||||||
|
"start": true, |
||||||
|
"status": true, |
||||||
|
"summary": true, |
||||||
|
"support": true, |
||||||
|
"tag": true, |
||||||
|
"tags": true, |
||||||
|
"team": true, |
||||||
|
"template": true, |
||||||
|
"templates": true, |
||||||
|
"terms": true, |
||||||
|
"terms-of-service": true, |
||||||
|
"termsofservice": true, |
||||||
|
"theme": true, |
||||||
|
"themes": true, |
||||||
|
"tips": true, |
||||||
|
"tos": true, |
||||||
|
"update": true, |
||||||
|
"updates": true, |
||||||
|
"user": true, |
||||||
|
"users": true, |
||||||
|
"yourname": true, |
||||||
|
} |
||||||
|
|
||||||
|
// IsValidUsername returns true if a given username is neither reserved nor
|
||||||
|
// of the correct format.
|
||||||
|
func IsValidUsername(cfg *config.Config, username string) bool { |
||||||
|
// Username has to be above a character limit
|
||||||
|
if len(username) < cfg.App.MinUsernameLen { |
||||||
|
return false |
||||||
|
} |
||||||
|
// Username is invalid if page with the same name exists. So traverse
|
||||||
|
// available pages, adding them to reservedUsernames map that'll be checked
|
||||||
|
// later.
|
||||||
|
// TODO: use pagesDir const
|
||||||
|
filepath.Walk("pages/", func(path string, i os.FileInfo, err error) error { |
||||||
|
reservedUsernames[i.Name()] = true |
||||||
|
return nil |
||||||
|
}) |
||||||
|
|
||||||
|
// Username is invalid if it is reserved!
|
||||||
|
if _, reserved := reservedUsernames[username]; reserved { |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: use correct regexp function here
|
||||||
|
return len(validUsernameReg.FindStringSubmatch(username)) > 0 |
||||||
|
} |
Loading…
Reference in new issue