summaryrefslogtreecommitdiffstats
path: root/models/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/user.go')
-rw-r--r--models/user.go49
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.