|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|