diff options
Diffstat (limited to 'models/user.go')
-rw-r--r-- | models/user.go | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/models/user.go b/models/user.go index d8469251..912b04a3 100644 --- a/models/user.go +++ b/models/user.go @@ -17,6 +17,12 @@ import ( "github.com/gogits/gogs/utils" ) +var UserPasswdSalt string + +func init() { + UserPasswdSalt = utils.Cfg.MustValue("security", "USER_PASSWD_SALT") +} + // User types. const ( UT_INDIVIDUAL = iota + 1 @@ -33,9 +39,9 @@ const ( type User struct { Id int64 LowerName string `xorm:"unique not null"` - Name string `xorm:"unique not null" valid:"AlphaDash;MinSize(5);MaxSize(30)"` - Email string `xorm:"unique not null" valid:"Email"` - Passwd string `xorm:"not null" valid:"MinSize(8)"` + Name string `xorm:"unique not null"` + Email string `xorm:"unique not null"` + Passwd string `xorm:"not null"` LoginType int Type int NumFollowers int @@ -79,6 +85,7 @@ var ( ErrUserOwnRepos = errors.New("User still have ownership of repositories") ErrUserAlreadyExist = errors.New("User already exist") ErrUserNotExist = errors.New("User does not exist") + ErrEmailAlreadyUsed = errors.New("E-mail already used") ) // IsUserExist checks if given user name exist, @@ -87,6 +94,10 @@ func IsUserExist(name string) (bool, error) { return orm.Get(&User{LowerName: strings.ToLower(name)}) } +func IsEmailUsed(email string) (bool, error) { + return orm.Get(&User{Email: email}) +} + // RegisterUser creates record of a new user. func RegisterUser(user *User) (err error) { isExist, err := IsUserExist(user.Name) @@ -96,9 +107,18 @@ func RegisterUser(user *User) (err error) { return ErrUserAlreadyExist } + isExist, err = IsEmailUsed(user.Email) + if err != nil { + return err + } else if isExist { + return ErrEmailAlreadyUsed + } + user.LowerName = strings.ToLower(user.Name) user.Avatar = utils.EncodeMd5(user.Email) - user.EncodePasswd() + if err = user.EncodePasswd(); err != nil { + return err + } if _, err = orm.Insert(user); err != nil { return err } @@ -136,7 +156,7 @@ func DeleteUser(user *User) error { // EncodePasswd encodes password to safe format. func (user *User) EncodePasswd() error { - newPasswd, err := scrypt.Key([]byte(user.Passwd), []byte("!#@FDEWREWR&*("), 16384, 8, 1, 64) + newPasswd, err := scrypt.Key([]byte(user.Passwd), []byte(UserPasswdSalt), 16384, 8, 1, 64) user.Passwd = fmt.Sprintf("%x", newPasswd) return err } |