diff options
Diffstat (limited to 'models/user.go')
-rw-r--r-- | models/user.go | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/models/user.go b/models/user.go index 3372d75497..a4b753f8e1 100644 --- a/models/user.go +++ b/models/user.go @@ -40,6 +40,7 @@ type User struct { Id int64 LowerName string `xorm:"unique not null"` Name string `xorm:"unique not null"` + FullName string Email string `xorm:"unique not null"` Passwd string `xorm:"not null"` LoginType int @@ -68,7 +69,9 @@ func (user *User) HomeLink() string { // AvatarLink returns the user gravatar link. func (user *User) AvatarLink() string { - if base.Service.EnableCacheAvatar { + if base.DisableGravatar { + return "/img/avatar_default.jpg" + } else if base.Service.EnableCacheAvatar { return "/avatar/" + user.Avatar } return "//1.gravatar.com/avatar/" + user.Avatar @@ -224,9 +227,9 @@ func ChangeUserName(user *User, newUserName string) (err error) { accesses[i].UserName = newUserName if strings.HasPrefix(accesses[i].RepoName, user.LowerName+"/") { accesses[i].RepoName = strings.Replace(accesses[i].RepoName, user.LowerName, newUserName, 1) - if err = UpdateAccessWithSession(sess, &accesses[i]); err != nil { - return err - } + } + if err = UpdateAccessWithSession(sess, &accesses[i]); err != nil { + return err } } @@ -242,6 +245,7 @@ func ChangeUserName(user *User, newUserName string) (err error) { } for j := range accesses { + accesses[j].UserName = newUserName accesses[j].RepoName = newUserName + "/" + repos[i].LowerName if err = UpdateAccessWithSession(sess, &accesses[j]); err != nil { return err @@ -404,22 +408,47 @@ func GetUserByEmail(email string) (*User, error) { return user, nil } +// SearchUserByName returns given number of users whose name contains keyword. +func SearchUserByName(key string, limit int) (us []*User, err error) { + // Prevent SQL inject. + key = strings.TrimSpace(key) + if len(key) == 0 { + return us, nil + } + + key = strings.Split(key, " ")[0] + if len(key) == 0 { + return us, nil + } + key = strings.ToLower(key) + + us = make([]*User, 0, limit) + err = orm.Limit(limit).Where("lower_name like '%" + key + "%'").Find(&us) + return us, err +} + // LoginUserPlain validates user by raw user name and password. -func LoginUserPlain(name, passwd string) (*User, error) { - user := User{LowerName: strings.ToLower(name)} - has, err := orm.Get(&user) +func LoginUserPlain(uname, passwd string) (*User, error) { + var u *User + if strings.Contains(uname, "@") { + u = &User{Email: uname} + } else { + u = &User{LowerName: strings.ToLower(uname)} + } + + has, err := orm.Get(u) if err != nil { return nil, err } else if !has { return nil, ErrUserNotExist } - newUser := &User{Passwd: passwd, Salt: user.Salt} + newUser := &User{Passwd: passwd, Salt: u.Salt} newUser.EncodePasswd() - if user.Passwd != newUser.Passwd { + if u.Passwd != newUser.Passwd { return nil, ErrUserNotExist } - return &user, nil + return u, nil } // Follow is connection request for receiving user notifycation. |