aboutsummaryrefslogtreecommitdiff
path: root/models/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/user.go')
-rw-r--r--models/user.go82
1 files changed, 67 insertions, 15 deletions
diff --git a/models/user.go b/models/user.go
index 96881ea3..ee8f8586 100644
--- a/models/user.go
+++ b/models/user.go
@@ -5,6 +5,7 @@
package models
import (
+ "container/list"
"crypto/sha256"
"encoding/hex"
"errors"
@@ -82,22 +83,22 @@ type User struct {
// DashboardLink returns the user dashboard page link.
func (u *User) DashboardLink() string {
if u.IsOrganization() {
- return "/org/" + u.Name + "/dashboard/"
+ return setting.AppSubUrl + "/org/" + u.Name + "/dashboard/"
}
- return "/"
+ return setting.AppSubUrl + "/"
}
// HomeLink returns the user home page link.
func (u *User) HomeLink() string {
- return "/user/" + u.Name
+ return setting.AppSubUrl + "/" + u.Name
}
// AvatarLink returns user gravatar link.
func (u *User) AvatarLink() string {
if setting.DisableGravatar {
- return "/img/avatar_default.jpg"
+ return setting.AppSubUrl + "/img/avatar_default.jpg"
} else if setting.Service.EnableCacheAvatar {
- return "/avatar/" + u.Avatar
+ return setting.AppSubUrl + "/avatar/" + u.Avatar
}
return "//1.gravatar.com/avatar/" + u.Avatar
}
@@ -167,6 +168,14 @@ func (u *User) GetOrganizations() error {
return nil
}
+// GetFullNameFallback returns Full Name if set, otherwise username
+func (u *User) GetFullNameFallback() string {
+ if u.FullName == "" {
+ return u.Name
+ }
+ return u.FullName
+}
+
// IsUserExist checks if given user name exist,
// the user name should be noncased unique.
func IsUserExist(name string) (bool, error) {
@@ -505,6 +514,49 @@ func GetUserIdsByNames(names []string) []int64 {
return ids
}
+// UserCommit represtns a commit with validation of user.
+type UserCommit struct {
+ UserName string
+ *git.Commit
+}
+
+// ValidateCommitWithEmail chceck if author's e-mail of commit is corresponsind to a user.
+func ValidateCommitWithEmail(c *git.Commit) (uname string) {
+ u, err := GetUserByEmail(c.Author.Email)
+ if err == nil {
+ uname = u.Name
+ }
+ return uname
+}
+
+// ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users.
+func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
+ emails := map[string]string{}
+ newCommits := list.New()
+ e := oldCommits.Front()
+ for e != nil {
+ c := e.Value.(*git.Commit)
+
+ uname := ""
+ if v, ok := emails[c.Author.Email]; !ok {
+ u, err := GetUserByEmail(c.Author.Email)
+ if err == nil {
+ uname = u.Name
+ }
+ emails[c.Author.Email] = uname
+ } else {
+ uname = v
+ }
+
+ newCommits.PushBack(UserCommit{
+ UserName: uname,
+ Commit: c,
+ })
+ e = e.Next()
+ }
+ return newCommits
+}
+
// GetUserByEmail returns the user object by given e-mail if exists.
func GetUserByEmail(email string) (*User, error) {
if len(email) == 0 {
@@ -548,27 +600,27 @@ type Follow struct {
// FollowUser marks someone be another's follower.
func FollowUser(userId int64, followId int64) (err error) {
- session := x.NewSession()
- defer session.Close()
- session.Begin()
+ sess := x.NewSession()
+ defer sess.Close()
+ sess.Begin()
- if _, err = session.Insert(&Follow{UserId: userId, FollowId: followId}); err != nil {
- session.Rollback()
+ if _, err = sess.Insert(&Follow{UserId: userId, FollowId: followId}); err != nil {
+ sess.Rollback()
return err
}
rawSql := "UPDATE `user` SET num_followers = num_followers + 1 WHERE id = ?"
- if _, err = session.Exec(rawSql, followId); err != nil {
- session.Rollback()
+ if _, err = sess.Exec(rawSql, followId); err != nil {
+ sess.Rollback()
return err
}
rawSql = "UPDATE `user` SET num_followings = num_followings + 1 WHERE id = ?"
- if _, err = session.Exec(rawSql, userId); err != nil {
- session.Rollback()
+ if _, err = sess.Exec(rawSql, userId); err != nil {
+ sess.Rollback()
return err
}
- return session.Commit()
+ return sess.Commit()
}
// UnFollowUser unmarks someone be another's follower.