Просмотр исходного кода

clarify name/username/owner/pusher for webhook

Christopher Brickley лет назад: 9
Родитель
Сommit
f94d7c3f51
3 измененных файлов с 34 добавлено и 9 удалено
  1. 22 6
      models/action.go
  2. 8 0
      models/user.go
  3. 4 3
      models/webhook.go

+ 22 - 6
models/action.go

@@ -243,15 +243,29 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string,
 	if !strings.HasPrefix(oldCommitId, "0000000") {
 		compareUrl = fmt.Sprintf("%s/compare/%s...%s", repoLink, oldCommitId, newCommitId)
 	}
+
+	pusher_email, pusher_name := "", ""
+	pusher, err := GetUserByName(userName)
+	if err == nil {
+		pusher_email = pusher.Email
+		pusher_name = pusher.GetFullNameFallback()
+	}
+
 	commits := make([]*PayloadCommit, len(commit.Commits))
 	for i, cmt := range commit.Commits {
+		author_username := ""
+		author, err := GetUserByEmail(cmt.AuthorEmail)
+		if err == nil {
+			author_username = author.Name
+		}
 		commits[i] = &PayloadCommit{
 			Id:      cmt.Sha1,
 			Message: cmt.Message,
 			Url:     fmt.Sprintf("%s/commit/%s", repoLink, cmt.Sha1),
 			Author: &PayloadAuthor{
-				Name:  cmt.AuthorName,
-				Email: cmt.AuthorEmail,
+				Name:     cmt.AuthorName,
+				Email:    cmt.AuthorEmail,
+				UserName: author_username,
 			},
 		}
 	}
@@ -266,14 +280,16 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string,
 			Website:     repo.Website,
 			Watchers:    repo.NumWatches,
 			Owner: &PayloadAuthor{
-				Name:  repoUserName,
-				Email: actEmail,
+				Name:     repo.Owner.GetFullNameFallback(),
+				Email:    repo.Owner.Email,
+				UserName: repo.Owner.Name,
 			},
 			Private: repo.IsPrivate,
 		},
 		Pusher: &PayloadAuthor{
-			Name:  repo.Owner.LowerName,
-			Email: repo.Owner.Email,
+			Name:     pusher_name,
+			Email:    pusher_email,
+			UserName: userName,
 		},
 		Before:     oldCommitId,
 		After:      newCommitId,

+ 8 - 0
models/user.go

@@ -167,6 +167,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) {

+ 4 - 3
models/webhook.go

@@ -154,8 +154,9 @@ const (
 )
 
 type PayloadAuthor struct {
-	Name  string `json:"name"`
-	Email string `json:"email"`
+	Name     string `json:"name"`
+	Email    string `json:"email"`
+	UserName string `json:"username"`
 }
 
 type PayloadCommit struct {
@@ -172,7 +173,7 @@ type PayloadRepo struct {
 	Description string         `json:"description"`
 	Website     string         `json:"website"`
 	Watchers    int            `json:"watchers"`
-	Owner       *PayloadAuthor `json:"author"`
+	Owner       *PayloadAuthor `json:"owner"`
 	Private     bool           `json:"private"`
 }