[refactor] Unify the export of user data via API (#15144)
* [refactor] unify how user data is exported via API * test time via unix timestamp
This commit is contained in:
		
							parent
							
								
									f4d27498bd
								
							
						
					
					
						commit
						290cf75f93
					
				
					 26 changed files with 117 additions and 97 deletions
				
			
		|  | @ -61,7 +61,7 @@ func TestAPIIssuesReactions(t *testing.T) { | ||||||
| 	DecodeJSON(t, resp, &apiReactions) | 	DecodeJSON(t, resp, &apiReactions) | ||||||
| 	expectResponse := make(map[int]api.Reaction) | 	expectResponse := make(map[int]api.Reaction) | ||||||
| 	expectResponse[0] = api.Reaction{ | 	expectResponse[0] = api.Reaction{ | ||||||
| 		User:     convert.ToUser(user2, true, true), | 		User:     convert.ToUser(user2, user2), | ||||||
| 		Reaction: "eyes", | 		Reaction: "eyes", | ||||||
| 		Created:  time.Unix(1573248003, 0), | 		Created:  time.Unix(1573248003, 0), | ||||||
| 	} | 	} | ||||||
|  | @ -121,12 +121,12 @@ func TestAPICommentReactions(t *testing.T) { | ||||||
| 	DecodeJSON(t, resp, &apiReactions) | 	DecodeJSON(t, resp, &apiReactions) | ||||||
| 	expectResponse := make(map[int]api.Reaction) | 	expectResponse := make(map[int]api.Reaction) | ||||||
| 	expectResponse[0] = api.Reaction{ | 	expectResponse[0] = api.Reaction{ | ||||||
| 		User:     convert.ToUser(user2, true, true), | 		User:     convert.ToUser(user2, user2), | ||||||
| 		Reaction: "laugh", | 		Reaction: "laugh", | ||||||
| 		Created:  time.Unix(1573248004, 0), | 		Created:  time.Unix(1573248004, 0), | ||||||
| 	} | 	} | ||||||
| 	expectResponse[1] = api.Reaction{ | 	expectResponse[1] = api.Reaction{ | ||||||
| 		User:     convert.ToUser(user1, true, true), | 		User:     convert.ToUser(user1, user1), | ||||||
| 		Reaction: "laugh", | 		Reaction: "laugh", | ||||||
| 		Created:  time.Unix(1573248005, 0), | 		Created:  time.Unix(1573248005, 0), | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -31,5 +31,13 @@ func TestAPITeamUser(t *testing.T) { | ||||||
| 	user2.Created = user2.Created.In(time.Local) | 	user2.Created = user2.Created.In(time.Local) | ||||||
| 	user := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User) | 	user := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User) | ||||||
| 
 | 
 | ||||||
| 	assert.Equal(t, convert.ToUser(user, true, false), user2) | 	expectedUser := convert.ToUser(user, user) | ||||||
|  | 
 | ||||||
|  | 	// test time via unix timestamp
 | ||||||
|  | 	assert.EqualValues(t, expectedUser.LastLogin.Unix(), user2.LastLogin.Unix()) | ||||||
|  | 	assert.EqualValues(t, expectedUser.Created.Unix(), user2.Created.Unix()) | ||||||
|  | 	expectedUser.LastLogin = user2.LastLogin | ||||||
|  | 	expectedUser.Created = user2.Created | ||||||
|  | 
 | ||||||
|  | 	assert.Equal(t, expectedUser, user2) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -86,13 +86,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string] | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if ok { | 	if ok { | ||||||
| 		apiAuthor = ToUser(cacheAuthor, false, false) | 		apiAuthor = ToUser(cacheAuthor, nil) | ||||||
| 	} else { | 	} else { | ||||||
| 		author, err := models.GetUserByEmail(commit.Author.Email) | 		author, err := models.GetUserByEmail(commit.Author.Email) | ||||||
| 		if err != nil && !models.IsErrUserNotExist(err) { | 		if err != nil && !models.IsErrUserNotExist(err) { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} else if err == nil { | 		} else if err == nil { | ||||||
| 			apiAuthor = ToUser(author, false, false) | 			apiAuthor = ToUser(author, nil) | ||||||
| 			if userCache != nil { | 			if userCache != nil { | ||||||
| 				userCache[commit.Author.Email] = author | 				userCache[commit.Author.Email] = author | ||||||
| 			} | 			} | ||||||
|  | @ -108,13 +108,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string] | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if ok { | 	if ok { | ||||||
| 		apiCommitter = ToUser(cacheCommitter, false, false) | 		apiCommitter = ToUser(cacheCommitter, nil) | ||||||
| 	} else { | 	} else { | ||||||
| 		committer, err := models.GetUserByEmail(commit.Committer.Email) | 		committer, err := models.GetUserByEmail(commit.Committer.Email) | ||||||
| 		if err != nil && !models.IsErrUserNotExist(err) { | 		if err != nil && !models.IsErrUserNotExist(err) { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} else if err == nil { | 		} else if err == nil { | ||||||
| 			apiCommitter = ToUser(committer, false, false) | 			apiCommitter = ToUser(committer, nil) | ||||||
| 			if userCache != nil { | 			if userCache != nil { | ||||||
| 				userCache[commit.Committer.Email] = committer | 				userCache[commit.Committer.Email] = committer | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | @ -31,7 +31,7 @@ func ToAPIIssue(issue *models.Issue) *api.Issue { | ||||||
| 		URL:      issue.APIURL(), | 		URL:      issue.APIURL(), | ||||||
| 		HTMLURL:  issue.HTMLURL(), | 		HTMLURL:  issue.HTMLURL(), | ||||||
| 		Index:    issue.Index, | 		Index:    issue.Index, | ||||||
| 		Poster:   ToUser(issue.Poster, false, false), | 		Poster:   ToUser(issue.Poster, nil), | ||||||
| 		Title:    issue.Title, | 		Title:    issue.Title, | ||||||
| 		Body:     issue.Content, | 		Body:     issue.Content, | ||||||
| 		Ref:      issue.Ref, | 		Ref:      issue.Ref, | ||||||
|  | @ -66,9 +66,9 @@ func ToAPIIssue(issue *models.Issue) *api.Issue { | ||||||
| 	} | 	} | ||||||
| 	if len(issue.Assignees) > 0 { | 	if len(issue.Assignees) > 0 { | ||||||
| 		for _, assignee := range issue.Assignees { | 		for _, assignee := range issue.Assignees { | ||||||
| 			apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, false, false)) | 			apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, nil)) | ||||||
| 		} | 		} | ||||||
| 		apiIssue.Assignee = ToUser(issue.Assignees[0], false, false) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee`
 | 		apiIssue.Assignee = ToUser(issue.Assignees[0], nil) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee`
 | ||||||
| 	} | 	} | ||||||
| 	if issue.IsPull { | 	if issue.IsPull { | ||||||
| 		if err := issue.LoadPullRequest(); err != nil { | 		if err := issue.LoadPullRequest(); err != nil { | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ import ( | ||||||
| func ToComment(c *models.Comment) *api.Comment { | func ToComment(c *models.Comment) *api.Comment { | ||||||
| 	return &api.Comment{ | 	return &api.Comment{ | ||||||
| 		ID:       c.ID, | 		ID:       c.ID, | ||||||
| 		Poster:   ToUser(c.Poster, false, false), | 		Poster:   ToUser(c.Poster, nil), | ||||||
| 		HTMLURL:  c.HTMLURL(), | 		HTMLURL:  c.HTMLURL(), | ||||||
| 		IssueURL: c.IssueURL(), | 		IssueURL: c.IssueURL(), | ||||||
| 		PRURL:    c.PRURL(), | 		PRURL:    c.PRURL(), | ||||||
|  |  | ||||||
|  | @ -159,7 +159,7 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest { | ||||||
| 	if pr.HasMerged { | 	if pr.HasMerged { | ||||||
| 		apiPullRequest.Merged = pr.MergedUnix.AsTimePtr() | 		apiPullRequest.Merged = pr.MergedUnix.AsTimePtr() | ||||||
| 		apiPullRequest.MergedCommitID = &pr.MergedCommitID | 		apiPullRequest.MergedCommitID = &pr.MergedCommitID | ||||||
| 		apiPullRequest.MergedBy = ToUser(pr.Merger, false, false) | 		apiPullRequest.MergedBy = ToUser(pr.Merger, nil) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return apiPullRequest | 	return apiPullRequest | ||||||
|  |  | ||||||
|  | @ -20,14 +20,9 @@ func ToPullReview(r *models.Review, doer *models.User) (*api.PullReview, error) | ||||||
| 		r.Reviewer = models.NewGhostUser() | 		r.Reviewer = models.NewGhostUser() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	auth := false |  | ||||||
| 	if doer != nil { |  | ||||||
| 		auth = doer.IsAdmin || doer.ID == r.ReviewerID |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	result := &api.PullReview{ | 	result := &api.PullReview{ | ||||||
| 		ID:                r.ID, | 		ID:                r.ID, | ||||||
| 		Reviewer:          ToUser(r.Reviewer, doer != nil, auth), | 		Reviewer:          ToUser(r.Reviewer, doer), | ||||||
| 		ReviewerTeam:      ToTeam(r.ReviewerTeam), | 		ReviewerTeam:      ToTeam(r.ReviewerTeam), | ||||||
| 		State:             api.ReviewStateUnknown, | 		State:             api.ReviewStateUnknown, | ||||||
| 		Body:              r.Content, | 		Body:              r.Content, | ||||||
|  | @ -88,14 +83,10 @@ func ToPullReviewCommentList(review *models.Review, doer *models.User) ([]*api.P | ||||||
| 	for _, lines := range review.CodeComments { | 	for _, lines := range review.CodeComments { | ||||||
| 		for _, comments := range lines { | 		for _, comments := range lines { | ||||||
| 			for _, comment := range comments { | 			for _, comment := range comments { | ||||||
| 				auth := false |  | ||||||
| 				if doer != nil { |  | ||||||
| 					auth = doer.IsAdmin || doer.ID == comment.Poster.ID |  | ||||||
| 				} |  | ||||||
| 				apiComment := &api.PullReviewComment{ | 				apiComment := &api.PullReviewComment{ | ||||||
| 					ID:           comment.ID, | 					ID:           comment.ID, | ||||||
| 					Body:         comment.Content, | 					Body:         comment.Content, | ||||||
| 					Reviewer:     ToUser(comment.Poster, doer != nil, auth), | 					Reviewer:     ToUser(comment.Poster, doer), | ||||||
| 					ReviewID:     review.ID, | 					ReviewID:     review.ID, | ||||||
| 					Created:      comment.CreatedUnix.AsTime(), | 					Created:      comment.CreatedUnix.AsTime(), | ||||||
| 					Updated:      comment.UpdatedUnix.AsTime(), | 					Updated:      comment.UpdatedUnix.AsTime(), | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ func ToRelease(r *models.Release) *api.Release { | ||||||
| 		IsPrerelease: r.IsPrerelease, | 		IsPrerelease: r.IsPrerelease, | ||||||
| 		CreatedAt:    r.CreatedUnix.AsTime(), | 		CreatedAt:    r.CreatedUnix.AsTime(), | ||||||
| 		PublishedAt:  r.CreatedUnix.AsTime(), | 		PublishedAt:  r.CreatedUnix.AsTime(), | ||||||
| 		Publisher:    ToUser(r.Publisher, false, false), | 		Publisher:    ToUser(r.Publisher, nil), | ||||||
| 		Attachments:  assets, | 		Attachments:  assets, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -102,7 +102,7 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool) | ||||||
| 
 | 
 | ||||||
| 	return &api.Repository{ | 	return &api.Repository{ | ||||||
| 		ID:                        repo.ID, | 		ID:                        repo.ID, | ||||||
| 		Owner:                     ToUser(repo.Owner, mode != models.AccessModeNone, mode >= models.AccessModeAdmin), | 		Owner:                     ToUserWithAccessMode(repo.Owner, mode), | ||||||
| 		Name:                      repo.Name, | 		Name:                      repo.Name, | ||||||
| 		FullName:                  repo.FullName(), | 		FullName:                  repo.FullName(), | ||||||
| 		Description:               repo.Description, | 		Description:               repo.Description, | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ func ToCommitStatus(status *models.CommitStatus) *api.CommitStatus { | ||||||
| 
 | 
 | ||||||
| 	if status.CreatorID != 0 { | 	if status.CreatorID != 0 { | ||||||
| 		creator, _ := models.GetUserByID(status.CreatorID) | 		creator, _ := models.GetUserByID(status.CreatorID) | ||||||
| 		apiStatus.Creator = ToUser(creator, false, false) | 		apiStatus.Creator = ToUser(creator, nil) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return apiStatus | 	return apiStatus | ||||||
|  |  | ||||||
|  | @ -11,11 +11,32 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ToUser convert models.User to api.User
 | // ToUser convert models.User to api.User
 | ||||||
| // signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
 | // if doer is set, private information is added if the doer has the permission to see it
 | ||||||
| func ToUser(user *models.User, signed, authed bool) *api.User { | func ToUser(user, doer *models.User) *api.User { | ||||||
| 	if user == nil { | 	if user == nil { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  | 	authed := false | ||||||
|  | 	signed := false | ||||||
|  | 	if doer != nil { | ||||||
|  | 		signed = true | ||||||
|  | 		authed = doer.ID == user.ID || doer.IsAdmin | ||||||
|  | 	} | ||||||
|  | 	return toUser(user, signed, authed) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ToUserWithAccessMode convert models.User to api.User
 | ||||||
|  | // AccessMode is not none show add some more information
 | ||||||
|  | func ToUserWithAccessMode(user *models.User, accessMode models.AccessMode) *api.User { | ||||||
|  | 	if user == nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	return toUser(user, accessMode != models.AccessModeNone, false) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // toUser convert models.User to api.User
 | ||||||
|  | // signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
 | ||||||
|  | func toUser(user *models.User, signed, authed bool) *api.User { | ||||||
| 	result := &api.User{ | 	result := &api.User{ | ||||||
| 		ID:         user.ID, | 		ID:         user.ID, | ||||||
| 		UserName:   user.Name, | 		UserName:   user.Name, | ||||||
|  |  | ||||||
|  | @ -15,14 +15,14 @@ func TestUser_ToUser(t *testing.T) { | ||||||
| 
 | 
 | ||||||
| 	user1 := models.AssertExistsAndLoadBean(t, &models.User{ID: 1, IsAdmin: true}).(*models.User) | 	user1 := models.AssertExistsAndLoadBean(t, &models.User{ID: 1, IsAdmin: true}).(*models.User) | ||||||
| 
 | 
 | ||||||
| 	apiUser := ToUser(user1, true, true) | 	apiUser := toUser(user1, true, true) | ||||||
| 	assert.True(t, apiUser.IsAdmin) | 	assert.True(t, apiUser.IsAdmin) | ||||||
| 
 | 
 | ||||||
| 	user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2, IsAdmin: false}).(*models.User) | 	user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2, IsAdmin: false}).(*models.User) | ||||||
| 
 | 
 | ||||||
| 	apiUser = ToUser(user2, true, true) | 	apiUser = toUser(user2, true, true) | ||||||
| 	assert.False(t, apiUser.IsAdmin) | 	assert.False(t, apiUser.IsAdmin) | ||||||
| 
 | 
 | ||||||
| 	apiUser = ToUser(user1, false, false) | 	apiUser = toUser(user1, false, false) | ||||||
| 	assert.False(t, apiUser.IsAdmin) | 	assert.False(t, apiUser.IsAdmin) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -53,7 +53,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | ||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||||
|  | @ -61,7 +61,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | ||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -77,7 +77,7 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | ||||||
| 	if err := webhook_services.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | 	if err := webhook_services.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | ||||||
| 		Forkee: convert.ToRepo(oldRepo, oldMode), | 		Forkee: convert.ToRepo(oldRepo, oldMode), | ||||||
| 		Repo:   convert.ToRepo(repo, mode), | 		Repo:   convert.ToRepo(repo, mode), | ||||||
| 		Sender: convert.ToUser(doer, false, false), | 		Sender: convert.ToUser(doer, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err) | ||||||
| 	} | 	} | ||||||
|  | @ -89,8 +89,8 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | ||||||
| 		if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 		if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 			Action:       api.HookRepoCreated, | 			Action:       api.HookRepoCreated, | ||||||
| 			Repository:   convert.ToRepo(repo, models.AccessModeOwner), | 			Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||||
| 			Organization: convert.ToUser(u, false, false), | 			Organization: convert.ToUser(u, nil), | ||||||
| 			Sender:       convert.ToUser(doer, false, false), | 			Sender:       convert.ToUser(doer, nil), | ||||||
| 		}); err != nil { | 		}); err != nil { | ||||||
| 			log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 			log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 		} | 		} | ||||||
|  | @ -102,8 +102,8 @@ func (m *webhookNotifier) NotifyCreateRepository(doer *models.User, u *models.Us | ||||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 		Action:       api.HookRepoCreated, | 		Action:       api.HookRepoCreated, | ||||||
| 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||||
| 		Organization: convert.ToUser(u, false, false), | 		Organization: convert.ToUser(u, nil), | ||||||
| 		Sender:       convert.ToUser(doer, false, false), | 		Sender:       convert.ToUser(doer, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 	} | 	} | ||||||
|  | @ -115,8 +115,8 @@ func (m *webhookNotifier) NotifyDeleteRepository(doer *models.User, repo *models | ||||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 		Action:       api.HookRepoDeleted, | 		Action:       api.HookRepoDeleted, | ||||||
| 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||||
| 		Organization: convert.ToUser(u, false, false), | 		Organization: convert.ToUser(u, nil), | ||||||
| 		Sender:       convert.ToUser(doer, false, false), | 		Sender:       convert.ToUser(doer, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 	} | 	} | ||||||
|  | @ -127,8 +127,8 @@ func (m *webhookNotifier) NotifyMigrateRepository(doer *models.User, u *models.U | ||||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 		Action:       api.HookRepoCreated, | 		Action:       api.HookRepoCreated, | ||||||
| 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||||
| 		Organization: convert.ToUser(u, false, false), | 		Organization: convert.ToUser(u, nil), | ||||||
| 		Sender:       convert.ToUser(doer, false, false), | 		Sender:       convert.ToUser(doer, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 	} | 	} | ||||||
|  | @ -147,7 +147,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | ||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		} | 		} | ||||||
| 		if removed { | 		if removed { | ||||||
| 			apiPullRequest.Action = api.HookIssueUnassigned | 			apiPullRequest.Action = api.HookIssueUnassigned | ||||||
|  | @ -165,7 +165,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | ||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		} | 		} | ||||||
| 		if removed { | 		if removed { | ||||||
| 			apiIssue.Action = api.HookIssueUnassigned | 			apiIssue.Action = api.HookIssueUnassigned | ||||||
|  | @ -199,7 +199,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | ||||||
| 			}, | 			}, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||||
|  | @ -212,7 +212,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | ||||||
| 			}, | 			}, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(issue.Poster, false, false), | 			Sender:     convert.ToUser(issue.Poster, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -234,7 +234,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | ||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		} | 		} | ||||||
| 		if isClosed { | 		if isClosed { | ||||||
| 			apiPullRequest.Action = api.HookIssueClosed | 			apiPullRequest.Action = api.HookIssueClosed | ||||||
|  | @ -247,7 +247,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | ||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		} | 		} | ||||||
| 		if isClosed { | 		if isClosed { | ||||||
| 			apiIssue.Action = api.HookIssueClosed | 			apiIssue.Action = api.HookIssueClosed | ||||||
|  | @ -277,7 +277,7 @@ func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue, mentions []*models | ||||||
| 		Index:      issue.Index, | 		Index:      issue.Index, | ||||||
| 		Issue:      convert.ToAPIIssue(issue), | 		Issue:      convert.ToAPIIssue(issue), | ||||||
| 		Repository: convert.ToRepo(issue.Repo, mode), | 		Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 		Sender:     convert.ToUser(issue.Poster, false, false), | 		Sender:     convert.ToUser(issue.Poster, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
|  | @ -303,7 +303,7 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest, mention | ||||||
| 		Index:       pull.Issue.Index, | 		Index:       pull.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pull), | 		PullRequest: convert.ToAPIPullRequest(pull), | ||||||
| 		Repository:  convert.ToRepo(pull.Issue.Repo, mode), | 		Repository:  convert.ToRepo(pull.Issue.Repo, mode), | ||||||
| 		Sender:      convert.ToUser(pull.Issue.Poster, false, false), | 		Sender:      convert.ToUser(pull.Issue.Poster, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
|  | @ -324,7 +324,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | ||||||
| 			}, | 			}, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||||
|  | @ -337,7 +337,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | ||||||
| 			}, | 			}, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -374,7 +374,7 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 			Repository: convert.ToRepo(c.Issue.Repo, mode), | 			Repository: convert.ToRepo(c.Issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -388,7 +388,7 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 			Repository: convert.ToRepo(c.Issue.Repo, mode), | 			Repository: convert.ToRepo(c.Issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  | @ -409,7 +409,7 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *mode | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Comment:    convert.ToComment(comment), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: convert.ToRepo(repo, mode), | 			Repository: convert.ToRepo(repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -418,7 +418,7 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *mode | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Comment:    convert.ToComment(comment), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: convert.ToRepo(repo, mode), | 			Repository: convert.ToRepo(repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  | @ -453,7 +453,7 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models | ||||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||||
| 			Comment:    convert.ToComment(comment), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: convert.ToRepo(comment.Issue.Repo, mode), | 			Repository: convert.ToRepo(comment.Issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -462,7 +462,7 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models | ||||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||||
| 			Comment:    convert.ToComment(comment), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: convert.ToRepo(comment.Issue.Repo, mode), | 			Repository: convert.ToRepo(comment.Issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  | @ -502,7 +502,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | ||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, models.AccessModeNone), | 			Repository:  convert.ToRepo(issue.Repo, models.AccessModeNone), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||||
|  | @ -510,7 +510,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | ||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -544,7 +544,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | ||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  convert.ToRepo(issue.Repo, mode), | 			Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:      convert.ToUser(doer, false, false), | 			Sender:      convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | ||||||
|  | @ -552,7 +552,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | ||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: convert.ToRepo(issue.Repo, mode), | 			Repository: convert.ToRepo(issue.Repo, mode), | ||||||
| 			Sender:     convert.ToUser(doer, false, false), | 			Sender:     convert.ToUser(doer, nil), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -561,7 +561,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { | func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { | ||||||
| 	apiPusher := convert.ToUser(pusher, false, false) | 	apiPusher := convert.ToUser(pusher, nil) | ||||||
| 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | ||||||
|  | @ -610,7 +610,7 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mod | ||||||
| 		Index:       pr.Issue.Index, | 		Index:       pr.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  convert.ToRepo(pr.Issue.Repo, mode), | 		Repository:  convert.ToRepo(pr.Issue.Repo, mode), | ||||||
| 		Sender:      convert.ToUser(doer, false, false), | 		Sender:      convert.ToUser(doer, nil), | ||||||
| 		Action:      api.HookIssueClosed, | 		Action:      api.HookIssueClosed, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -643,7 +643,7 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, | ||||||
| 		}, | 		}, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 		PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 		Repository:  convert.ToRepo(issue.Repo, mode), | 		Repository:  convert.ToRepo(issue.Repo, mode), | ||||||
| 		Sender:      convert.ToUser(doer, false, false), | 		Sender:      convert.ToUser(doer, nil), | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -682,7 +682,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | ||||||
| 		Index:       review.Issue.Index, | 		Index:       review.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  convert.ToRepo(review.Issue.Repo, mode), | 		Repository:  convert.ToRepo(review.Issue.Repo, mode), | ||||||
| 		Sender:      convert.ToUser(review.Reviewer, false, false), | 		Sender:      convert.ToUser(review.Reviewer, nil), | ||||||
| 		Review: &api.ReviewPayload{ | 		Review: &api.ReviewPayload{ | ||||||
| 			Type:    string(reviewHookType), | 			Type:    string(reviewHookType), | ||||||
| 			Content: review.Content, | 			Content: review.Content, | ||||||
|  | @ -693,7 +693,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | ||||||
| 	apiPusher := convert.ToUser(pusher, false, false) | 	apiPusher := convert.ToUser(pusher, nil) | ||||||
| 	apiRepo := convert.ToRepo(repo, models.AccessModeNone) | 	apiRepo := convert.ToRepo(repo, models.AccessModeNone) | ||||||
| 	refName := git.RefEndName(refFullName) | 	refName := git.RefEndName(refFullName) | ||||||
| 
 | 
 | ||||||
|  | @ -737,14 +737,14 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m | ||||||
| 		Index:       pr.Issue.Index, | 		Index:       pr.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  convert.ToRepo(pr.Issue.Repo, models.AccessModeNone), | 		Repository:  convert.ToRepo(pr.Issue.Repo, models.AccessModeNone), | ||||||
| 		Sender:      convert.ToUser(doer, false, false), | 		Sender:      convert.ToUser(doer, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | 		log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | ||||||
| 	apiPusher := convert.ToUser(pusher, false, false) | 	apiPusher := convert.ToUser(pusher, nil) | ||||||
| 	apiRepo := convert.ToRepo(repo, models.AccessModeNone) | 	apiRepo := convert.ToRepo(repo, models.AccessModeNone) | ||||||
| 	refName := git.RefEndName(refFullName) | 	refName := git.RefEndName(refFullName) | ||||||
| 
 | 
 | ||||||
|  | @ -770,7 +770,7 @@ func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookRele | ||||||
| 		Action:     action, | 		Action:     action, | ||||||
| 		Release:    convert.ToRelease(rel), | 		Release:    convert.ToRelease(rel), | ||||||
| 		Repository: convert.ToRepo(rel.Repo, mode), | 		Repository: convert.ToRepo(rel.Repo, mode), | ||||||
| 		Sender:     convert.ToUser(rel.Publisher, false, false), | 		Sender:     convert.ToUser(rel.Publisher, nil), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
|  | @ -789,7 +789,7 @@ func (m *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Rel | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { | func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { | ||||||
| 	apiPusher := convert.ToUser(pusher, false, false) | 	apiPusher := convert.ToUser(pusher, nil) | ||||||
| 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | ||||||
|  |  | ||||||
|  | @ -116,7 +116,7 @@ func CreateUser(ctx *context.APIContext) { | ||||||
| 	if form.SendNotify { | 	if form.SendNotify { | ||||||
| 		mailer.SendRegisterNotifyMail(ctx.Locale, u) | 		mailer.SendRegisterNotifyMail(ctx.Locale, u) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusCreated, convert.ToUser(u, ctx.IsSigned, ctx.User.IsAdmin)) | 	ctx.JSON(http.StatusCreated, convert.ToUser(u, ctx.User)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // EditUser api for modifying a user's information
 | // EditUser api for modifying a user's information
 | ||||||
|  | @ -238,7 +238,7 @@ func EditUser(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	log.Trace("Account profile updated by admin (%s): %s", ctx.User.Name, u.Name) | 	log.Trace("Account profile updated by admin (%s): %s", ctx.User.Name, u.Name) | ||||||
| 
 | 
 | ||||||
| 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.IsSigned, ctx.User.IsAdmin)) | 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.User)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeleteUser api for deleting a user
 | // DeleteUser api for deleting a user
 | ||||||
|  | @ -403,7 +403,7 @@ func GetAllUsers(ctx *context.APIContext) { | ||||||
| 
 | 
 | ||||||
| 	results := make([]*api.User, len(users)) | 	results := make([]*api.User, len(users)) | ||||||
| 	for i := range users { | 	for i := range users { | ||||||
| 		results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User.IsAdmin) | 		results[i] = convert.ToUser(users[i], ctx.User) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ func listMembers(ctx *context.APIContext, publicOnly bool) { | ||||||
| 
 | 
 | ||||||
| 	apiMembers := make([]*api.User, len(members)) | 	apiMembers := make([]*api.User, len(members)) | ||||||
| 	for i, member := range members { | 	for i, member := range members { | ||||||
| 		apiMembers[i] = convert.ToUser(member, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		apiMembers[i] = convert.ToUser(member, ctx.User) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ctx.JSON(http.StatusOK, apiMembers) | 	ctx.JSON(http.StatusOK, apiMembers) | ||||||
|  |  | ||||||
|  | @ -337,7 +337,7 @@ func GetTeamMembers(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	members := make([]*api.User, len(team.Members)) | 	members := make([]*api.User, len(team.Members)) | ||||||
| 	for i, member := range team.Members { | 	for i, member := range team.Members { | ||||||
| 		members[i] = convert.ToUser(member, ctx.IsSigned, ctx.User.IsAdmin) | 		members[i] = convert.ToUser(member, ctx.User) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, members) | 	ctx.JSON(http.StatusOK, members) | ||||||
| } | } | ||||||
|  | @ -380,7 +380,7 @@ func GetTeamMember(ctx *context.APIContext) { | ||||||
| 		ctx.NotFound() | 		ctx.NotFound() | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.IsSigned, ctx.User.IsAdmin)) | 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.User)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // AddTeamMember api for add a member to a team
 | // AddTeamMember api for add a member to a team
 | ||||||
|  |  | ||||||
|  | @ -54,7 +54,7 @@ func ListCollaborators(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	users := make([]*api.User, len(collaborators)) | 	users := make([]*api.User, len(collaborators)) | ||||||
| 	for i, collaborator := range collaborators { | 	for i, collaborator := range collaborators { | ||||||
| 		users[i] = convert.ToUser(collaborator.User, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		users[i] = convert.ToUser(collaborator.User, ctx.User) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, users) | 	ctx.JSON(http.StatusOK, users) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -148,8 +148,8 @@ func TestHook(ctx *context.APIContext) { | ||||||
| 			convert.ToPayloadCommit(ctx.Repo.Repository, ctx.Repo.Commit), | 			convert.ToPayloadCommit(ctx.Repo.Repository, ctx.Repo.Commit), | ||||||
| 		}, | 		}, | ||||||
| 		Repo:   convert.ToRepo(ctx.Repo.Repository, models.AccessModeNone), | 		Repo:   convert.ToRepo(ctx.Repo.Repository, models.AccessModeNone), | ||||||
| 		Pusher: convert.ToUser(ctx.User, ctx.IsSigned, false), | 		Pusher: convert.ToUserWithAccessMode(ctx.User, models.AccessModeNone), | ||||||
| 		Sender: convert.ToUser(ctx.User, ctx.IsSigned, false), | 		Sender: convert.ToUserWithAccessMode(ctx.User, models.AccessModeNone), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "PrepareWebhook: ", err) | 		ctx.Error(http.StatusInternalServerError, "PrepareWebhook: ", err) | ||||||
| 		return | 		return | ||||||
|  |  | ||||||
|  | @ -81,7 +81,7 @@ func GetIssueCommentReactions(ctx *context.APIContext) { | ||||||
| 	var result []api.Reaction | 	var result []api.Reaction | ||||||
| 	for _, r := range reactions { | 	for _, r := range reactions { | ||||||
| 		result = append(result, api.Reaction{ | 		result = append(result, api.Reaction{ | ||||||
| 			User:     convert.ToUser(r.User, ctx.IsSigned, false), | 			User:     convert.ToUser(r.User, ctx.User), | ||||||
| 			Reaction: r.Type, | 			Reaction: r.Type, | ||||||
| 			Created:  r.CreatedUnix.AsTime(), | 			Created:  r.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
|  | @ -203,7 +203,7 @@ func changeIssueCommentReaction(ctx *context.APIContext, form api.EditReactionOp | ||||||
| 				ctx.Error(http.StatusForbidden, err.Error(), err) | 				ctx.Error(http.StatusForbidden, err.Error(), err) | ||||||
| 			} else if models.IsErrReactionAlreadyExist(err) { | 			} else if models.IsErrReactionAlreadyExist(err) { | ||||||
| 				ctx.JSON(http.StatusOK, api.Reaction{ | 				ctx.JSON(http.StatusOK, api.Reaction{ | ||||||
| 					User:     convert.ToUser(ctx.User, true, true), | 					User:     convert.ToUser(ctx.User, ctx.User), | ||||||
| 					Reaction: reaction.Type, | 					Reaction: reaction.Type, | ||||||
| 					Created:  reaction.CreatedUnix.AsTime(), | 					Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 				}) | 				}) | ||||||
|  | @ -214,7 +214,7 @@ func changeIssueCommentReaction(ctx *context.APIContext, form api.EditReactionOp | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		ctx.JSON(http.StatusCreated, api.Reaction{ | 		ctx.JSON(http.StatusCreated, api.Reaction{ | ||||||
| 			User:     convert.ToUser(ctx.User, true, true), | 			User:     convert.ToUser(ctx.User, ctx.User), | ||||||
| 			Reaction: reaction.Type, | 			Reaction: reaction.Type, | ||||||
| 			Created:  reaction.CreatedUnix.AsTime(), | 			Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
|  | @ -299,7 +299,7 @@ func GetIssueReactions(ctx *context.APIContext) { | ||||||
| 	var result []api.Reaction | 	var result []api.Reaction | ||||||
| 	for _, r := range reactions { | 	for _, r := range reactions { | ||||||
| 		result = append(result, api.Reaction{ | 		result = append(result, api.Reaction{ | ||||||
| 			User:     convert.ToUser(r.User, ctx.IsSigned, false), | 			User:     convert.ToUser(r.User, ctx.User), | ||||||
| 			Reaction: r.Type, | 			Reaction: r.Type, | ||||||
| 			Created:  r.CreatedUnix.AsTime(), | 			Created:  r.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
|  | @ -412,7 +412,7 @@ func changeIssueReaction(ctx *context.APIContext, form api.EditReactionOption, i | ||||||
| 				ctx.Error(http.StatusForbidden, err.Error(), err) | 				ctx.Error(http.StatusForbidden, err.Error(), err) | ||||||
| 			} else if models.IsErrReactionAlreadyExist(err) { | 			} else if models.IsErrReactionAlreadyExist(err) { | ||||||
| 				ctx.JSON(http.StatusOK, api.Reaction{ | 				ctx.JSON(http.StatusOK, api.Reaction{ | ||||||
| 					User:     convert.ToUser(ctx.User, true, true), | 					User:     convert.ToUser(ctx.User, ctx.User), | ||||||
| 					Reaction: reaction.Type, | 					Reaction: reaction.Type, | ||||||
| 					Created:  reaction.CreatedUnix.AsTime(), | 					Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 				}) | 				}) | ||||||
|  | @ -423,7 +423,7 @@ func changeIssueReaction(ctx *context.APIContext, form api.EditReactionOption, i | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		ctx.JSON(http.StatusCreated, api.Reaction{ | 		ctx.JSON(http.StatusCreated, api.Reaction{ | ||||||
| 			User:     convert.ToUser(ctx.User, true, true), | 			User:     convert.ToUser(ctx.User, ctx.User), | ||||||
| 			Reaction: reaction.Type, | 			Reaction: reaction.Type, | ||||||
| 			Created:  reaction.CreatedUnix.AsTime(), | 			Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
|  |  | ||||||
|  | @ -279,7 +279,7 @@ func GetIssueSubscribers(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	apiUsers := make([]*api.User, 0, len(users)) | 	apiUsers := make([]*api.User, 0, len(users)) | ||||||
| 	for i := range users { | 	for i := range users { | ||||||
| 		apiUsers[i] = convert.ToUser(users[i], ctx.IsSigned, false) | 		apiUsers[i] = convert.ToUser(users[i], ctx.User) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ctx.JSON(http.StatusOK, apiUsers) | 	ctx.JSON(http.StatusOK, apiUsers) | ||||||
|  |  | ||||||
|  | @ -50,7 +50,7 @@ func ListStargazers(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	users := make([]*api.User, len(stargazers)) | 	users := make([]*api.User, len(stargazers)) | ||||||
| 	for i, stargazer := range stargazers { | 	for i, stargazer := range stargazers { | ||||||
| 		users[i] = convert.ToUser(stargazer, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		users[i] = convert.ToUser(stargazer, ctx.User) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, users) | 	ctx.JSON(http.StatusOK, users) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -50,7 +50,7 @@ func ListSubscribers(ctx *context.APIContext) { | ||||||
| 	} | 	} | ||||||
| 	users := make([]*api.User, len(subscribers)) | 	users := make([]*api.User, len(subscribers)) | ||||||
| 	for i, subscriber := range subscribers { | 	for i, subscriber := range subscribers { | ||||||
| 		users[i] = convert.ToUser(subscriber, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		users[i] = convert.ToUser(subscriber, ctx.User) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, users) | 	ctx.JSON(http.StatusOK, users) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ import ( | ||||||
| func responseAPIUsers(ctx *context.APIContext, users []*models.User) { | func responseAPIUsers(ctx *context.APIContext, users []*models.User) { | ||||||
| 	apiUsers := make([]*api.User, len(users)) | 	apiUsers := make([]*api.User, len(users)) | ||||||
| 	for i := range users { | 	for i := range users { | ||||||
| 		apiUsers[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		apiUsers[i] = convert.ToUser(users[i], ctx.User) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, &apiUsers) | 	ctx.JSON(http.StatusOK, &apiUsers) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -25,13 +25,13 @@ func appendPrivateInformation(apiKey *api.PublicKey, key *models.PublicKey, defa | ||||||
| 		apiKey.KeyType = "user" | 		apiKey.KeyType = "user" | ||||||
| 
 | 
 | ||||||
| 		if defaultUser.ID == key.OwnerID { | 		if defaultUser.ID == key.OwnerID { | ||||||
| 			apiKey.Owner = convert.ToUser(defaultUser, true, true) | 			apiKey.Owner = convert.ToUser(defaultUser, defaultUser) | ||||||
| 		} else { | 		} else { | ||||||
| 			user, err := models.GetUserByID(key.OwnerID) | 			user, err := models.GetUserByID(key.OwnerID) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return apiKey, err | 				return apiKey, err | ||||||
| 			} | 			} | ||||||
| 			apiKey.Owner = convert.ToUser(user, true, true) | 			apiKey.Owner = convert.ToUser(user, user) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		apiKey.KeyType = "unknown" | 		apiKey.KeyType = "unknown" | ||||||
|  |  | ||||||
|  | @ -75,7 +75,7 @@ func Search(ctx *context.APIContext) { | ||||||
| 
 | 
 | ||||||
| 	results := make([]*api.User, len(users)) | 	results := make([]*api.User, len(users)) | ||||||
| 	for i := range users { | 	for i := range users { | ||||||
| 		results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) | 		results[i] = convert.ToUser(users[i], ctx.User) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | ||||||
|  | @ -112,7 +112,7 @@ func GetInfo(ctx *context.APIContext) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.IsSigned, ctx.User != nil && (ctx.User.ID == u.ID || ctx.User.IsAdmin))) | 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.User)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetAuthenticatedUser get current user's information
 | // GetAuthenticatedUser get current user's information
 | ||||||
|  | @ -126,7 +126,7 @@ func GetAuthenticatedUser(ctx *context.APIContext) { | ||||||
| 	//   "200":
 | 	//   "200":
 | ||||||
| 	//     "$ref": "#/responses/User"
 | 	//     "$ref": "#/responses/User"
 | ||||||
| 
 | 
 | ||||||
| 	ctx.JSON(http.StatusOK, convert.ToUser(ctx.User, ctx.IsSigned, ctx.User != nil)) | 	ctx.JSON(http.StatusOK, convert.ToUser(ctx.User, ctx.User)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetUserHeatmapData is the handler to get a users heatmap
 | // GetUserHeatmapData is the handler to get a users heatmap
 | ||||||
|  |  | ||||||
|  | @ -1083,7 +1083,7 @@ func TestWebhook(ctx *context.Context) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	apiUser := convert.ToUser(ctx.User, true, true) | 	apiUser := convert.ToUserWithAccessMode(ctx.User, models.AccessModeNone) | ||||||
| 	p := &api.PushPayload{ | 	p := &api.PushPayload{ | ||||||
| 		Ref:    git.BranchPrefix + ctx.Repo.Repository.DefaultBranch, | 		Ref:    git.BranchPrefix + ctx.Repo.Repository.DefaultBranch, | ||||||
| 		Before: commit.ID.String(), | 		Before: commit.ID.String(), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue